Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SpoonException when running sorald repair on junit4 #275

Closed
nharrand opened this issue Dec 9, 2020 · 5 comments
Closed

SpoonException when running sorald repair on junit4 #275

nharrand opened this issue Dec 9, 2020 · 5 comments
Assignees
Labels
bug Something isn't working
Milestone

Comments

@nharrand
Copy link
Collaborator

nharrand commented Dec 9, 2020

Hi,
I ran into the following issue when running sorald in repair mode.

When I run

java -jar /app/lib/sorald-1.1-SNAPSHOT-jar-with-dependencies.jar repair --fileOutputStrategy IN_PLACE --originalFilesPath ./ --ruleKeys 2111,2142,2272,2116,2184,2095,1860,1948,1854,1444,4973

on junit4 on commit 7852b90cfe1cea1e0cdaa19d490c83f0d8684b50, with sorald commit 417b17dd5ec6d1fa4f9aacd300194e3fc5c4f78e

I obtain:

INFO  468 source files to be analyzed
INFO  468/468 source files have been analyzed
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
INFO  468 source files to be analyzed
INFO  468/468 source files have been analyzed
spoon.SpoonException: Cannot compare this: [82, 3261] with other: ["1163", "18361"]
	at spoon.support.sniper.internal.ElementSourceFragment.compare(ElementSourceFragment.java:359)
	at spoon.support.sniper.internal.ElementSourceFragment.add(ElementSourceFragment.java:273)
	at spoon.support.sniper.internal.ElementSourceFragment.addNextSibling(ElementSourceFragment.java:313)
	at spoon.support.sniper.internal.ElementSourceFragment.add(ElementSourceFragment.java:277)
	at spoon.support.sniper.internal.ElementSourceFragment.addNextSibling(ElementSourceFragment.java:313)
	at spoon.support.sniper.internal.ElementSourceFragment.add(ElementSourceFragment.java:277)
	at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:305)
	at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:241)
	at spoon.support.sniper.internal.ElementSourceFragment.access$000(ElementSourceFragment.java:51)
	at spoon.support.sniper.internal.ElementSourceFragment$1.enter(ElementSourceFragment.java:200)
	at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:331)
	at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:58)
	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:170)
	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:170)
	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.onListAdd(ChangeCollector.java:190)
	at spoon.support.util.ModelList.add(ModelList.java:183)
	at spoon.support.reflect.code.CtBlockImpl.addStatement(CtBlockImpl.java:176)
	at sorald.processor.InterruptedExceptionProcessor.repair(InterruptedExceptionProcessor.java:31)
	at sorald.processor.InterruptedExceptionProcessor.repair(InterruptedExceptionProcessor.java:11)
	at sorald.processor.SoraldAbstractProcessor.process(SoraldAbstractProcessor.java:111)
	at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:72)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:170)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:143)
	at spoon.reflect.visitor.CtScanner.visitCtTry(CtScanner.java:739)
	at spoon.support.reflect.code.CtTryImpl.accept(CtTryImpl.java:43)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:178)
	at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:68)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:170)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:143)
	at spoon.reflect.visitor.CtScanner.visitCtBlock(CtScanner.java:300)
	at spoon.support.reflect.code.CtBlockImpl.accept(CtBlockImpl.java:58)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:178)
	at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:68)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:170)
	at spoon.reflect.visitor.CtScanner.visitCtMethod(CtScanner.java:566)
	at spoon.support.reflect.declaration.CtMethodImpl.accept(CtMethodImpl.java:58)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:178)
	at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:68)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:170)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:143)
	at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:336)
	at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:58)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:178)
	at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:68)
	at spoon.support.QueueProcessingManager.process(QueueProcessingManager.java:118)
	at sorald.Repair.repairModelWithInitializedProcessor(Repair.java:174)
	at sorald.Repair.defaultRepair(Repair.java:117)
	at sorald.Repair.repair(Repair.java:101)
	at sorald.Repair.repair(Repair.java:90)
	at sorald.cli.Cli$RepairCommand.call(Cli.java:141)
	at sorald.cli.Cli$RepairCommand.call(Cli.java:50)
	at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
	at picocli.CommandLine.access$1200(CommandLine.java:145)
	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
	at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
	at picocli.CommandLine.execute(CommandLine.java:2058)
	at sorald.Main.main(Main.java:7)
Exception in thread "main" java.lang.IllegalStateException: CLI exited non-zero
	at sorald.Main.main(Main.java:12)
@slarse slarse added the bug Something isn't working label Dec 9, 2020
@slarse
Copy link
Collaborator

slarse commented Dec 9, 2020

Looks like a problem in the sniper printer. Gut feeling: this is gonna be hard.

@slarse slarse self-assigned this Dec 9, 2020
@slarse slarse added this to the Week 2 milestone Jan 5, 2021
@slarse
Copy link
Collaborator

slarse commented Jan 5, 2021

I've found the problem: the source position of import static org.junit.Assert.assertEquals; in the file ./src/test/java/org/junit/internal/runners/statements/FailOnTimeoutTest.java is absolutely bonkers. Start position is correct (315), but end position is in the middle of the class' body (3261). I'll have to fix this in Spoon.

@slarse
Copy link
Collaborator

slarse commented Jan 7, 2021

I believe that I have fixed this problem. Waiting for merge in Spoon and then I'll try it.

@slarse
Copy link
Collaborator

slarse commented Jan 12, 2021

The latest snapshot of Spoon works, the crash is gone! So we need to wait until Saturday for the next beta release, or use the snapshot version in the meantime.

@nharrand If you want to use the snapshot version to be able to run some trial experiments right away, just change the Spoon dependency in pom.xml like so:

         <dependency>
             <groupId>fr.inria.gforge.spoon</groupId>
             <artifactId>spoon-core</artifactId>
-            <version>8.4.0-beta-9</version>
+            <version>8.4.0-SNAPSHOT</version>
             <exclusions>
                 <exclusion>

@slarse
Copy link
Collaborator

slarse commented Jan 13, 2021

I'm closing this as I've verified that it's solved with the new version, and thus #324 takes over from here.

@slarse slarse closed this as completed Jan 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Development

No branches or pull requests

2 participants