Log Message
QDOX-226: add JavaField.getEnumConstantClass()
Modified Paths
- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/ModelBuilder.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/impl/DefaultJavaField.java
- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java
Diff
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/ModelBuilder.java (1467 => 1468)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/ModelBuilder.java 2011-12-28 20:10:26 UTC (rev 1467)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/ModelBuilder.java 2011-12-28 23:13:35 UTC (rev 1468)
@@ -191,11 +191,15 @@
// annotations
setAnnotations( newClass );
- if ( !classStack.isEmpty() )
+ if ( currentField != null )
{
classStack.getFirst().addClass( newClass );
+ currentField.setEnumConstantClass( newClass );
+ }
+ else if ( !classStack.isEmpty() )
+ {
+ classStack.getFirst().addClass( newClass );
newClass.setParentClass( classStack.getFirst() );
-
}
else
{
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java (1467 => 1468)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java 2011-12-28 20:10:26 UTC (rev 1467)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java 2011-12-28 23:13:35 UTC (rev 1468)
@@ -64,5 +64,11 @@
* @since 2.0
*/
boolean isEnumConstant();
-
+
+ /**
+ *
+ * @return the classBody of the enum constant
+ * @since 2.0
+ */
+ JavaClass getEnumConstantClass();
}
\ No newline at end of file
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/impl/DefaultJavaField.java (1467 => 1468)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/impl/DefaultJavaField.java 2011-12-28 20:10:26 UTC (rev 1467)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/impl/DefaultJavaField.java 2011-12-28 23:13:35 UTC (rev 1468)
@@ -33,6 +33,8 @@
private boolean enumConstant;
+ private JavaClass enumConstantClass;
+
public DefaultJavaField()
{
}
@@ -116,6 +118,17 @@
{
this.enumConstant = enumConstant;
}
+
+ /** {@inheritDoc} */
+ public JavaClass getEnumConstantClass()
+ {
+ return enumConstantClass;
+ }
+
+ public void setEnumConstantClass( JavaClass enumConstantClass )
+ {
+ this.enumConstantClass = enumConstantClass;
+ }
/**
* @see java.lang.reflect.Field#toString()
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java (1467 => 1468)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java 2011-12-28 20:10:26 UTC (rev 1467)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java 2011-12-28 23:13:35 UTC (rev 1468)
@@ -6,6 +6,7 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
+import java.lang.reflect.Field;
import java.util.Collection;
import java.util.LinkedList;
@@ -17,6 +18,7 @@
import com.thoughtworks.qdox.builder.Builder;
import com.thoughtworks.qdox.parser.impl.Parser;
+import com.thoughtworks.qdox.parser.structs.AnnoDef;
import com.thoughtworks.qdox.parser.structs.ClassDef;
import com.thoughtworks.qdox.parser.structs.FieldDef;
import com.thoughtworks.qdox.parser.structs.MethodDef;
@@ -2632,6 +2634,7 @@
verify( builder, times( 2 ) ).beginField( f.capture() );
verify( builder, times( 2 ) ).endField();
verify( builder ).endClass();
+ verifyNoMoreInteractions( builder );
ClassDef cls = classCaptor.getValue();
assertEquals( "x", cls.getName() );
@@ -2683,7 +2686,78 @@
assertEquals( new TypeDef( "x" ), fld.getType() ); //bug @todo fixme
assertEquals( null , fld.getBody() );
}
+
+ // QDOX-266
+ public void testEnumConstantWithClassBody() throws Exception
+ {
+ setupLex(Parser.PUBLIC);
+ setupLex(Parser.ENUM);
+ setupLex(Parser.IDENTIFIER, "MethodLocationOfEnumMethod");
+ setupLex(Parser.BRACEOPEN);
+ setupLex(Parser.IDENTIFIER, "A");
+ setupLex(Parser.PARENBLOCK);
+
+ setupLex(Parser.BRACEOPEN);
+
+ setupLex(Parser.AT);
+ setupLex(Parser.IDENTIFIER, "Override");
+ setupLex(Parser.PUBLIC);
+ setupLex(Parser.IDENTIFIER, "void" );
+ setupLex(Parser.IDENTIFIER, "method" );
+ setupLex(Parser.PARENOPEN);
+ setupLex(Parser.PARENCLOSE);
+ setupLex(Parser.CODEBLOCK);
+ setupLex(Parser.SEMI);
+
+ setupLex(Parser.BRACECLOSE);
+
+ setupLex(Parser.BRACECLOSE);
+ setupLex(0);
+
+ // execute
+ Parser parser = new Parser(lexer, builder);
+ parser.parse();
+
+ // expectations
+ ArgumentCaptor<ClassDef> classCaptor = ArgumentCaptor.forClass( ClassDef.class );
+ ArgumentCaptor<FieldDef> f = ArgumentCaptor.forClass(FieldDef.class);
+ ArgumentCaptor<ClassDef> enumConstantClassCaptor = ArgumentCaptor.forClass( ClassDef.class );
+ ArgumentCaptor<AnnoDef> annoCaptor = ArgumentCaptor.forClass( AnnoDef.class );
+ ArgumentCaptor<MethodDef> methodClassCaptor = ArgumentCaptor.forClass( MethodDef.class );
+
+ // verify
+ verify( builder ).beginClass( classCaptor.capture() );
+ verify( builder ).beginField( f.capture() );
+ verify( builder ).beginClass( enumConstantClassCaptor.capture() );
+ verify( builder ).addAnnotation( annoCaptor.capture() );
+ verify( builder ).beginMethod();
+ verify( builder ).endMethod( methodClassCaptor.capture() );
+ verify( builder ).endClass();
+ verify( builder ).endField();
+ verify( builder ).endClass();
+
+ ClassDef cls = classCaptor.getValue();
+ assertEquals( true, cls.getModifiers().contains( "public" ) );
+ assertEquals( ClassDef.ENUM, cls.getType() );
+ assertEquals( "MethodLocationOfEnumMethod", cls.getName() );
+ FieldDef fld = f.getValue();
+ assertEquals( "A", fld.getName() );
+ assertEquals( new TypeDef( "MethodLocationOfEnumMethod" ), fld.getType() );
+ //ClassDef ecCls = enumConstantClassCaptor.getValue();
+ AnnoDef ann = annoCaptor.getValue();
+ assertEquals( "Override", ann.getTypeDef().getName() );
+ MethodDef mth = methodClassCaptor.getValue();
+ assertEquals( "method", mth.getName() );
+
+// Class methodLocationOfEnumMethod = MethodLocationOfEnumMethod.class;
+// Field a = methodLocationOfEnumMethod.getField( "A" );
+// assertNotNull( a );
+// assertSame( methodLocationOfEnumMethod, a.getDeclaringClass() );
+// assertSame( methodLocationOfEnumMethod, a.getType() );
+// assertEquals( 2, methodLocationOfEnumMethod.getDeclaredMethods().length);
+ }
+
private void setupLex(int token, String value) {
lexValues.add( token );
textValues.add( value );
@@ -2700,4 +2774,24 @@
}
}
+ private enum MethodLocationOfEnumMethod
+ {
+ A()
+ {
+ @Override
+ public void method()
+ {
+ };
+
+ public String doThis() { return null; }
+ };
+
+ public abstract void method();
+
+ private void test()
+ {
+ };
+
+ String name = "x";
+ }
}
\ No newline at end of file
To unsubscribe from this list please visit:
