@Override public void process(final Context context, final CompilationUnit unit) { NodeList<CompilationUnitMember> declarations = unit.getDeclarations(); // remove NodeList, it is declared in enginelib.dart for (Iterator<CompilationUnitMember> iter = declarations.iterator(); iter.hasNext(); ) { CompilationUnitMember member = iter.next(); if (member instanceof ClassDeclaration) { ClassDeclaration classDeclaration = (ClassDeclaration) member; String name = classDeclaration.getName().getName(); if (name.equals("NodeList") || name.equals("NodeLocator") || name.equals("NodeFoundException")) { iter.remove(); } } } // process nodes unit.accept( new GeneralizingASTVisitor<Void>() { @Override public Void visitMethodDeclaration(MethodDeclaration node) { String name = node.getName().getName(); if ("accept".equals(name) && node.getParameters().getParameters().size() == 1) { node.setReturnType(null); FormalParameter formalParameter = node.getParameters().getParameters().get(0); ((SimpleFormalParameter) formalParameter).getType().setTypeArguments(null); } return super.visitMethodDeclaration(node); } @Override public Void visitMethodInvocation(MethodInvocation node) { if (isMethodInClass( node, "toArray", "com.google.dart.engine.utilities.collection.IntList")) { replaceNode(node, node.getTarget()); return null; } return super.visitMethodInvocation(node); } @Override public Void visitTypeName(TypeName node) { if (node.getName() instanceof SimpleIdentifier) { SimpleIdentifier nameNode = (SimpleIdentifier) node.getName(); String name = nameNode.getName(); if ("IntList".equals(name)) { replaceNode(node, typeName("List", typeName("int"))); return null; } } return super.visitTypeName(node); } private boolean isMethodInClass( MethodInvocation node, String reqName, String reqClassName) { String name = node.getMethodName().getName(); return Objects.equal(name, reqName) && JavaUtils.isMethodInClass(context.getNodeBinding(node), reqClassName); } }); }