@Override public void visit(AssignExpr n, Void arg) { out.println("AssignExpr: " + (extended ? n : n.getTarget() + " = " + n.getValue())); super.visit(n, arg); }
@Override public ResolvedType visit(AssignExpr node, Boolean solveLambdas) { return node.getTarget().accept(this, solveLambdas); }
@Override public ResolvedType visit(AssignExpr node, Boolean solveLambdas) { return node.getTarget().accept(this, solveLambdas); }
@Override public ResolvedType visit(AssignExpr node, Boolean solveLambdas) { return node.getTarget().accept(this, solveLambdas); }
private static boolean isTargetOfAnAssignment(@Nonnull Expression expression) { return AssignExpr.class.isInstance(expression.getParentNode()) && expression == AssignExpr.class.cast(expression.getParentNode()).getTarget(); }
@Override public boolean doIsEquals(AssignExpr first, AssignExpr second) { if(!isEqualsUseMerger(first.getTarget(),second.getTarget())) return false; if(!isEqualsUseMerger(first.getValue(),second.getValue())) return false; if(!first.getOperator().equals(second.getOperator())) return false; return true; } }
return NameRole.REFERENCE; if (whenParentIs(AssignExpr.class, name, (p, c) -> p.getTarget() == c || p.getValue() == c)) { return NameRole.REFERENCE;
@Test public void resolveDeclaredFieldReference() throws ParseException { CompilationUnit cu = parseSample("ReferencesToField"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "ReferencesToField"); MethodDeclaration method1 = Navigator.demandMethod(referencesToField, "method1"); ExpressionStmt stmt = (ExpressionStmt) method1.getBody().get().getStatements().get(0); AssignExpr assignExpr = (AssignExpr) stmt.getExpression(); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); SymbolReference symbolReference = symbolSolver.solveSymbol("i", assignExpr.getTarget()); assertEquals(true, symbolReference.isSolved()); assertEquals("i", symbolReference.getCorrespondingDeclaration().getName()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isField()); }
@Test public void resolveInheritedFieldReference() throws ParseException { CompilationUnit cu = parseSample("ReferencesToField"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration referencesToField = Navigator.demandClass(cu, "ReferencesToFieldExtendingClass"); MethodDeclaration method1 = Navigator.demandMethod(referencesToField, "method2"); ExpressionStmt stmt = (ExpressionStmt) method1.getBody().get().getStatements().get(0); AssignExpr assignExpr = (AssignExpr) stmt.getExpression(); SymbolSolver symbolSolver = new SymbolSolver(typeSolver); SymbolReference symbolReference = symbolSolver.solveSymbol("i", assignExpr.getTarget()); assertEquals(true, symbolReference.isSolved()); assertEquals("i", symbolReference.getCorrespondingDeclaration().getName()); assertEquals(true, symbolReference.getCorrespondingDeclaration().isField()); }
@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()); }