1

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()));
    }
Saif
  • 2,530
  • 3
  • 27
  • 45

1 Answers1

0

In this example the library slf4j is not configured in the CombinedTypeSolver. So the class org.slf4j.LoggerFactory cannot be resolved.

jpl
  • 347
  • 3
  • 11