@Override public void visit(final ClassOrInterfaceDeclaration n, final String mappedClass) { annotationHelper.visitPre(n, mappedClass); ParserUtil.deconstructMultiDeclarations(ParserUtil.getFieldMembers(n.getMembers())); if (n.getMembers() != null) { for (final BodyDeclaration member : n.getMembers()) { member.accept(this, mappedClass); } } annotationHelper.visitPost(n, mappedClass); }
@Override public void visit(ClassOrInterfaceDeclaration n, List<String> excludedMethods) { n.setAnnotations(null); List<MethodDeclaration> methodToRemove = new ArrayList<MethodDeclaration>(); for (BodyDeclaration bodyDeclaration : n.getMembers()) { if(bodyDeclaration instanceof MethodDeclaration) { MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration; if (excludedMethods.contains(methodDeclaration.getName())) { methodToRemove.add(methodDeclaration); } } } n.getMembers().removeAll(methodToRemove); // if (n.getAnnotations() != null) annotationExprs.addAll(n.getAnnotations()); n.setName(name); super.visit(n, excludedMethods); }
/** * In Java variables can be defined like the following: * int i, j, k; * * When mapping fields in xml this is not a problem. However when using annotation on a field, * Each field should be defined separately. This helper will deconstruct these fields such * that later AST analysis will not need to account for field defined on a separate line. */ public static void deconstructMultiDeclarations(Collection<FieldDeclaration> fields) { for (FieldDeclaration field : fields) { ClassOrInterfaceDeclaration parent = (ClassOrInterfaceDeclaration) field.getParentNode(); //these are chained together if (field.getVariables().size() > 1) { int index = parent.getMembers().indexOf(field); parent.getMembers().remove(index); List<FieldDeclaration> deconstructed = new ArrayList<FieldDeclaration>(); for (VariableDeclarator v : field.getVariables()) { FieldDeclaration f = new FieldDeclaration(field.getJavaDoc(), field.getModifiers(), field.getAnnotations(), field.getType(), Collections.singletonList(v)); f.setComment(field.getComment()); f.setParentNode(field.getParentNode()); deconstructed.add(f); } parent.getMembers().addAll(index, deconstructed); } } }
final List<BodyDeclaration> members = n.getMembers(); if (members != null) { for (int i = 0; i < members.size(); i++) {
n.setModifiers(n.getModifiers() & ~Modifier.ABSTRACT & ~Modifier.PUBLIC); for (BodyDeclaration bodyDeclaration : n.getMembers()) { if (bodyDeclaration instanceof MethodDeclaration) { MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration; n.getMembers().add(fieldDeclaration); for (BodyDeclaration bodyDeclaration : n.getMembers()) { if (bodyDeclaration instanceof MethodDeclaration) { MethodDeclaration methodDeclaration = (MethodDeclaration) bodyDeclaration; for (MethodDeclaration methodDeclaration : methodToRemove) n.getMembers().remove(methodDeclaration);
if (n.getMembers() != null) { printMembers(n.getMembers(), arg);
if (n.getMembers() != null) { printMembers(n.getMembers(), arg);
if (n.getMembers() != null) { for (final BodyDeclaration member : n.getMembers()) { member.accept(this, arg);
@Override public Boolean visit(final ClassOrInterfaceDeclaration n1, final Node arg) { final ClassOrInterfaceDeclaration n2 = (ClassOrInterfaceDeclaration) arg; // javadoc are checked at CompilationUnit if (n1.getModifiers() != n2.getModifiers()) { return Boolean.FALSE; } if (n1.isInterface() != n2.isInterface()) { return Boolean.FALSE; } if (!objEquals(n1.getName(), n2.getName())) { return Boolean.FALSE; } if (!nodesEquals(n1.getAnnotations(), n2.getAnnotations())) { return Boolean.FALSE; } if (!nodesEquals(n1.getTypeParameters(), n2.getTypeParameters())) { return Boolean.FALSE; } if (!nodesEquals(n1.getExtends(), n2.getExtends())) { return Boolean.FALSE; } if (!nodesEquals(n1.getImplements(), n2.getImplements())) { return Boolean.FALSE; } if (!nodesEquals(n1.getMembers(), n2.getMembers())) { return Boolean.FALSE; } return Boolean.TRUE; }
@Test public void testRemoveAnnotation() throws Exception { CompilerAssert<File, File> helper = compiler("metamodel.template"); helper.assertCompile(); // JavaFile file = helper.assertJavaSource("metamodel.template.A"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); FieldDeclaration decl = (FieldDeclaration)a.getMembers().get(0); decl.getAnnotations().clear(); file.assertSave(); // File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModelState unserialize = Tools.unserialize(MetaModelState.class, ser); ModuleMetaModel mm = (ModuleMetaModel)unserialize.metaModel; mm.getQueue().clear(); Tools.serialize(unserialize, ser); // helper.assertCompile(); // unserialize = Tools.unserialize(MetaModelState.class, ser); mm = (ModuleMetaModel)unserialize.metaModel; List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(1, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(TemplateMetaModel.class, events.get(0).getObject()); }
@Test public void testRemoveAnnotation() throws Exception { CompilerAssert<File, File> helper = compiler("metamodel.template"); helper.assertCompile(); // JavaFile file = helper.assertJavaSource("metamodel.template.A"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); FieldDeclaration decl = (FieldDeclaration)a.getMembers().get(0); decl.getAnnotations().clear(); file.assertSave(); // File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModelState unserialize = Tools.unserialize(MetaModelState.class, ser); ModuleMetaModel mm = (ModuleMetaModel)unserialize.metaModel; mm.getQueue().clear(); Tools.serialize(unserialize, ser); // helper.assertCompile(); // unserialize = Tools.unserialize(MetaModelState.class, ser); mm = (ModuleMetaModel)unserialize.metaModel; List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(1, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(TemplateMetaModel.class, events.get(0).getObject()); }
ClassOrInterfaceDeclaration bean = file.assertDeclaration(); MethodDeclaration index = null; for (BodyDeclaration decl : bean.getMembers()) { if (decl instanceof MethodDeclaration) { index = (MethodDeclaration)decl;
ClassOrInterfaceDeclaration bean = file.assertDeclaration(); MethodDeclaration index = null; for (BodyDeclaration decl : bean.getMembers()) { if (decl instanceof MethodDeclaration) { index = (MethodDeclaration)decl;
@Override public Node visit(ClassOrInterfaceDeclaration _n, Object _arg) { JavadocComment javaDoc = cloneNodes(_n.getJavaDoc(), _arg); List<AnnotationExpr> annotations = visit(_n.getAnnotations(), _arg); List<TypeParameter> typeParameters = visit(_n.getTypeParameters(), _arg); List<ClassOrInterfaceType> extendsList = visit(_n.getExtends(), _arg); List<ClassOrInterfaceType> implementsList = visit(_n.getImplements(), _arg); List<BodyDeclaration> members = visit(_n.getMembers(), _arg); Comment comment = cloneNodes(_n.getComment(), _arg); ClassOrInterfaceDeclaration r = new ClassOrInterfaceDeclaration( _n.getBeginLine(), _n.getBeginColumn(), _n.getEndLine(), _n.getEndColumn(), _n.getModifiers(), annotations, _n.isInterface(), _n.getName(), typeParameters, extendsList, implementsList, members ); r.setComment(comment); return r; }
index.setAnnotations(Collections.<AnnotationExpr>singletonList(new NormalAnnotationExpr(ASTHelper.createNameExpr(View.class.getName()), Collections.<MemberValuePair>emptyList()))); index.setBody(new BlockStmt()); a.getMembers().add(index); file.assertSave(); helper.assertCompile(); assertTrue(a.getMembers().remove(index)); file.assertSave();
show.setAnnotations(Collections.<AnnotationExpr>singletonList(new NormalAnnotationExpr(ASTHelper.createNameExpr(View.class.getName()), Collections.<MemberValuePair>emptyList()))); show.setBody(new BlockStmt()); a.getMembers().add(show); file.assertSave(); helper.assertCompile(); assertTrue(a.getMembers().remove(show)); file.assertSave(); helper.assertCompile();
MethodDeclaration decl = (MethodDeclaration)a.getMembers().get(0); decl.getAnnotations().clear(); file.assertSave();
MethodDeclaration decl = (MethodDeclaration)a.getMembers().get(0); decl.getAnnotations().clear(); file.assertSave();
a.getMembers().clear(); file.assertSave();
a.getMembers().clear(); file.assertSave();