@Before public void setup() { typeResolver = new ReflectionTypeSolver(); javaParserFacade = JavaParserFacade.get(typeResolver); }
@Test public void findAllInheritedFieldsAndGenerics() throws ParseException { CompilationUnit cu = parseSample("AClassWithFieldsAndGenerics"); ClassOrInterfaceDeclaration classC = Navigator.demandClass(cu, "C"); ResolvedReferenceTypeDeclaration typeDeclaration = JavaParserFacade.get(new ReflectionTypeSolver()).getTypeDeclaration(classC); assertEquals(3, typeDeclaration.getAllFields().size()); assertEquals(ImmutableSet.of("a", "b", "c"), typeDeclaration.getAllFields().stream().map(ResolvedDeclaration::getName).collect(Collectors.toSet())); assertEquals("java.util.List<java.lang.String>", typeDeclaration.getField("b").getType().describe()); } }
private static TypeSolver typeSolver() { CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver(); combinedTypeSolver.add(new ReflectionTypeSolver()); combinedTypeSolver.add(new JavaParserTypeSolver(src)); combinedTypeSolver.add(new JavaParserTypeSolver(adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-generated-sources")))); return combinedTypeSolver; }
@Before public void setup() { File srcNewCode = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core")); CombinedTypeSolver combinedTypeSolverNewCode = new CombinedTypeSolver(); combinedTypeSolverNewCode.add(new ReflectionTypeSolver()); combinedTypeSolverNewCode.add(new JavaParserTypeSolver(srcNewCode)); combinedTypeSolverNewCode.add(new JavaParserTypeSolver(adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-generated-sources")))); typeSolverNewCode = combinedTypeSolverNewCode; symbolSolver = new SymbolSolver(typeSolverNewCode); }
@Test public void solveTypeRefToJavaLangObject() throws ParseException { CompilationUnit cu = parseSample("ClassWithTypes"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedTypeDeclaration> ref = context.solveType("java.lang.Object", new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); }
@Test public void conditionalExpressionExample() throws ParseException { CompilationUnit cu = parseSample("JreConditionalExpression"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "MyClass"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo1"); ReturnStmt returnStmt = Navigator.findReturnStmt(method); Expression expression = returnStmt.getExpression().get(); TypeSolver typeSolver = new ReflectionTypeSolver(); ResolvedType ref = JavaParserFacade.get(typeSolver).getType(expression); assertEquals("java.lang.String", ref.describe()); }
@Test public void lambdaBlockMultiLineReturn() throws ParseException { CompilationUnit cu = parseSample("LambdaMulti"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Agenda"); MethodDeclaration method = Navigator.demandMethod(clazz, "multiLineReturn"); ReturnStmt returnStmt = Navigator.findReturnStmt(method); Expression expression = returnStmt.getExpression().get(); JavaParserFacade javaParserFacade = JavaParserFacade.get(new ReflectionTypeSolver()); ResolvedType type = javaParserFacade.getType(expression); assertEquals("java.lang.String", type.describe()); }
@Test public void testGetQualifiedName() { TypeSolver typeResolver = new ReflectionTypeSolver(); ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver); assertEquals("java.util.ArrayList", arraylist.getQualifiedName()); ResolvedClassDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver); assertEquals("java.lang.String", string.getQualifiedName()); }
@Test public void resolveLambdaType() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter"); Expression lambdaExpr = callToFilter.getArguments().get(0); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); ResolvedType typeOfLambdaExpr = JavaParserFacade.get(typeSolver).getType(lambdaExpr); assertEquals("java.util.function.Predicate<? super com.github.javaparser.ast.body.TypeDeclaration>", typeOfLambdaExpr.describe()); }
@Test public void getTypeOfField() throws ParseException { CompilationUnit cu = parseSample("ReflectionFieldOfItself"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "MyClass"); VariableDeclarator field = Navigator.demandField(clazz, "PUBLIC"); TypeSolver typeSolver = new ReflectionTypeSolver(); ResolvedType ref = JavaParserFacade.get(typeSolver).getType(field); assertEquals("int", ref.describe()); }
@Test public void resolveReferenceToLambdaParamSimplified() throws ParseException, IOException { CompilationUnit cu = parseSample("NavigatorSimplified"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr call = Navigator.findMethodCall(method, "isEmpty"); TypeSolver typeSolver = new ReflectionTypeSolver(); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); MethodUsage ref = symbolSolver.solveMethod("isEmpty", Collections.emptyList(), call); assertEquals("isEmpty", ref.getName()); assertEquals("java.lang.String", ref.declaringType().getQualifiedName()); }
@Test public void solveMethodCallInFieldAccessContext() throws ParseException { CompilationUnit cu = parseSample("MethodCalls"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "MethodCalls"); MethodDeclaration method = Navigator.demandMethod(clazz, "bar2"); MethodCallExpr methodCallExpr = Navigator.findMethodCall(method, "getSelf"); TypeSolver typeSolver = new ReflectionTypeSolver(); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(methodCallExpr); assertEquals(methodUsage.getName(), "getSelf"); } }
@Test public void conditionalExpressionExampleFollowUp1() throws ParseException { CompilationUnit cu = parseSample("JreConditionalExpression"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "MyClass"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo1"); MethodCallExpr expression = Navigator.findMethodCall(method, "next"); TypeSolver typeSolver = new ReflectionTypeSolver(); ResolvedType ref = JavaParserFacade.get(typeSolver).getType(expression); assertEquals("java.lang.String", ref.describe()); }
@Test public void solveMethodInheritedCase() throws ParseException { CompilationUnit cu = parseSample("ClassWithMethods"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<ResolvedMethodDeclaration> ref = context.solveMethod("foo2", ImmutableList.of(), false, new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("Super", ref.getCorrespondingDeclaration().declaringType().getName()); assertEquals(0, ref.getCorrespondingDeclaration().getNumberOfParams()); }
@Test public void resolveUsageOfGenericFieldSimpleCase() throws ParseException { CompilationUnit cu = parseSample("Generics"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "SomeCollection"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo1"); ExpressionStmt stmt = (ExpressionStmt) method.getBody().get().getStatements().get(0); Expression expression = stmt.getExpression(); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(expression); assertEquals(false, type.isTypeVariable()); assertEquals("java.lang.String", type.describe()); }
@Test public void resolveReferenceToOverloadMethodWithNullParam() throws ParseException, IOException { CompilationUnit cu = parseSample("OverloadedMethods"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "OverloadedMethods"); MethodDeclaration method = Navigator.demandMethod(clazz, "m1"); MethodCallExpr call = Navigator.findMethodCall(method, "overloaded"); ReflectionTypeSolver typeSolver = new ReflectionTypeSolver(); MethodUsage ref = JavaParserFacade.get(typeSolver).solveMethodAsUsage(call); assertEquals("overloaded", ref.getName()); assertEquals(1, ref.getNoParams()); assertEquals("java.lang.String", ref.getParamTypes().get(0).describe()); }
@Test public void typeParamOnReturnTypeStep1() throws ParseException { CompilationUnit cu = parseSample("TypeParamOnReturnType"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "TypeParamOnReturnType"); MethodDeclaration method = Navigator.demandMethod(clazz, "nodeEquals"); ThisExpr thisExpr = Navigator.findNodeOfGivenClass(method, ThisExpr.class); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(thisExpr); assertEquals(false, type.isTypeVariable()); assertEquals("TypeParamOnReturnType", type.describe()); }
@Test public void thisInAnonymousClass() throws ParseException { CompilationUnit cu = parseSample("ThisInAnonymousClass"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Bar"); ThisExpr thisExpression = Navigator.findNodeOfGivenClass(clazz, ThisExpr.class); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(thisExpression); assertEquals(true, type.isReferenceType()); assertEquals(true, type.asReferenceType().getTypeDeclaration() instanceof JavaParserAnonymousClassDeclaration); } }
@Test public void resolveLocalVariableInParent() throws ParseException { CompilationUnit cu = parseSample("LocalVariableInParent"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "LocalVariableInParent"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo3"); NameExpr nameExpr = Navigator.findNameExpression(method, "s"); SymbolReference<? extends ResolvedValueDeclaration> ref = JavaParserFacade.get(new ReflectionTypeSolver()).solve(nameExpr); assertTrue(ref.isSolved()); assertEquals("java.lang.String", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@Test public void solveSymbolReferringToStaticallyImportedValue() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); CombinedTypeSolver typeSolver = new CombinedTypeSolver(); typeSolver.add(new ReflectionTypeSolver()); typeSolver.add(new JarTypeSolver(adaptPath("src/test/resources/junit-4.8.1.jar"))); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("out", typeSolver); assertEquals(true, ref.isSolved()); assertEquals("java.io.PrintStream", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }