Hi Guys my aim is to analyse an code the code might have a lot of methods and there might be more methods inside them and so on. I am trying to write a code which will give me a kind of heirarchy for the source class. I have used java parser to solve this requirement. But in the below code which i have come up with i keep getting Unresolved exception. This issue is only caused if the class contains an method which is taken from an user defined class but if i am using this on a code which only has java core methods i am not faced with errors.
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(new ReflectionTypeSolver(false));
StaticJavaParser.getConfiguration().setSymbolResolver(symbolSolver);
CompilationUnit cu = StaticJavaParser.parse(Files.newInputStream(Paths.get(FILE_PATH)));
List<MethodDeclaration> methods = cu.findAll(MethodDeclaration.class);
for(MethodDeclaration md : methods) {
System.out.println("Methods: " + md.getNameAsString());
List<MethodCallExpr> me = md.findAll(MethodCallExpr.class);
for(MethodCallExpr expr : me) {
String fullyQualifiedName = "";
ResolvedMethodDeclaration resolvedMethod = expr.resolve();
ResolvedTypeDeclaration declaringType = resolvedMethod.declaringType();
String resolvedName = declaringType.getQualifiedName();
if(expr.getScope().isPresent()) {
fullyQualifiedName = expr.getScope().get().toString() + "." + expr.getNameAsString() + " : " + resolvedName;
}
else {
fullyQualifiedName = expr.getNameAsString();
}
System.out.println(" |SubMethodNames: " + fullyQualifiedName);
}
}
}
and below is the error:
Methods: main
Exception in thread "main" UnsolvedSymbolException{context='inventoryService.checkStock()', name='inventoryService', cause='UnsolvedSymbolException{context='null', name='InventoryService', cause='null'}'}
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.findTypeDeclarations(AbstractJavaParserContext.java:195)
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveMethod(MethodCallExprContext.java:150)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java:273)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java:134)
at com.github.javaparser.symbolsolver.JavaSymbolSolver.resolveDeclaration(JavaSymbolSolver.java:172)
at com.github.javaparser.ast.expr.MethodCallExpr.resolve(MethodCallExpr.java:319)
at JavaParser.Parser.App.main(App.java:37)
Caused by: UnsolvedSymbolException{context='null', name='InventoryService', cause='null'}
at com.github.javaparser.ast.type.ClassOrInterfaceType.convertToUsage(ClassOrInterfaceType.java:347)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(JavaParserFacade.java:599)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert(JavaParserFacade.java:631)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert(JavaParserFacade.java:627)
at com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserVariableDeclaration.getType(JavaParserVariableDeclaration.java:59)
at com.github.javaparser.resolution.model.Value.from(Value.java:45)
at com.github.javaparser.resolution.Context.solveSymbolAsValueInParentContext(Context.java:199)
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveSymbolAsValue(MethodCallExprContext.java:145)
at com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue(SymbolSolver.java:76)
at com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue(SymbolSolver.java:82)
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:334)
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:64)
at com.github.javaparser.ast.expr.NameExpr.accept(NameExpr.java:81)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete(JavaParserFacade.java:493)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:364)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:331)
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.findTypeDeclarations(AbstractJavaParserContext.java:186)
... 6 more
any support is appreciated thank you!
Aimed to get the method heirarchy but facing error.
Santhosh is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.