forcedotcom / forcedotcom/code-analyzer

[BUG][code-analyzer] sfge: calling toString() on an enum aborts the entry point (UnimplementedMethodException)

Abierto Apto para principiantes
#2,090 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
240
Forks
52
Merge medio
1 d 23 h
PR fusionados (30 d)
5

Descripción

### 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

**Engine:** `sfge` (Salesforce Graph Engine) · **Rule:** `ApexFlsViolation` (DevPreview) · **Selector:** `--rule-selector sfge`

`ApexEnumValue.apply` implements only `name()`, `ordinal()` and (when indeterminate) `equals()`, then falls through to `throw new UnimplementedMethodException(this, vertex)` at `ApexEnumValue.java:123`.

`toString()` is universal in Apex — every enum inherits it — so any path that calls it on an enum value aborts.

```apex
Schema.DisplayType dt = Account.Name.getDescribe().getType();
a.Description = dt.toString();
```

### Output / Logs

```shell
UnimplementedMethodException: ApexEnumValue:toString, vertex=MethodCallExpressionVertex{fullMethodName=dt.toString, ...}:
com.salesforce.graph.symbols.apex.ApexEnumValue.apply(ApexEnumValue.java:123);
com.salesforce.graph.symbols.PathScopeVisitor.handleApexValueMethod(PathScopeVisitor.java:1487);
com.salesforce.graph.symbols.PathScopeVisitor.afterVisit(PathScopeVisitor.java:1242); ...
```

### Steps To Reproduce

1. Create an empty SFDX project (`sfdx-project.json` with a single `force-app` package directory).
2. Add `force-app/main/default/classes/EnumToString.cls` with the class shown below, plus a standard `EnumToString.cls-meta.xml` (apiVersion 62.0).
3. Add `code-analyzer.yml`:
```yaml
engines:
sfge:
java_thread_timeout: 900000
java_thread_count: 4
```
4. Run:
```
sf code-analyzer run --rule-selector sfge --workspace . --config-file code-analyzer.yml
```
5. The run reports an `InternalExecutionError` for the entry point instead of analysing it. That entry point yields no `ApexFlsViolation` findings at all, and nothing in the summary indicates coverage was lost.

```apex
public with sharing class EnumToString {
@AuraEnabled
public static void run() {
Schema.DisplayType dt = Account.Name.getDescribe().getType();
Account a = new Account();
a.Description = dt.toString();
insert a;
}
}
```

### Expected Behavior

`toString()` on an enum should resolve like `name()` does — returning the value name when determinate, and an indeterminate string otherwise. Suggested fix: handle `toString` alongside `METHOD_NAME` in `ApexEnumValue.apply`, and add it to `INDETERMINANT_VALUE_PROVIDERS`.

More generally, an unmodelled method on a known value type should degrade to an indeterminate value rather than abort the entry point.

### Operating System

macOS 26.5.2

### Salesforce CLI Version

@salesforce/cli/2.147.7 darwin-arm64 node-v24.5.0

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

code-analyzer 5.15.0

### Node Version

v24.5.0

### Java Version

openjdk version "11.0.32" 2026-07-21

### Python Version

N/A

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

In our codebase this accounts for 8 occurrences across 4 distinct `@AuraEnabled` entry points — the highest count of any single unimplemented-method signature we hit.

Same class of gap as #1510, #1044 and #1003 (all on `ApexStringValue`), which were closed in the 2026-06-30 pre-v5 sweep.

### Workaround

Replace `enumValue.toString()` with `enumValue.name()`, which sfge does model. Semantically equivalent for standard enums.

### Urgency

Moderate

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza por ApexEnumValue.java, alrededor de la línea 123, y sigue el procesamiento mostrado hasta PathScopeVisitor.java. Ejecuta el comando sf code-analyzer proporcionado contra la reproducción de EnumToString. Se considera terminado cuando enum toString() ya no aborta el punto de entrada, devuelve un valor determinado o indeterminado según corresponda y el análisis se completa sin perder cobertura.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java
Área
tooling
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Activo
Claridad
Bien especificado
Aptitud para principiantes
76/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.