@Override public void visit(ExpressionStmt n, Void arg) { out.println("ExpressionStmt: " + (extended ? n : n.getExpression())); super.visit(n, arg); }
/** * Generates something like * <code>P_INDEX_UPDATER.lazySet(this, newValue)</code> * * @param fieldUpdaterFieldName * @param newValueName * @return */ private static BlockStmt fieldUpdaterLazySet(String fieldUpdaterFieldName, String newValueName) { BlockStmt body = new BlockStmt(); body.addStatement(new ExpressionStmt( methodCallExpr(fieldUpdaterFieldName, "lazySet", new ThisExpr(), new NameExpr(newValueName)))); return body; }
@Override public ExpressionStmt doMerge(ExpressionStmt first, ExpressionStmt second) { ExpressionStmt es = new ExpressionStmt(); es.setExpression(mergeSingle(first.getExpression(),second.getExpression())); return es; }
v.setParentNode(parent); } else if (parent instanceof ExpressionStmt) { ((ExpressionStmt)parent).setExpression(v); } else if (parent instanceof CastExpr) { ((CastExpr)parent).setExpression(v);
@Override public boolean doIsEquals(ExpressionStmt first, ExpressionStmt second) { if(!isEqualsUseMerger(first.getExpression(),second.getExpression())) return false; return true; } }
/** * Generates something like * <code>P_INDEX_UPDATER.lazySet(this, newValue)</code> * * @param fieldUpdaterFieldName * @param newValueName * @return */ private static BlockStmt fieldUpdaterLazySet(String fieldUpdaterFieldName, String newValueName) { BlockStmt body = new BlockStmt(); body.addStatement(new ExpressionStmt( methodCallExpr(fieldUpdaterFieldName, "lazySet", new ThisExpr(), new NameExpr(newValueName)))); return body; }
private List<VariableDeclarator> localVariablesDeclaredIn(Statement statement) { if (statement instanceof ExpressionStmt) { ExpressionStmt expressionStmt = (ExpressionStmt)statement; if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr variableDeclarationExpr = (VariableDeclarationExpr)expressionStmt.getExpression(); List<VariableDeclarator> variableDeclarators = new LinkedList<>(); variableDeclarators.addAll(variableDeclarationExpr.getVariables()); return variableDeclarators; } } return Collections.emptyList(); } }
/** * Generates something like <code>field = newValue</code> * * @param fieldName * @param valueName * @return */ private static BlockStmt fieldAssignment(String fieldName, String valueName) { BlockStmt body = new BlockStmt(); body.addStatement( new ExpressionStmt(new AssignExpr(new NameExpr(fieldName), new NameExpr(valueName), Operator.ASSIGN))); return body; }
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
/** * Generates something like <code>field = newValue</code> * * @param fieldName * @param valueName * @return */ private static BlockStmt fieldAssignment(String fieldName, String valueName) { BlockStmt body = new BlockStmt(); body.addStatement( new ExpressionStmt(new AssignExpr(new NameExpr(fieldName), new NameExpr(valueName), Operator.ASSIGN))); return body; }
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
public static void main(String[] args) throws FileNotFoundException { // The directory where we store the examples String pathToExamplesDir = "." + separator + "src" + separator + "main" + separator + "resources"; // Parse the code of an entire source file, a.k.a. a Compilation Unit CompilationUnit compilationUnitNode = JavaParser.parse(new File(pathToExamplesDir + separator + "ASimpleClass.java")); printCompilationUnit("My original class", compilationUnitNode); // Modifying the name of the class compilationUnitNode.getClassByName("ASimpleClass").get() .setName("MyRenamedClass"); printCompilationUnit("Renamed class", compilationUnitNode); // Adding a method: we add a setter MethodDeclaration setter = compilationUnitNode .getClassByName("MyRenamedClass").get() .addMethod("setAField", Modifier.PUBLIC); setter.addParameter("boolean", "aField"); setter.getBody().get().getStatements().add(new ExpressionStmt( new AssignExpr( new FieldAccessExpr(new ThisExpr(),"aField"), new NameExpr("aField"), AssignExpr.Operator.ASSIGN ))); printCompilationUnit("With a setter", compilationUnitNode); } }
@Override public Boolean visit(ExpressionStmt n, Void arg) { // A local variable declaration statement can complete normally iff it is reachable. if (n.getExpression() instanceof VariableDeclarationExpr) { VariableDeclarationExpr expr = (VariableDeclarationExpr) n.getExpression(); return isReachable(n); } // An expression statement can complete normally iff it is reachable. return isReachable(n); } };
private MethodDeclaration setterDeclaration(EntityField field) { MethodDeclaration decl = new MethodDeclaration(ModifierSet.PUBLIC, new VoidType(), "set" + CaseConverter.pascalCase(field.getName()), Collections.singletonList(new Parameter( ASTHelper.createReferenceType(field.getType().getSimpleName(), 0), new VariableDeclaratorId(field.getName())))); BlockStmt body = new BlockStmt(); body.setStmts( Collections.singletonList( new ExpressionStmt( new AssignExpr( new FieldAccessExpr(new ThisExpr(), field.getName()), ASTHelper.createNameExpr(field.getName()), AssignExpr.Operator.assign )))); decl.setBody(body); return decl; }
private Expression getExpressionFromStmt(Statement stmt) { stmt = getStmtFromStmt(stmt); if (stmt instanceof ExpressionStmt) { return getUnenclosedExpr(((ExpressionStmt)stmt).getExpression()); } return null; }
addElement.getBody().get().getStatements().add(new ExpressionStmt( new MethodCallExpr(new NameExpr("elements"), new SimpleName("add"), NodeList.nodeList(new NameExpr("newElement")))
Map<String, Class<?>> getTypesByVariableName( List<Statement> statements ) { Map<String, Class<?>> typeByVariableName = new HashMap<>(); for (Statement statement : statements) { if ( statement instanceof ExpressionStmt ) { Expression expression = ( ( ExpressionStmt ) statement ).getExpression(); if ( expression instanceof VariableDeclarationExpr ) { VariableDeclarationExpr varExpression = ( VariableDeclarationExpr ) expression; @Nullable Class<?> type = typeOf( varExpression.getType() ); if ( type != null ) { for (VariableDeclarator var : varExpression.getVars()) { typeByVariableName.put( var.getId().getName(), type ); } } } } } return typeByVariableName; }
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, typeSolver); } } else if (node instanceof IfStmt) { return new NoSymbolDeclarator<>((IfStmt) node, typeSolver); } else if (node instanceof ForEachStmt) { ForEachStmt foreachStmt = (ForEachStmt) node; return new VariableSymbolDeclarator(foreachStmt.getVariable(), typeSolver); } else { return new NoSymbolDeclarator<>(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); } }