forcedotcom / forcedotcom/code-analyzer

[BUG][code-analyzer] The engine with name 'sfge' threw an unexpected error

オープン
#1,967 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
BUG P3
主要言語
TypeScript
スター
240
フォーク
52
平均マージ
1日 23時間
マージ済み PR(30日)
5

説明

### Have you tried to resolve this issue yourself first?

- [x] I confirm I have gone through the above steps and still have an issue to report.

### Bug Description

When running the SFGE engine using

[code-scan-sfge.csv](https://github.com/user-attachments/files/24383801/code-scan-sfge.csv)

[code-analyzer-sfge.yml](https://github.com/user-attachments/files/24383828/code-analyzer-sfge.yml)

[sfca-2025_12_30_15_43_01_855.log](https://github.com/user-attachments/files/24383850/sfca-2025_12_30_15_43_01_855.log)

Related log specific for SFGE is below, which suggests that the following code is an issue

`for (Contact c : cList ?? new List()) {}`

Specifically i think it is the ?? within the for loop, since moving it out seems to stop this error happening.

Overall, it seems to be two things
1) Massive failures which make no sense unless really digging into issues
2) Issue with parsing (the AST tree?) to Apex class for something which is valid apex

### Output / Logs

```shell
2025-12-30 15:44:44 ERROR Sfge:159 - Unexpected exception while loading graph
com.salesforce.exception.UnexpectedException: vp[FirstChild->false], vp[BeginLine->313], vp[DefiningType_CaseSafe->APEXCLASSWITHISSUE...], vp[LastChild->false], vp[DefiningType->APEXCLASSWITHISSUE...], vp[EndLine->313], vp[childIdx->3], vp[BeginColumn->3]
at com.salesforce.graph.build.GremlinUtil.getChildren(GremlinUtil.java:60)
at com.salesforce.graph.build.MethodPathBuilderVisitor.visitForEachStatement(MethodPathBuilderVisitor.java:235)
at com.salesforce.graph.build.MethodPathBuilderVisitor._visit(MethodPathBuilderVisitor.java:130)
at com.salesforce.graph.build.MethodPathBuilderVisitor._visit(MethodPathBuilderVisitor.java:159)
at com.salesforce.graph.build.MethodPathBuilderVisitor.apply(MethodPathBuilderVisitor.java:97)
at com.salesforce.graph.build.AbstractApexVertexBuilder.afterInsert(AbstractApexVertexBuilder.java:169)
at com.salesforce.graph.build.AbstractApexVertexBuilder.buildVertices(AbstractApexVertexBuilder.java:153)
at com.salesforce.graph.build.AbstractApexVertexBuilder.buildVertices(AbstractApexVertexBuilder.java:125)
at com.salesforce.graph.build.AbstractApexVertexBuilder.buildVertices(AbstractApexVertexBuilder.java:35)
at com.salesforce.graph.build.CustomerApexVertexBuilder.build(CustomerApexVertexBuilder.java:21)
at com.salesforce.graph.build.Util.buildGraph(Util.java:39)
at com.salesforce.graph.ops.GraphUtil.loadSourceFilesAndFolders(GraphUtil.java:170)
at com.salesforce.Sfge$Dependencies.loadSourceFilesAndFoldersToGraph(Sfge.java:249)
at com.salesforce.Sfge.execute(Sfge.java:153)
at com.salesforce.Sfge.process(Sfge.java:103)
at com.salesforce.Sfge.main(Sfge.java:71)
```

### Steps To Reproduce

`sf code-analyzer run --config-file ./code-analyzer-sfge.yml --view detail -f codescan/code-scan-sfge.csv -r sfge -t app\classes\class.cls`

### Expected Behavior

If failing, then fail with a meaningful error, but in this case I don't believe an error is correct

### Operating System

Windows 11

### Salesforce CLI Version

@salesforce/cli/2.116.6 win32-x64 node-v24.8.0

### Code Analyzer Plugin (code-analyzer) Version

code-analyzer 5.7.1 (5.7.1)

### Node Version

v24.8.0

### Java Version

openjdk version 21.0.8

### Python Version

Python 3.13.7

### Additional Context (Screenshots, Files, etc)

_No response_

### Workaround

_No response_

### Urgency

Low

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

code-analyzer-sfge.yml、code-scan-sfge.csv、および提供された CLI コマンドで失敗を再現し、その後 GremlinUtil.java と MethodPathBuilderVisitor.java、特に visitForEachStatement を調査します。失敗する null 合体式に対する AST の処理を、動作する回避策の場合と比較します。このケースのカバレッジがあり、有効な Apex が予期しないグラフ読み込み例外を引き起こさなくなれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
compilers, tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
52/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。