rpau / javalang-compiler

Java compiler elements (symbol and type tables) to perform code semantic analysis
GNU Lesser General Public License v3.0
10 stars 4 forks source link

NPE #12

Closed rpau closed 8 years ago

rpau commented 8 years ago
  1. NPE

ERROR [main] - TRANSFORMATION CHAIN (default) FAILS An exeception has been produced during the null transformation - org.walkmod.util.location.LocationImpl@57c6574d at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.walkmod.walkers.AbstractWalker.walk(AbstractWalker.java:250) at org.walkmod.walkers.AbstractWalker.execute(AbstractWalker.java:265) at org.walkmod.javalang.walkers.DefaultJavaWalker.execute(DefaultJavaWalker.java:158) at org.walkmod.impl.DefaultChainWalkerInvocation.invoke(DefaultChainWalkerInvocation.java:41) at org.walkmod.impl.DefaultChainInvocation.invoke(DefaultChainInvocation.java:38) at org.walkmod.impl.DefaultChainAdapter.execute(DefaultChainAdapter.java:165) at org.walkmod.WalkModFacade.executeAllChains(WalkModFacade.java:911) at org.walkmod.WalkModFacade.apply(WalkModFacade.java:376) at org.walkmod.commands.ApplyCommand.execute(ApplyCommand.java:40) at org.walkmod.WalkModDispatcher.execute(WalkModDispatcher.java:171) at org.walkmod.WalkModDispatcher.main(WalkModDispatcher.java:196) Caused by: java.lang.reflect.InvocationTargetException ... 14 more Caused by: Error processing the analysis of [.../OSE.java] - org.walkmod.util.location.LocationImpl@45f094b3 at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:344) at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:283) at org.walkmod.javalang.compiler.types.ScopeLoader.process(ScopeLoader.java:99) at org.walkmod.javalang.compiler.types.ScopeLoader.visit(ScopeLoader.java:116) at org.walkmod.javalang.compiler.types.ScopeLoader.visit(ScopeLoader.java:43) at org.walkmod.javalang.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:128) at org.walkmod.javalang.compiler.symbols.SymbolVisitorAdapter.visit(SymbolVisitorAdapter.java:169) at org.walkmod.javalang.walkers.DefaultJavaWalker.visit(DefaultJavaWalker.java:196) at org.walkmod.javalang.walkers.DefaultJavaWalker.accept(DefaultJavaWalker.java:84) ... 14 more Caused by: org.walkmod.javalang.exceptions.SymbolTableException: java.lang.RuntimeException: Error loading methods in a given scope ... 23 more Caused by: java.lang.RuntimeException: Error loading methods in a given scope at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.loadMethods(LoadMethodDeclarationsAction.java:254) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.visit(LoadMethodDeclarationsAction.java:227) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.visit(LoadMethodDeclarationsAction.java:192) at org.walkmod.javalang.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:134) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.doPush(LoadMethodDeclarationsAction.java:187) at org.walkmod.javalang.compiler.symbols.SymbolAction.execute(SymbolAction.java:25) at org.walkmod.javalang.compiler.symbols.Symbol.invokeActions(Symbol.java:144) at org.walkmod.javalang.compiler.symbols.SymbolTable.invokeActions(SymbolTable.java:201) at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:342) ... 22 more Caused by: org.walkmod.javalang.exceptions.NoSuchExpressionTypeException: java.lang.NullPointerException at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:1131) at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:114) at org.walkmod.javalang.ast.body.MethodDeclaration.accept(MethodDeclaration.java:206) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.pushMethod(LoadMethodDeclarationsAction.java:126) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.access$100(LoadMethodDeclarationsAction.java:59) at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.loadMethods(LoadMethodDeclarationsAction.java:247) ... 30 more Caused by: java.lang.NullPointerException at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:1128) ... 35 more

rpau commented 8 years ago

It is impossible to discover the error without knowing the specific method signature

cal101 commented 8 years ago

Will try to repeat. Guess it was one without file name.

cal101 commented 8 years ago

Oh, contains file name i see. Any chance to provide location info? Big file, partially generated.

cal101 commented 8 years ago

164dd983b95fa58b17eb0caefa145361f02cc2c0. I see.

cal101 commented 8 years ago

It's tricky and I couldn't extract a test case.

Using https://github.com/cal101/javalang-compiler/commit/ae21e10aa51b72cc6c4361b069aa68fcb3a0e8b8

the symbol data is wrong on first call and correct later. Order issue?

transformParams: symbol data for ObjectRelationACLogic.UOAC ac is ObjectRelationACLogic.UOAC, xxx.ObjectRelationACLogic
Caused by: org.walkmod.javalang.exceptions.NoSuchExpressionTypeException: Error locating method user with type args [xxx.ObjectRelationACLogic] and type params {} for parameters [ObjectRelationACLogic.UOAC ac] in current class
transformParams: symbol data for ObjectRelationACLogic.UOAC ac is ObjectRelationACLogic.UOAC, xxx.ObjectRelationACLogic$UOAC
transformParams: symbol data for ObjectRelationACLogic.UOAC ac is ObjectRelationACLogic.UOAC, xxx.ObjecttRelationACLogic$UOAC

UOAC is an inner enum in the interface ObjecttRelationACLogic

rpau commented 8 years ago

Sorry Cal, I am a little lost :-S

