/** * Replace an AST node with another one by substituting the corresponding child of its parent. * * @param node The node to be replace. * @param newNode The new node. */ public static void replaceNode(ASTNode node, ASTNode newNode) { ASTNode parent = node.getParent(); StructuralPropertyDescriptor location = node.getLocationInParent(); if (location.isChildProperty()) { parent.setStructuralProperty(location, newNode); } else { List<ASTNode> properties = (List<ASTNode>) parent.getStructuralProperty(location); int position = properties.indexOf(node); properties.set(position, newNode); } }
private static SimpleType createRawTypeReferenceOperations( CompilationUnit compilationUnit, IProblemLocation[] locations, List operations) { if (hasFatalError(compilationUnit)) return null; List /*<SimpleType>*/ result = new ArrayList(); for (int i = 0; i < locations.length; i++) { IProblemLocation problem = locations[i]; if (isRawTypeReferenceProblem(problem.getProblemId())) { ASTNode node = problem.getCoveredNode(compilationUnit); if (node instanceof ClassInstanceCreation) { ASTNode rawReference = (ASTNode) node.getStructuralProperty(ClassInstanceCreation.TYPE_PROPERTY); if (isRawTypeReference(rawReference)) { result.add(rawReference); } } else if (node instanceof SimpleName) { ASTNode rawReference = node.getParent(); if (isRawTypeReference(rawReference)) { ASTNode parent = rawReference.getParent(); if (!(parent instanceof ArrayType || parent instanceof ParameterizedType)) result.add(rawReference); } } else if (node instanceof MethodInvocation) { MethodInvocation invocation = (MethodInvocation) node; ASTNode rawReference = getRawReference(invocation, compilationUnit); if (rawReference != null) { result.add(rawReference); } } } } if (result.size() == 0) return null; SimpleType[] types = (SimpleType[]) result.toArray(new SimpleType[result.size()]); operations.add(new AddTypeParametersOperation(types)); return types[0]; }