SONARJAVA-1150 - IllegalStateException when JavaAstScanner scans generic classes

34 views
Skip to first unread message

dfl...@objectif-informatique.fr

unread,
Jul 8, 2015, 9:56:30 AM7/8/15
to sona...@googlegroups.com
Hi,

I found another case for the issue SONARJAVA-1150 : Incorrect resolution of methods in generic classes
I have 2 classes :

public class ClassA {

    public <C extends Collection<T>, T> void genericMethod(C argument1, T argument2) {
    }

}

public class ClassB {

    private void method1() {
        List<String> param1 = new ArrayList<String>();
        String param2 = new String();
        new ClassA().genericMethod(param1, param2);
    }

}


When the JavaAstScanner scans the ClassB, an IllegalStateException is thrown.
In the ClassA, the declaration <C extends Collection<T>, T> generates the problem.
When I replace the declaration <C extends Collection<T>, T> with <T, C extends Collection<T>> it works fine



The stacktrace of the exception :
java.lang.IllegalStateException: Could not resolve type parameter: T in class ClassA
    at com.google.common.base.Preconditions.checkState(Preconditions.java:145) ~[guava-10.0.1.jar:na]
    at org.sonar.java.resolve.BytecodeVisitor$ReadType.visitTypeVariable(BytecodeVisitor.java:534) ~[java-squid-3.3.jar:na]
    at org.objectweb.asm.signature.SignatureReader.parseType(SignatureReader.java:169) ~[asm-debug-all-5.0.3.jar:5.0.3]
    at org.objectweb.asm.signature.SignatureReader.parseType(SignatureReader.java:219) ~[asm-debug-all-5.0.3.jar:5.0.3]
    at org.objectweb.asm.signature.SignatureReader.accept(SignatureReader.java:91) ~[asm-debug-all-5.0.3.jar:5.0.3]
    at org.sonar.java.resolve.BytecodeVisitor.visitMethod(BytecodeVisitor.java:215) ~[java-squid-3.3.jar:na]
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:911) ~[asm-debug-all-5.0.3.jar:5.0.3]
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:693) ~[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:103) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.JavaSymbol.complete(JavaSymbol.java:104) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.JavaType.getSymbol(JavaType.java:77) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:385) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.Resolve.findMethod(Resolve.java:377) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.resolveConstructorSymbol(TypeAndReferenceSolver.java:466) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.visitNewClass(TypeAndReferenceSolver.java:446) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.expression.NewClassTreeImpl.accept(NewClassTreeImpl.java:106) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.resolveAs(TypeAndReferenceSolver.java:280) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.resolveAs(TypeAndReferenceSolver.java:248) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.resolveAs(TypeAndReferenceSolver.java:241) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.resolveMethodSymbol(TypeAndReferenceSolver.java:222) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.visitMethodInvocation(TypeAndReferenceSolver.java:199) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.expression.MethodInvocationTreeImpl.accept(MethodInvocationTreeImpl.java:102) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:42) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitExpressionStatement(BaseTreeVisitor.java:101) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.visitExpressionStatement(TypeAndReferenceSolver.java:183) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.statement.ExpressionStatementTreeImpl.accept(ExpressionStatementTreeImpl.java:70) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:42) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:36) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitBlock(BaseTreeVisitor.java:85) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.statement.BlockTreeImpl.accept(BlockTreeImpl.java:91) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:42) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.visitMethod(TypeAndReferenceSolver.java:116) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.declaration.MethodTreeImpl.accept(MethodTreeImpl.java:193) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:42) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:36) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.TypeAndReferenceSolver.visitClass(TypeAndReferenceSolver.java:125) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.declaration.ClassTreeImpl.accept(ClassTreeImpl.java:189) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:42) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:36) ~[java-squid-3.3.jar:na]
    at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitCompilationUnit(BaseTreeVisitor.java:55) ~[java-squid-3.3.jar:na]
    at org.sonar.java.resolve.SemanticModel.createFor(SemanticModel.java:66) ~[java-squid-3.3.jar:na]
    at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:110) ~[java-squid-3.3.jar:na]
    at com.sonar.sslr.impl.ast.AstWalker.walkAndVisit(AstWalker.java:67) [sslr-core-1.20.jar:na]
    at org.sonar.java.ast.AstScanner.simpleScan(AstScanner.java:107) [java-squid-3.3.jar:na]
    at org.sonar.java.ast.AstScanner.scan(AstScanner.java:75) [java-squid-3.3.jar:na]
    at org.sonar.java.JavaAstScanner.scanSingleFile(JavaAstScanner.java:63) [java-squid-3.3.jar:na]
    at org.sonar.java.JavaAstScanner.scanSingleFile(JavaAstScanner.java:50) [java-squid-3.3.jar:na]



Regards,

Denis


Nicolas Peru

unread,
Jul 8, 2015, 10:04:12 AM7/8/15
to dfl...@objectif-informatique.fr, sona...@googlegroups.com
Hi, 

I don't think it is related to the issue you link but more to this one : http://jira.sonarsource.com/browse/SONARJAVA-985 which is already fixed in version 3.4 (which is about to be publicly available).

Cheers,

Nicolas PERU | SonarSource
Senior Developer
http://sonarsource.com


--
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/10e3539a-3d97-4681-a42a-1b079e6f9475%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

dfl...@objectif-informatique.fr

unread,
Jul 8, 2015, 11:54:10 AM7/8/15
to sona...@googlegroups.com, dfl...@objectif-informatique.fr
Hi,

I just tested with the version 3.4 and actually the problem is corrected.

thanks,

Denis
Reply all
Reply to author
Forward
0 new messages