From seam-commits at lists.jboss.org Fri Jul 30 17:38:47 2010 Content-Type: multipart/mixed; boundary="===============1733626678915018960==" MIME-Version: 1.0 From: seam-commits at lists.jboss.org To: seam-commits at lists.jboss.org Subject: [seam-commits] Seam SVN: r13536 - in sandbox/encore/core/src: main/java/org/jboss/encore/grammar/java/ast and 3 other directories. Date: Fri, 30 Jul 2010 17:38:47 -0400 Message-ID: <201007302138.o6ULcllS020310@svn01.web.mwc.hst.phx2.redhat.com> --===============1733626678915018960== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Author: lincolnthree Date: 2010-07-30 17:38:46 -0400 (Fri, 30 Jul 2010) New Revision: 13536 Added: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Annotati= on.java sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/impl/ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/impl/Ann= otationImpl.java sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/ClassAnn= otationTest.java Modified: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaClas= s.java sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.j= ava sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/Modi= fierAccessor.java sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaClas= sTest.java sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/Moc= kClassFile.java Log: Added class annotation support (still needs value settings)... going to nee= d to figure out a way to handle / respect / automatically manage imports. Added: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Anno= tation.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Annotat= ion.java (rev 0) +++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Annotat= ion.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -0,0 +1,13 @@ +package org.jboss.encore.grammar.java; + +import org.jboss.encore.grammar.Internal; +import org.jboss.encore.grammar.Mutable; + +public interface Annotation extends Internal, Mutable +{ + + String getName(); + + Annotation setName(String className); + +} Modified: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/J= avaClass.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaCla= ss.java 2010-07-30 15:13:34 UTC (rev 13535) +++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/JavaCla= ss.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -45,8 +45,11 @@ import org.jboss.encore.grammar.java.ast.MethodFinderVisitor; import org.jboss.encore.grammar.java.ast.ModifierAccessor; import org.jboss.encore.grammar.java.ast.TypeDeclarationFinderVisitor; +import org.jboss.encore.grammar.java.impl.AnnotationImpl; = /** + * Represents a Java Source File + * = * @author Lincoln Baxter, II= I */ public class JavaClass implements Internal, Mutable @@ -102,6 +105,44 @@ } = /* + * Annotation modifiers + */ + @SuppressWarnings("unchecked") + public Annotation addAnnotation() + { + Annotation annotation =3D new AnnotationImpl(this); + getTypeDeclaration().modifiers().add(annotation.getInternal()); + return annotation; + } + + public Annotation addAnnotation(Class clazz) + { + return addAnnotation(clazz.getName()); + } + + public Annotation addAnnotation(final String className) + { + return addAnnotation().setName(className); + } + + public List getAnnotations() + { + List result =3D new ArrayList(); + + List modifiers =3D getTypeDeclaration().modifiers(); + for (Object object : modifiers) + { + if (object instanceof org.eclipse.jdt.core.dom.Annotation) + { + Annotation annotation =3D new AnnotationImpl(this, object); + result.add(annotation); + } + } + + return result; + } + + /* * Import modifiers */ = @@ -250,9 +291,22 @@ public JavaClass setName(String name) { getTypeDeclaration().setName(unit.getAST().newSimpleName(name)); + updateConstructorNames(); return this; } = + private void updateConstructorNames() + { + for (Method m : getMethods()) + { + if (m.isConstructor()) + { + m.setConstructor(false); + m.setConstructor(true); + } + } + } + /* * Package modifiers */ Modified: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/M= ethod.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.= java 2010-07-30 15:13:34 UTC (rev 13535) +++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/Method.= java 2010-07-30 21:38:46 UTC (rev 13536) @@ -105,9 +105,14 @@ return this; } = - public Method setConstructor(final boolean isConstructor) + /** + * Toggle this method as a constructor. If true, and the name of the + * {@link Method} is not the same as the name of its parent {@link Java= Class} + * , update the name of the to match. + */ + public Method setConstructor(final boolean constructor) { - method.setConstructor(isConstructor); + method.setConstructor(constructor); if (isConstructor()) { method.setName(ast.newSimpleName(parent.getName())); Modified: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/a= st/ModifierAccessor.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/Mod= ifierAccessor.java 2010-07-30 15:13:34 UTC (rev 13535) +++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/ast/Mod= ifierAccessor.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -9,11 +9,10 @@ = public class ModifierAccessor { - @SuppressWarnings("unchecked") public boolean hasModifier(BodyDeclaration body, final ModifierKeyword = modifier) { boolean result =3D false; - List modifiers =3D body.modifiers(); + List modifiers =3D getModifiers(body); for (Modifier m : modifiers) { if (m.getKeyword() =3D=3D modifier) @@ -24,10 +23,25 @@ return result; } = + private List getModifiers(BodyDeclaration body) + { + List result =3D new ArrayList(); + List modifiers =3D body.modifiers(); + for (Object m : modifiers) + { + if (m instanceof Modifier) + { + Modifier mod =3D (Modifier) m; + result.add(mod); + } + } + return result; + } + @SuppressWarnings("unchecked") public List clearVisibility(BodyDeclaration body) { - List modifiers =3D body.modifiers(); + List modifiers =3D getModifiers(body); = List toBeRemoved =3D new ArrayList(); for (Modifier modifier : modifiers) @@ -38,7 +52,7 @@ } } = - modifiers.removeAll(toBeRemoved); + body.modifiers().removeAll(toBeRemoved); return modifiers; } = @@ -48,10 +62,9 @@ body.modifiers().add(body.getAST().newModifier(keyword)); } = - @SuppressWarnings("unchecked") public void removeModifier(BodyDeclaration body, ModifierKeyword keywor= d) { - List modifiers =3D body.modifiers(); + List modifiers =3D getModifiers(body); = List toBeRemoved =3D new ArrayList(); for (Modifier modifier : modifiers) @@ -62,6 +75,6 @@ } } = - modifiers.removeAll(toBeRemoved); + body.modifiers().removeAll(toBeRemoved); } } Added: sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/impl= /AnnotationImpl.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/impl/An= notationImpl.java (rev 0) +++ sandbox/encore/core/src/main/java/org/jboss/encore/grammar/java/impl/An= notationImpl.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -0,0 +1,59 @@ +package org.jboss.encore.grammar.java.impl; + +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.jboss.encore.grammar.java.Annotation; +import org.jboss.encore.grammar.java.JavaClass; + +public class AnnotationImpl implements Annotation +{ + private JavaClass parent =3D null; + private CompilationUnit cu =3D null; + private AST ast =3D null; + private final org.eclipse.jdt.core.dom.Annotation annotation; + + private void init(final JavaClass parent) + { + this.parent =3D parent; + cu =3D (CompilationUnit) parent.getInternal(); + ast =3D cu.getAST(); + } + + public AnnotationImpl(JavaClass parent) + { + init(parent); + this.annotation =3D ast.newNormalAnnotation(); + } + + public AnnotationImpl(JavaClass parent, Object internal) + { + init(parent); + this.annotation =3D (org.eclipse.jdt.core.dom.Annotation) internal; + } + + @Override + public String getName() + { + return annotation.getTypeName().getFullyQualifiedName(); + } + + @Override + public Annotation setName(String className) + { + annotation.setTypeName(ast.newName(className)); + return this; + } + + @Override + public Object getInternal() + { + return annotation; + } + + @Override + public void applyChanges() + { + parent.applyChanges(); + } + +} Added: sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/Clas= sAnnotationTest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/ClassAn= notationTest.java (rev 0) +++ sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/ClassAn= notationTest.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -0,0 +1,105 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2010, Red Hat, Inc., and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +package org.jboss.encore.grammar.java; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.InputStream; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +/** + * @author Lincoln Baxter, II= I + */ +public class ClassAnnotationTest +{ + private InputStream stream; + private JavaClass javaClass; + + @Before + public void reset() + { + stream =3D ClassAnnotationTest.class.getResourceAsStream("/org/jboss= /encore/grammar/java/MockClassFile.java"); + javaClass =3D new JavaClass(stream); + } + + @Test + public void testParseAnnotation() throws Exception + { + List annotations =3D javaClass.getAnnotations(); + assertEquals(1, annotations.size()); + } + + @Test + public void testAddAnnotation() throws Exception + { + javaClass.addAnnotation().setName("RequestScoped"); + List annotations =3D javaClass.getAnnotations(); + assertEquals(2, annotations.size()); + assertEquals("RequestScoped", annotations.get(annotations.size() - 1= ).getName()); + } + + @Test + public void testAddAnnotationByClass() throws Exception + { + javaClass.addAnnotation(Test.class); + List annotations =3D javaClass.getAnnotations(); + assertEquals(2, annotations.size()); + assertEquals(Test.class.getName(), annotations.get(annotations.size(= ) - 1).getName()); + javaClass.applyChanges(); + assertTrue(javaClass.toString().contains("@" + Test.class.getName())= ); + } + + @Test + public void testAddAnnotationByName() throws Exception + { + javaClass.addAnnotation("RequestScoped"); + List annotations =3D javaClass.getAnnotations(); + assertEquals(2, annotations.size()); + assertEquals("RequestScoped", annotations.get(annotations.size() - 1= ).getName()); + javaClass.applyChanges(); + assertTrue(javaClass.toString().contains("@RequestScoped")); + } + + @Test + public void testCanAddAnnotationDuplicate() throws Exception + { + javaClass.addAnnotation(Test.class); + javaClass.addAnnotation(Test.class); + List annotations =3D javaClass.getAnnotations(); + assertEquals(3, annotations.size()); + assertEquals(Test.class.getName(), annotations.get(annotations.size(= ) - 1).getName()); + assertEquals(Test.class.getName(), annotations.get(annotations.size(= ) - 2).getName()); + javaClass.applyChanges(); + String pattern =3D "@" + Test.class.getName() + "() " + "@" + Test.c= lass.getName() + "()"; + assertTrue(javaClass.toString().contains(pattern)); + } + + @Test(expected =3D IllegalArgumentException.class) + public void testCannotAddAnnotationWithIllegalName() throws Exception + { + javaClass.addAnnotation("sdf*(&#$%"); + } +} Modified: sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/J= avaClassTest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaCla= ssTest.java 2010-07-30 15:13:34 UTC (rev 13535) +++ sandbox/encore/core/src/test/java/org/jboss/encore/grammar/java/JavaCla= ssTest.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -50,6 +50,20 @@ } = @Test + public void testApplyChangesRequiredForModification() throws Exception + { + assertEquals("MockClassFile", javaClass.getName()); + javaClass.setName("Telephone"); + assertEquals("Telephone", javaClass.getName()); + assertFalse(javaClass.toString().contains("Telephone")); + assertTrue(javaClass.toString().contains("MockClassFile")); + + javaClass.applyChanges(); + assertTrue(javaClass.toString().contains("Telephone")); + assertFalse(javaClass.toString().contains("MockClassFile")); + } + + @Test public void testParse() throws Exception { assertEquals(URL.class.getName(), javaClass.getImports().get(0).getN= ame()); @@ -68,6 +82,16 @@ } = @Test + public void testSetNameUpdatesConstructorNames() throws Exception + { + assertEquals("MockClassFile", javaClass.getName()); + assertEquals("MockClassFile", javaClass.getMethods().get(0).getName(= )); + javaClass.setName("Telephone"); + assertEquals("Telephone", javaClass.getName()); + assertEquals("Telephone", javaClass.getMethods().get(0).getName()); + } + + @Test public void testSetPackage() throws Exception { javaClass.setPackage("org.lincoln"); Modified: sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/j= ava/MockClassFile.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/Mo= ckClassFile.java 2010-07-30 15:13:34 UTC (rev 13535) +++ sandbox/encore/core/src/test/resources/org/jboss/encore/grammar/java/Mo= ckClassFile.java 2010-07-30 21:38:46 UTC (rev 13536) @@ -2,6 +2,7 @@ = import java.net.URL; = +(a)Deprecated public class MockClassFile { private String field; --===============1733626678915018960==--