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==--