From your logs: The first line comes from resolving the arguments symbol data, and then when it tries to resolve the method, the system can't found it. The other lines I guess that are other method calls.

So, probably it is something related with resolution of some arguments that belong to a different Parameterizable Class.

You can debug the type checking on parameters in CompatibleArgsPredicate.java The behavior is as follows: first candidate methods are sorted from the most specific arguments to the most generic ones, and afterwards a set of filters are applied (name, modifiers..). One of these filters is CompatibleArgsPredicate.

cal101 commented 8 years ago

This was a tough one. From Predicate over Symbol resolver etc. to the SymbolTable. The symbol table content is wrong for the inner enum:

When compiling

==> src/main/java/de/walkmod/staticimport/Importer.java <==
package de.walkmod.staticimport;

import static de.walkmod.staticimport.pkg.SomeInterface.Inner1;

import de.walkmod.staticimport.pkg.SomeInterface;

public class Importer {
    public static String foo(SomeInterface.Inner1 v) {
        return v.toString();
    }
    public static String bar(Inner1 v) {
        return v.toString();
    }
}

==> src/main/java/de/walkmod/staticimport/pkg/SomeInterface.java <==
package de.walkmod.staticimport.pkg;

public interface SomeInterface {
  static enum Inner1 {
    A,B;
  }
}

I get

ERROR [main] - Error processing the analysis of [.../src/main/java/de/walkmod/staticimport/Importer.java]
Error processing the analysis of [.../src/main/java/de/walkmod/staticimport/Importer.java] - [349:-1]
        at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:349)
        at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:283)
        at org.walkmod.javalang.compiler.types.ScopeLoader.process(ScopeLoader.java:99)
        at org.walkmod.javalang.compiler.types.ScopeLoader.visit(ScopeLoader.java:116)
        at org.walkmod.javalang.compiler.types.ScopeLoader.visit(ScopeLoader.java:43)
        at org.walkmod.javalang.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:130)
        at org.walkmod.javalang.compiler.symbols.SymbolVisitorAdapter.visit(SymbolVisitorAdapter.java:170)
        at org.walkmod.javalang.walkers.DefaultJavaWalker.visit(DefaultJavaWalker.java:198)
        at org.walkmod.javalang.walkers.DefaultJavaWalker.accept(DefaultJavaWalker.java:86)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.walkmod.walkers.AbstractWalker.walk(AbstractWalker.java:261)
        at org.walkmod.walkers.AbstractWalker.execute(AbstractWalker.java:276)
        at org.walkmod.javalang.walkers.DefaultJavaWalker.execute(DefaultJavaWalker.java:160)
        at org.walkmod.impl.DefaultChainWalkerInvocation.invoke(DefaultChainWalkerInvocation.java:41)
        at org.walkmod.impl.DefaultChainInvocation.invoke(DefaultChainInvocation.java:38)
        at org.walkmod.impl.DefaultChainAdapter.execute(DefaultChainAdapter.java:165)
        at org.walkmod.WalkModFacade.executeAllChains(WalkModFacade.java:911)
        at org.walkmod.WalkModFacade.apply(WalkModFacade.java:376)
        at org.walkmod.commands.ApplyCommand.execute(ApplyCommand.java:40)
        at org.walkmod.WalkModDispatcher.execute(WalkModDispatcher.java:171)
        at org.walkmod.WalkModDispatcher.main(WalkModDispatcher.java:196)
Caused by: org.walkmod.javalang.exceptions.SymbolTableException: java.lang.RuntimeException: Error loading methods in a given scope
        ... 24 more
Caused by: java.lang.RuntimeException: Error loading methods in a given scope
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.loadMethods(LoadMethodDeclarationsAction.java:254)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.visit(LoadMethodDeclarationsAction.java:227)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.visit(LoadMethodDeclarationsAction.java:192)
        at org.walkmod.javalang.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:136)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.doPush(LoadMethodDeclarationsAction.java:187)
        at org.walkmod.javalang.compiler.symbols.SymbolAction.execute(SymbolAction.java:25)
        at org.walkmod.javalang.compiler.symbols.Symbol.invokeActions(Symbol.java:144)
        at org.walkmod.javalang.compiler.symbols.SymbolTable.invokeActions(SymbolTable.java:201)
        at org.walkmod.javalang.compiler.symbols.SymbolTable.pushSymbol(SymbolTable.java:347)
        ... 23 more
Caused by: org.walkmod.javalang.exceptions.NoSuchExpressionTypeException: Error resolving the signature of the method foo at [8, 5]
        at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:1156)
        at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:115)
        at org.walkmod.javalang.ast.body.MethodDeclaration.accept(MethodDeclaration.java:207)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.pushMethod(LoadMethodDeclarationsAction.java:126)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction.access$100(LoadMethodDeclarationsAction.java:59)
        at org.walkmod.javalang.compiler.actions.LoadMethodDeclarationsAction$MethodsPopulator.loadMethods(LoadMethodDeclarationsAction.java:247)
        ... 31 more
Caused by: org.walkmod.javalang.exceptions.NoSuchExpressionTypeException: Error locating method foo with type args [de.walkmod.staticimport.pkg.SomeInterface] and type params {} for parameters [SomeInterface.Inner1 v] in current class
        at org.walkmod.javalang.compiler.types.TypeVisitorAdapter.visit(TypeVisitorAdapter.java:1146)
        ... 36 more