INRIA / INRIA/spoon

Sniper: Failure on comments inside enum values

Open
#4,332 7 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
2k
Forks
392
Avg merge
11h 24m
Merged PRs (30d)
36

Description

When there are comments inside enum values, Spoon fails to perform a transformation on the type.

```java
package org.example;

enum Example {

ENGLISH( /* boom */
"Hello",
"World"
),
FRENCH(
"Bonjour",
"l'univers"
);

String hello;
String world;

public Example(
String hello,
String world
) {
this.hello = hello;
this.world = world;
}
}
```

```
Exception in thread "main" spoon.SpoonException: Cannot compare this: [46, 115] with other: ["55", "185"]
at spoon.support.sniper.internal.ElementSourceFragment.compare(ElementSourceFragment.java:371)
at spoon.support.sniper.internal.ElementSourceFragment.add(ElementSourceFragment.java:285)
at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:317)
at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:243)
at spoon.support.sniper.internal.ElementSourceFragment$1.enter(ElementSourceFragment.java:200)
at spoon.reflect.visitor.CtScanner.visitCtEnumValue(CtScanner.java:442)
at spoon.support.reflect.declaration.CtEnumValueImpl.accept(CtEnumValueImpl.java:18)
at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
at spoon.reflect.visitor.CtScanner.visitCtEnum(CtScanner.java:415)
at spoon.support.reflect.declaration.CtEnumImpl.accept(CtEnumImpl.java:45)
at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
at spoon.reflect.visitor.EarlyTerminatingScanner.visitCtCompilationUnit(EarlyTerminatingScanner.java:160)
at spoon.support.reflect.declaration.CtCompilationUnitImpl.accept(CtCompilationUnitImpl.java:407)
at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
at spoon.support.sniper.internal.ElementSourceFragment.createSourceFragmentsFrom(ElementSourceFragment.java:228)
at spoon.support.reflect.declaration.CtCompilationUnitImpl.getOriginalSourceFragment(CtCompilationUnitImpl.java:359)
at spoon.support.modelobs.SourceFragmentCreator.onChange(SourceFragmentCreator.java:32)
at spoon.support.modelobs.ChangeCollector$ChangeListener.onObjectUpdate(ChangeCollector.java:175)
at spoon.support.reflect.declaration.CtNamedElementImpl.setSimpleName(CtNamedElementImpl.java:45)
at org.example.MainKt.main(Main.kt:15)
at org.example.MainKt.main(Main.kt)
```

Code to reproduce the issue is available on GitHub:
https://github.com/plcarmel/spoon-enum-bug

```
java -version
java version "11.0.13" 2021-10-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.13+10-LTS-370)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.13+10-LTS-370, mixed mode)
```

Contributor guide

Open the contributing guide

Research direction

Run the linked spoon-enum-bug reproducer first and inspect the failure through spoon.support.sniper.internal.ElementSourceFragment.java, especially the enum-value path shown in the stack trace. Trace how comments inside enum arguments are compared and added; done means the transformation completes without the reported SpoonException for the supplied example.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.