protected final Optional<Value> solveWithAsValue(SymbolDeclarator symbolDeclarator, String name, TypeSolver typeSolver) { for (ResolvedValueDeclaration decl : symbolDeclarator.getSymbolDeclarations()) { if (decl.getName().equals(name)) { throw new UnsupportedOperationException(); } } return Optional.empty(); }
@Test public void fieldAccessIssue() throws ParseException, FileNotFoundException { String pathToSourceFile = adaptPath("src/test/resources/issue300/Issue300.java"); CompilationUnit cu = JavaParser.parse(new File(pathToSourceFile)); final FieldAccessExpr fieldAccess = Navigator.findNodeOfGivenClass(cu, FieldAccessExpr.class); assertNotNull(fieldAccess); TypeSolver typeSolver = new CombinedTypeSolver( new ReflectionTypeSolver(), new JavaParserTypeSolver(adaptPath(new File("src/test/resources/issue300")))); final JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); final SymbolReference<? extends ResolvedValueDeclaration> ref = javaParserFacade.solve(fieldAccess); assertEquals(ResolvedPrimitiveType.INT, ref.getCorrespondingDeclaration().getType().asPrimitive()); } }
@Test public void resolveReferenceToFieldInheritedByInterface() throws FileNotFoundException { String code = "package foo.bar;\n"+ "interface A {\n" + " int a = 0;\n" + " }\n" + " \n" + " class B implements A {\n" + " int getA() {\n" + " return a;\n" + " }\n" + " }"; CompilationUnit cu = JavaParser.parse(code); NameExpr refToA = Navigator.findNameExpression(Navigator.demandClass(cu, "B"), "a"); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = javaParserFacade.solve(refToA); assertEquals(true, symbolReference.isSolved()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isField()); assertEquals("a", symbolReference.getCorrespondingDeclaration().getName()); }
@Test public void solvingReferenceToCatchClauseParam() { String code = "public class Bla {\n" + " public void main()\n" + " {\n" + " try\n" + " {\n" + " int i = 0;\n" + " }\n" + " catch (UnsupportedOperationException e)\n" + " {\n" + " String s;\n" + " e.getMessage();\n" + " }\n" + " }\n" + "}"; MethodCallExpr methodCallExpr = Navigator.findNodeOfGivenClass(JavaParser.parse(code), MethodCallExpr.class); NameExpr nameE = (NameExpr)methodCallExpr.getScope().get(); SymbolReference<? extends ResolvedValueDeclaration> symbolReference = JavaParserFacade.get(new ReflectionTypeSolver()).solve(nameE); assertEquals(true, symbolReference.isSolved()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isParameter()); assertEquals("e", symbolReference.getCorrespondingDeclaration().asParameter().getName()); assertEquals("java.lang.UnsupportedOperationException", symbolReference.getCorrespondingDeclaration().asParameter().getType().asReferenceType().getQualifiedName()); }
private void assertCanSolveSymbol(String symbolName, JavassistClassDeclaration classDeclaration) { SymbolReference<? extends ResolvedValueDeclaration> solvedSymbol = symbolSolver.solveSymbolInType(classDeclaration, symbolName); assertTrue(solvedSymbol.isSolved()); assertEquals(symbolName, solvedSymbol.getCorrespondingDeclaration().asField().getName()); } }
@Test public void testSolveSymbolToDeclaredField() { JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); SymbolReference<? extends ResolvedValueDeclaration> res = symbolSolver.solveSymbolInType(constructorDeclaration, "name"); assertEquals(true, res.isSolved()); assertEquals(true, res.getCorrespondingDeclaration().isField()); }
@Test public void nodesTypeIsCorrect() throws IOException, ParseException { CompilationUnit cu = parse("com/github/javaparser/utils/PositionUtils"); NameExpr nodes = Navigator.findAllNodesOfGivenClass(cu, NameExpr.class).stream().filter(it -> it.getName() != null && it.getName().getId().equals("nodes")).findFirst().get(); ResolvedType type = JavaParserFacade.get(TYPESOLVER).solve(nodes).getCorrespondingDeclaration().getType(); assertEquals("java.util.List<T>", type.describe()); assertEquals(1, type.asReferenceType().typeParametersValues().size()); assertEquals(true, type.asReferenceType().typeParametersValues().get(0).isTypeVariable()); assertEquals("T", type.asReferenceType().typeParametersValues().get(0).asTypeParameter().getName()); assertEquals("com.github.javaparser.utils.PositionUtils.sortByBeginPosition(java.util.List<T>).T", type.asReferenceType().typeParametersValues().get(0).asTypeParameter().getQualifiedName()); assertEquals(1, type.asReferenceType().typeParametersValues().get(0).asTypeParameter().getBounds().size()); ResolvedTypeParameterDeclaration.Bound bound = type.asReferenceType().typeParametersValues().get(0).asTypeParameter().getBounds().get(0); assertEquals(true, bound.isExtends()); assertEquals("com.github.javaparser.ast.Node", bound.getType().describe()); }
private void assertCanSolveSymbol(String symbolName, JavassistInterfaceDeclaration interfaceDeclaration) { SymbolReference<? extends ResolvedValueDeclaration> solvedSymbol = symbolSolver.solveSymbolInType(interfaceDeclaration, symbolName); assertTrue(solvedSymbol.isSolved()); assertEquals(symbolName, solvedSymbol.getCorrespondingDeclaration().asField().getName()); }
@Test public void testSolveSymbolToInheritedPublicField() { JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); SymbolReference<? extends ResolvedValueDeclaration> res = symbolSolver.solveSymbolInType(constructorDeclaration, "NODE_BY_BEGIN_POSITION"); assertEquals(true, res.isSolved()); assertEquals(true, res.getCorrespondingDeclaration().isField()); }
protected final Optional<Value> solveWithAsValue(SymbolDeclarator symbolDeclarator, String name, TypeSolver typeSolver) { for (ResolvedValueDeclaration decl : symbolDeclarator.getSymbolDeclarations()) { if (decl.getName().equals(name)) { throw new UnsupportedOperationException(); } } return Optional.empty(); }
@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()); }
private void assertCanSolveSymbol(String symbolName, JavassistEnumDeclaration enumDeclaration) { SymbolReference<? extends ResolvedValueDeclaration> solvedSymbol = symbolSolver.solveSymbolInType(enumDeclaration, symbolName); assertTrue(solvedSymbol.isSolved()); assertEquals(symbolName, solvedSymbol.getCorrespondingDeclaration().asField().getName()); } }
@Test public void accessClassFieldThroughThisWithCompetingSymbolInParentContext() throws ParseException { CompilationUnit cu = parseSample("AccessClassMemberThroughThis"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "AccessClassMemberThroughThis"); MethodDeclaration method = Navigator.demandMethod(clazz, "setLabel"); ExpressionStmt expressionStmt = (ExpressionStmt) method.getBody().get().getStatements().get(0); AssignExpr assignExpr = (AssignExpr) expressionStmt.getExpression(); FieldAccessExpr fieldAccessExpr = (FieldAccessExpr) assignExpr.getTarget(); File src = adaptPath(new File("src/test/resources")); CombinedTypeSolver typeSolver = new CombinedTypeSolver(new JavaParserTypeSolver(src), new ReflectionTypeSolver()); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); SymbolReference<? extends ResolvedValueDeclaration> ref = symbolSolver.solveSymbol(fieldAccessExpr.getField().getId(), fieldAccessExpr); assertTrue(ref.isSolved()); assertTrue(ref.getCorrespondingDeclaration().isField()); }
protected Optional<Value> solveWithAsValue(SymbolDeclarator symbolDeclarator, String name) { return symbolDeclarator.getSymbolDeclarations().stream() .filter(d -> d.getName().equals(name)) .map(Value::from) .findFirst(); }
@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()); }
protected final Optional<Value> solveWithAsValue(SymbolDeclarator symbolDeclarator, String name) { for (ResolvedValueDeclaration decl : symbolDeclarator.getSymbolDeclarations()) { if (decl.getName().equals(name)) { throw new UnsupportedOperationException(); } } return Optional.empty(); }
@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()); }
protected Optional<Value> solveWithAsValue(SymbolDeclarator symbolDeclarator, String name, TypeSolver typeSolver) { return symbolDeclarator.getSymbolDeclarations().stream() .filter(d -> d.getName().equals(name)) .map(d -> Value.from(d)) .findFirst(); }