I have a Maven project using lombok and other external dependencies. I would like to add it to the resolver so that I can work on any of the generated Java files. So far I have tried JavaParserTypeSolver and JarTypeSolver and even tried delomboking the entire codebase, however even with that the external dependencies are not getting resolved.
I feel it's a very common setup (Maven project + lombok + other depencencies), is there a way to easily set-up the resolver for this?
Exception in thread "main" UnsolvedSymbolException{context='org.slf4j.LoggerFactory.getLogger(MyClass.class)', name='org.slf4j.LoggerFactory', cause='UnsolvedSymbolException{context='null', name='LoggerFactory', cause='null'}'}
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.findTypeDeclarations(AbstractJavaParserContext.java:222)
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext.solveMethod(MethodCallExprContext.java:166)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java:317)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java:179)
at com.github.javaparser.symbolsolver.JavaSymbolSolver.resolveDeclaration(JavaSymbolSolver.java:161)
at com.github.javaparser.ast.expr.MethodCallExpr.resolve(MethodCallExpr.java:317)
at org.javaparser.examples.chapter2.MyMethodPrinter.lambda$main$0(MyMethodPrinter.java:38)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at org.javaparser.examples.chapter2.MyMethodPrinter.main(MyMethodPrinter.java:37)
Caused by: UnsolvedSymbolException{context='null', name='LoggerFactory', cause='null'}
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:279)
at com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.visit(TypeExtractor.java:71)
at com.github.javaparser.ast.expr.FieldAccessExpr.accept(FieldAccessExpr.java:90)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete(JavaParserFacade.java:547)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:394)
at com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(JavaParserFacade.java:376)
at com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.findTypeDeclarations(AbstractJavaParserContext.java:213)
public class MyMethodPrinter {
private static final String FILE_PATH = "/Users/john.doe/myproj1/src-delomboked/main/java/com/somepackage/MyClass.java";
public static void main(String[] args) throws Exception {
TypeSolver myTypeSolver = new CombinedTypeSolver(
new ReflectionTypeSolver(),
new JavaParserTypeSolver("/Users/john.doe/myproj1/target/generated-sources/delombok"),
new JarTypeSolver("/Users/john.doe/myproj1/target/myproj1-1.0.0.jar")
);
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(myTypeSolver);
StaticJavaParser
.getConfiguration()
.setSymbolResolver(symbolSolver);
CompilationUnit cu = StaticJavaParser.parse(new File(FILE_PATH));
cu.findAll(MethodCallExpr.class).forEach(mce ->
System.out.println(mce.resolve().getQualifiedSignature()));
}