1fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettipackage com.github.javaparser.symbolsolver;
2fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
3fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.JavaParser;
4fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.ast.CompilationUnit;
5fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.ast.body.MethodDeclaration;
6fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.ast.expr.MethodCallExpr;
73f34115468f45e51a556908bc624c3f0d02b2220Federico Tomassettiimport com.github.javaparser.resolution.types.ResolvedReferenceType;
8fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
9fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration;
10fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
11fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
12fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver;
13fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
14fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport org.junit.Before;
15fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport org.junit.Test;
16fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
17fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport java.io.File;
18fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport java.io.FileNotFoundException;
19fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport java.io.IOException;
20fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
21fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettiimport static org.junit.Assert.assertEquals;
22fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
23fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassettipublic class Issue113 extends AbstractTest {
24fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
25fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    private TypeSolver typeSolver;
26fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
27fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    @Before
28fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    public void setup() throws IOException {
29fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JavaParserTypeSolver(adaptPath(new File("src/test/resources/issue113"))));
30fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    }
31fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
32fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    @Test
33fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    public void issue113providedCodeDoesNotCrash() throws FileNotFoundException {
34fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        String pathToSourceFile = adaptPath("src/test/resources/issue113/com/foo/Widget.java");
35fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        CompilationUnit cu = JavaParser.parse(new File(pathToSourceFile));
36fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
37fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        JavaParserFacade parserFacade = JavaParserFacade.get(typeSolver);
38b54617e765d73b3ce0d187cf12ad8da382bce439Danny van Bruggen        MethodDeclaration methodDeclaration = cu.findAll(MethodDeclaration.class).stream()
39fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti                .filter(node -> node.getName().getIdentifier().equals("doSomething")).findAny().orElse(null);
40b54617e765d73b3ce0d187cf12ad8da382bce439Danny van Bruggen        methodDeclaration.findAll(MethodCallExpr.class).forEach(parserFacade::solve);
41fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    }
42fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
43fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    @Test
44fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    public void issue113superClassIsResolvedCorrectly() throws FileNotFoundException {
45fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        String pathToSourceFile = adaptPath("src/test/resources/issue113/com/foo/Widget.java");
46fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        CompilationUnit cu = JavaParser.parse(new File(pathToSourceFile));
47fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
48fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        JavaParserClassDeclaration jssExtendedWidget = new JavaParserClassDeclaration(cu.getClassByName("Widget").get(), typeSolver);
493f34115468f45e51a556908bc624c3f0d02b2220Federico Tomassetti        ResolvedReferenceType superClass = jssExtendedWidget.getSuperClass();
50fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti        assertEquals("com.foo.base.Widget", superClass.getQualifiedName());
51fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti    }
52fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti
53fcaa4fbb2051625341e34f8e759a160a58a577afFederico Tomassetti}
54