@Override public ForeachStmt doMerge(ForeachStmt first, ForeachStmt second) { ForeachStmt fs = new ForeachStmt(); fs.setBody(mergeSingle(first.getBody(),second.getBody())); fs.setIterable(mergeSingle(first.getIterable(),second.getIterable())); fs.setVariable(mergeSingle(first.getVariable(),second.getVariable())); return fs; }
@Override public boolean doIsEquals(ForeachStmt first, ForeachStmt second) { if (!isEqualsUseMerger(first.getVariable(), second.getVariable())) return false; if (!isEqualsUseMerger(first.getIterable(), second.getIterable())) return false; if (!isEqualsUseMerger(first.getBody(), second.getBody())) return false; return true; } }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { if (wrappedNode.getVariable().getVariables().size() != 1) { throw new IllegalStateException(); } VariableDeclarator variableDeclarator = wrappedNode.getVariable().getVariables().get(0); if (variableDeclarator.getName().getId().equals(name)) { return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(variableDeclarator, typeSolver)); } else { if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlock(name, typeSolver, wrappedNode); } else { return getParent().solveSymbol(name, typeSolver); } } }
@Override public void visit(ForeachStmt n, A arg) { HashSet<String> blockVariables = newHashSet(); this.localVariables.addLast(blockVariables); try { for (VariableDeclarator variableDeclarator : emptyIfNull(n.getVariable().getVars())) { blockVariables.add(variableDeclarator.getId().getName()); } n.getIterable().accept(this, arg); n.getBody().accept(this, arg); } finally { this.localVariables.removeLast(); } }
@Override public SymbolReference<? extends ResolvedValueDeclaration> solveSymbol(String name, TypeSolver typeSolver) { if (wrappedNode.getVariable().getVariables().size() != 1) { throw new IllegalStateException(); } VariableDeclarator variableDeclarator = wrappedNode.getVariable().getVariables().get(0); if (variableDeclarator.getName().getId().equals(name)) { return SymbolReference.solved(JavaParserSymbolDeclaration.localVar(variableDeclarator, typeSolver)); } else { if (getParentNode(wrappedNode) instanceof BlockStmt) { return StatementContext.solveInBlock(name, typeSolver, wrappedNode); } else { return getParent().solveSymbol(name, typeSolver); } } }
public static SymbolDeclarator getSymbolDeclarator(Node node, TypeSolver typeSolver) { if (node instanceof FieldDeclaration) { return new FieldSymbolDeclarator((FieldDeclaration) node, typeSolver); } else if (node instanceof Parameter) { return new ParameterSymbolDeclarator((Parameter) node, typeSolver); } else if (node instanceof ExpressionStmt) { ExpressionStmt expressionStmt = (ExpressionStmt) node; if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) { return new VariableSymbolDeclarator((VariableDeclarationExpr) (expressionStmt.getExpression()), typeSolver); } else { return new NoSymbolDeclarator<ExpressionStmt>(expressionStmt, typeSolver); } } else if (node instanceof IfStmt) { return new NoSymbolDeclarator<IfStmt>((IfStmt) node, typeSolver); } else if (node instanceof ForeachStmt) { ForeachStmt foreachStmt = (ForeachStmt) node; return new VariableSymbolDeclarator((VariableDeclarationExpr) (foreachStmt.getVariable()), typeSolver); } else { return new NoSymbolDeclarator<Node>(node, typeSolver); } }
public static SymbolDeclarator getSymbolDeclarator(Node node, TypeSolver typeSolver) { if (node instanceof FieldDeclaration) { return new FieldSymbolDeclarator((FieldDeclaration) node, typeSolver); } else if (node instanceof Parameter) { return new ParameterSymbolDeclarator((Parameter) node, typeSolver); } else if (node instanceof ExpressionStmt) { ExpressionStmt expressionStmt = (ExpressionStmt) node; if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) { return new VariableSymbolDeclarator((VariableDeclarationExpr) (expressionStmt.getExpression()), typeSolver); } else { return new NoSymbolDeclarator<ExpressionStmt>(expressionStmt, typeSolver); } } else if (node instanceof IfStmt) { return new NoSymbolDeclarator<IfStmt>((IfStmt) node, typeSolver); } else if (node instanceof ForeachStmt) { ForeachStmt foreachStmt = (ForeachStmt) node; return new VariableSymbolDeclarator((VariableDeclarationExpr) (foreachStmt.getVariable()), typeSolver); } else { return new NoSymbolDeclarator<Node>(node, typeSolver); } }