/** * Create a Value from a ValueDeclaration. */ public static Value from(ResolvedValueDeclaration decl) { ResolvedType type = decl.getType(); return new Value(type, decl.getName()); }
/** * Create a Value from a ValueDeclaration. */ public static Value from(ResolvedValueDeclaration decl) { ResolvedType type = decl.getType(); return new Value(type, decl.getName()); }
@Test public void solveSymbolReferringToDeclaredStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("j", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("long", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToInheritedStaticField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("m", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("char", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("i", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("int", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToDeclaredInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("i", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("int", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToDeclaredStaticField() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("j", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("long", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToInheritedInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("k", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("boolean", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToStaticField() throws ParseException, IOException { CompilationUnit cu = parseSample("CompilationUnitSymbols"); Context context = new CompilationUnitContext(cu, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("java.lang.System.out", new ReflectionTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("java.io.PrintStream", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@Test public void solveSymbolReferringToValue() throws ParseException { CompilationUnit cu = parseSample("AnEnum"); com.github.javaparser.ast.body.EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "MyEnum"); Context context = new EnumDeclarationContext(enumDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("E1", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("MyEnum", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void solveSymbolReferringToInterfaceInheritedInstanceField() throws ParseException { CompilationUnit cu = parseSample("ClassWithSymbols"); ClassOrInterfaceDeclaration classOrInterfaceDeclaration = Navigator.demandClass(cu, "A"); Context context = new ClassOrInterfaceDeclarationContext(classOrInterfaceDeclaration, typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = context.solveSymbol("o", new MemoryTypeSolver()); assertEquals(true, ref.isSolved()); assertEquals("int", ref.getCorrespondingDeclaration().getType().describe()); }
@Test public void switchOnEnum() throws ParseException { CompilationUnit cu = parseSample("SwitchOnEnum"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "SwitchOnEnum"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo"); SwitchStmt switchStmt = Navigator.findSwitch(method); Expression expression = switchStmt.getEntries().get(0).getLabel().get(); SymbolReference<? extends ResolvedValueDeclaration> ref = JavaParserFacade.get(new ReflectionTypeSolver()).solve(expression); assertTrue(ref.isSolved()); assertEquals("SwitchOnEnum.MyEnum", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@Test public void resolveLocalAndSeveralAnnidatedLevels() throws ParseException { CompilationUnit cu = parseSample("LocalVariableInParent"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "LocalVariableInParent"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo4"); MethodCallExpr call = Navigator.findMethodCall(method, "add"); TypeSolver typeSolver = new ReflectionTypeSolver(); SymbolReference<? extends ResolvedValueDeclaration> ref = JavaParserFacade.get(typeSolver).solve(call.getScope().get()); assertTrue(ref.isSolved()); assertEquals("java.util.List<Comment>", ref.getCorrespondingDeclaration().getType().describe()); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(call); assertEquals("add", methodUsage.getName()); }
@Test public void resolveMethodOnGenericClass() throws ParseException { CompilationUnit cu = parseSample("LocalVariableInParent"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "LocalVariableInParent"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo5"); MethodCallExpr call = Navigator.findMethodCall(method, "add"); TypeSolver typeSolver = new ReflectionTypeSolver(); SymbolReference<? extends ResolvedValueDeclaration> ref = JavaParserFacade.get(typeSolver).solve(call.getScope().get()); assertTrue(ref.isSolved()); assertEquals("java.util.List<Comment>", ref.getCorrespondingDeclaration().getType().describe()); MethodUsage methodUsage = JavaParserFacade.get(typeSolver).solveMethodAsUsage(call); assertEquals("add", methodUsage.getName()); }
@Test public void resolveLocalVariableInParentOfParent() throws ParseException { CompilationUnit cu = parseSample("QualifiedNameTest"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "QualifiedNameTest"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo1"); NameExpr nameExpr = Navigator.findNameExpression(method, "s"); SymbolReference<? extends ResolvedValueDeclaration> ref = JavaParserFacade.get(new ReflectionTypeSolver()).solve(nameExpr); assertTrue(ref.isSolved()); assertEquals("java.util.Scanner", ref.getCorrespondingDeclaration().getType().asReferenceType().getQualifiedName()); }
@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 resolveLocalVariableInSameParent() throws ParseException { CompilationUnit cu = parseSample("LocalVariableInParent"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "LocalVariableInParent"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo2"); 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 resolveLocalVariableInParentOfParent() throws ParseException { CompilationUnit cu = parseSample("LocalVariableInParent"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "LocalVariableInParent"); MethodDeclaration method = Navigator.demandMethod(referencesToField, "foo1"); 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 solveSymbolReferringToStaticallyImportedUsingAsteriskValue() 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("err", typeSolver); assertEquals(true, ref.isSolved()); assertEquals("java.io.PrintStream", 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()); }