Sniper: Failure on comments inside enum values
- 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
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