WALA icon indicating copy to clipboard operation
WALA copied to clipboard

com.ibm.wala.util.debug.UnimplementedError: Unhandled JDT node type org.eclipse.jdt.core.dom.ExpressionMethodReference

Open khatchad opened this issue 8 years ago • 2 comments

Looks like some Java 8 cases are missing in the JDT Java to CAst translator. I am receiving the following exception throw. I assume that the cause is input to the effect of using a method reference:

com.ibm.wala.util.debug.UnimplementedError: Unhandled JDT node type org.eclipse.jdt.core.dom.ExpressionMethodReference
	at com.ibm.wala.util.debug.Assertions.UNREACHABLE(Assertions.java:55)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNode(JDTJava2CAstTranslator.java:2951)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.populateArguments(JDTJava2CAstTranslator.java:1615)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.createMethodInvocation(JDTJava2CAstTranslator.java:1571)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1490)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNode(JDTJava2CAstTranslator.java:2902)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.populateArguments(JDTJava2CAstTranslator.java:1615)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.createMethodInvocation(JDTJava2CAstTranslator.java:1571)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1522)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNode(JDTJava2CAstTranslator.java:2902)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1499)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNode(JDTJava2CAstTranslator.java:2902)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1308)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1322)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNodeOrNodes(JDTJava2CAstTranslator.java:2958)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.createBlock(JDTJava2CAstTranslator.java:1275)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:1280)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitNode(JDTJava2CAstTranslator.java:2862)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:806)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.createClassDeclaration(JDTJava2CAstTranslator.java:485)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visitTypeDecl(JDTJava2CAstTranslator.java:408)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.visit(JDTJava2CAstTranslator.java:2829)
	at com.ibm.wala.cast.java.translator.jdt.JDTJava2CAstTranslator.translateToCAst(JDTJava2CAstTranslator.java:261)
	at com.ibm.wala.cast.java.translator.jdt.JDTSourceModuleTranslator$JdtAstToIR.acceptAST(JDTSourceModuleTranslator.java:92)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:907)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:588)
	at org.eclipse.jdt.core.dom.ASTParser.createASTs(ASTParser.java:899)
	at com.ibm.wala.cast.java.translator.jdt.JDTSourceModuleTranslator.loadAllSources(JDTSourceModuleTranslator.java:182)
	at com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl.loadAllSources(JavaSourceLoaderImpl.java:506)
	at com.ibm.wala.classLoader.ClassLoaderImpl.init(ClassLoaderImpl.java:521)
	at com.ibm.wala.cast.java.loader.JavaSourceLoaderImpl.init(JavaSourceLoaderImpl.java:517)
	at com.ibm.wala.cast.java.translator.jdt.JDTClassLoaderFactory.makeNewClassLoader(JDTClassLoaderFactory.java:70)
	at com.ibm.wala.classLoader.ClassLoaderFactoryImpl.getLoader(ClassLoaderFactoryImpl.java:69)
	at com.ibm.wala.ipa.cha.ClassHierarchy.<init>(ClassHierarchy.java:231)
	at com.ibm.wala.ipa.cha.ClassHierarchy.<init>(ClassHierarchy.java:175)
	at com.ibm.wala.ipa.cha.ClassHierarchyFactory.make(ClassHierarchyFactory.java:54)
	at com.ibm.wala.client.AbstractAnalysisEngine.buildClassHierarchy(AbstractAnalysisEngine.java:186)

https://github.com/wala/WALA/blob/5b6e6aefa069f341cb5b612f245b01953c519d61/com.ibm.wala.cast.java.ecj/src/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java#L2933

khatchad avatar Aug 28 '17 20:08 khatchad

Indeed such cases are missing. The JDT front end was created back in the time of Java 5, and has not been extended significantly since.

juliandolby avatar Aug 28 '17 22:08 juliandolby

I thought that perhaps this case could translate to a method invocation but I wasn't quite sure since its execution is deferred.

khatchad avatar Aug 28 '17 23:08 khatchad