Class not found warnings and errors when analysing bytecode

1,238 views
Skip to first unread message

ObjectMastery

unread,
Jan 9, 2017, 10:58:34 PM1/9/17
to SonarQube
Hi everyone,

I've been having a few warnings and errors spat out by the Sonar Scanner. For quick context, I have a Java/Scala project based on the Play Framework v2.5.3 that I am scanning with bytecode analysis.

I am getting an awful lot of "Class not found" warnings and the occasional error spat out by the scanner. Below are the four different warnings I see a lot of:
WARN: Class not found: scala.Predef$$less
WARN: Class not found: scala.Predef$$less$colon
WARN: Class not found: <package>.views.html.<viewname>_Scope0$<viewname>_Scope1
WARN: Class not found: play.api.mvc.RequestExtractors$
I'm seeing a lot of the first three kinds of warnings, but I don't think they're creating false negatives. From looking around on GitHub, Sonar's issue tracker and here, I gather that these warnings are okay as long as analysis doesn't break.
Some related discussions and issues:
Unfortunately, it does look like I am getting an error to do with the RequestExtractors. I'm seeing that after that particular warning comes up, I get an exception like this:
ERROR: Unable to create symbol table for : /path/to/project/app/controllers/Assets.java
java
.lang.IllegalStateException: Innerclass: RequestExtractors$ and classSymbol: RequestExtractors are not the same.
        at com
.google.common.base.Preconditions.checkState(Preconditions.java:174) ~[guava-19.0.jar:na]
        at org
.sonar.java.resolve.BytecodeVisitor.defineInnerClass(BytecodeVisitor.java:166) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.BytecodeVisitor.visitInnerClass(BytecodeVisitor.java:148) ~[java-frontend-4.0.jar:na]
        at org
.objectweb.asm.ClassReader.accept(ClassReader.java:679) ~[asm-debug-all-5.0.3.jar:5.0.3]
        at org
.objectweb.asm.ClassReader.accept(ClassReader.java:506) ~[asm-debug-all-5.0.3.jar:5.0.3]
        at org
.sonar.java.resolve.BytecodeCompleter.complete(BytecodeCompleter.java:100) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.JavaSymbol.complete(JavaSymbol.java:111) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.JavaType.getSymbol(JavaType.java:75) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:434) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:420) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:457) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:420) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:457) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:420) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:449) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:420) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:449) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.Resolve.findMethod(Resolve.java:416) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.TypeAndReferenceSolver.resolveMethodSymbol(TypeAndReferenceSolver.java:295) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.TypeAndReferenceSolver.visitMethodInvocation(TypeAndReferenceSolver.java:225) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.expression.MethodInvocationTreeImpl.accept(MethodInvocationTreeImpl.java:82) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.visitReturnStatement(BaseTreeVisitor.java:173) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.TypeAndReferenceSolver.visitReturnStatement(TypeAndReferenceSolver.java:501) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.statement.ReturnStatementTreeImpl.accept(ReturnStatementTreeImpl.java:69) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.visitBlock(BaseTreeVisitor.java:85) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.statement.BlockTreeImpl.accept(BlockTreeImpl.java:77) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.TypeAndReferenceSolver.visitMethod(TypeAndReferenceSolver.java:130) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.declaration.MethodTreeImpl.accept(MethodTreeImpl.java:218) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.TypeAndReferenceSolver.visitClass(TypeAndReferenceSolver.java:139) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.declaration.ClassTreeImpl.accept(ClassTreeImpl.java:198) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37) ~[java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.api.tree.BaseTreeVisitor.visitCompilationUnit(BaseTreeVisitor.java:55) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.resolve.SemanticModel.createFor(SemanticModel.java:63) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:107) ~[java-frontend-4.0.jar:na]
        at org
.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:84) [java-frontend-4.0.jar:na]
        at org
.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:67) [java-frontend-4.0.jar:na]
        at org
.sonar.java.JavaSquid.scanSources(JavaSquid.java:133) [java-frontend-4.0.jar:na]
        at org
.sonar.java.JavaSquid.scan(JavaSquid.java:126) [java-frontend-4.0.jar:na]
        at org
.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:93) [sonar-java-plugin-4.0.jar:na]
        at org
.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:78) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:184) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:241) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:236) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:226) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.task.ScanTask.execute(ScanTask.java:47) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:115) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:118) [sonar-scanner-engine-shaded-6.0.jar:na]
        at org
.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:62) [sonar-scanner-api-batch4845319377614354925.jar:na]
        at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92]
        at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92]
        at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_92]
        at java
.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_92]
        at org
.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) [sonar-scanner-cli-2.6.1.jar:na]
        at com
.sun.proxy.$Proxy0.execute(Unknown Source) [na:na]
        at org
.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:240) [sonar-scanner-cli-2.6.1.jar:na]
        at org
.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151) [sonar-scanner-cli-2.6.1.jar:na]
        at org
.sonarsource.scanner.cli.Main.runAnalysis(Main.java:110) [sonar-scanner-cli-2.6.1.jar:na]
        at org
.sonarsource.scanner.cli.Main.execute(Main.java:72) [sonar-scanner-cli-2.6.1.jar:na]
        at org
.sonarsource.scanner.cli.Main.main(Main.java:60) [sonar-scanner-cli-2.6.1.jar:na]

The exception doesn't stop the scanner from processing all files, but it does prevent the scanner from processing the file the exception occurred in. I tested by putting in a few lines of code into an affected file that I knew would be marked as issues and they were not marked as issues by the scanner.

I've managed to make an example SBT project that causes the SonarJava analysis to fail in the same way, here:
To end on a question, what's the next step in getting this fixed?

Thanks!

ObjectMastery

unread,
Jan 9, 2017, 11:06:59 PM1/9/17
to SonarQube
Forgot to mention, I'm using SonarQube v6.0 and SonarJava v4.3.0.7717

Nicolas Peru

unread,
Jan 10, 2017, 2:56:43 AM1/10/17
to ObjectMastery, SonarQube
Hi,

This is a known issue with scala generated bytecode where the analyzer do no handle that properly : A pull request was made for this one but it needs works : https://github.com/SonarSource/sonar-java/pull/582 

Would you be able to create a small sample project reproducing the issue so we can investigate it more properly ? 

Thanks.


Le mar. 10 janv. 2017 à 05:07, ObjectMastery <spiltc...@gmail.com> a écrit :
Forgot to mention, I'm using SonarQube v6.0 and SonarJava v4.3.0.7717

--
You received this message because you are subscribed to the Google Groups "SonarQube" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sonarqube+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sonarqube/f3f7f965-c933-4a98-ab63-259fe74eaadf%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
Nicolas PERU | SonarSource
Senior Developer
http://sonarsource.com

Nicolas Peru

unread,
Jan 10, 2017, 9:28:09 AM1/10/17
to ObjectMastery, SonarQube
Oups, did not see your reproducer. Sorry for that. I shall have a look. 

Cheers, 

Nicolas Peru

unread,
Jan 11, 2017, 11:00:26 AM1/11/17
to ObjectMastery, SonarQube
Hi, 
Thanks for the reproducer, helped a lot to pinpoint the issue and handle it in a general way.

Ticket created to handle this : https://jira.sonarsource.com/browse/SONARJAVA-2043 
Not related to scala directly but scala compiler reveals the problem. 

Cheers, 

ObjectMastery

unread,
Jan 11, 2017, 5:39:39 PM1/11/17
to SonarQube
Hi,

That's excellent news! I'm glad my reproduction of the issue helped out.

Thank you for looking into this.
Reply all
Reply to author
Forward
0 new messages