Title: [1307] trunk/qdox/src/test/java/com/thoughtworks/qdox/model: Add JavaClass.getEnumConstants() and JavaClass.getEnumConstantByName()

Diff

Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaClass.java (1306 => 1307)

--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaClass.java	2011-09-03 17:32:37 UTC (rev 1306)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaClass.java	2011-09-04 11:11:58 UTC (rev 1307)
@@ -605,7 +605,7 @@
     public List<JavaField> getFields() {
         return fields;
     }
-
+    
     /* (non-Javadoc)
      * @see com.thoughtworks.qdox.model.JavaClass#getFieldByName(java.lang.String)
      */
@@ -620,6 +620,28 @@
         }
         return null;
     }
+    
+    public List<JavaField> getEnumConstants()
+    {
+        List<JavaField> result = isEnum() ? new LinkedList<JavaField>() : null; 
+        if ( isEnum() )
+        {
+            for ( JavaField field : getFields() )
+            {
+                if ( field.isEnumConstant() )
+                {
+                    result.add( field );
+                }
+            }
+        }
+        return result;
+    }
+    
+    public JavaField getEnumConstantByName( String name )
+    {
+        JavaField field = getFieldByName( name );
+        return field.isEnumConstant() ? field : null;
+    }
 
     public void addClass(JavaClass cls) {
         classes.add(cls);

Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaClass.java (1306 => 1307)

--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaClass.java	2011-09-03 17:32:37 UTC (rev 1306)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaClass.java	2011-09-04 11:11:58 UTC (rev 1307)
@@ -274,8 +274,23 @@
      * @return
      */
     JavaField getFieldByName( String name );
+    
+    /**
+     * Based on {@link java.lang.Class#getEnumConstants()}.
+     *  
+     * 
+     * @return a List of enum constants if this class is an <code>enum</code>, otherwise <code>null</code>
+     */
+    List<JavaField> getEnumConstants();
 
     /**
+     * 
+     * 
+     * @return the enumConstant matching the {@code name}, otherwise <code>null</code>
+     */
+    JavaField getEnumConstantByName( String name );
+
+    /**
      * @deprecated Use {@link #getNestedClasses()} instead.
      */
     List<JavaClass> getClasses();

Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/Type.java (1306 => 1307)

--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/Type.java	2011-09-03 17:32:37 UTC (rev 1306)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/Type.java	2011-09-04 11:11:58 UTC (rev 1307)
@@ -767,7 +767,17 @@
     {
         return resolveRealClass().getFieldByName( name );
     }
-
+    
+    public List<JavaField> getEnumConstants()
+    {
+        return resolveRealClass().getEnumConstants();
+    }
+    
+    public JavaField getEnumConstantByName( String name )
+    {
+        return resolveRealClass().getEnumConstantByName( name );
+    }
+    
     public List<JavaClass> getClasses()
     {
         return resolveRealClass().getClasses();

Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/model/JavaClassTest.java (1306 => 1307)

--- trunk/qdox/src/test/java/com/thoughtworks/qdox/model/JavaClassTest.java	2011-09-03 17:32:37 UTC (rev 1306)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/model/JavaClassTest.java	2011-09-04 11:11:58 UTC (rev 1307)
@@ -479,6 +479,46 @@
             assertEquals("enums cannot extend other classes", e.getMessage());
         }
     }
+    
+    public void testGetEnumConstants() {
+        setName( cls, "MyEnum" );
+        assertNull( cls.getEnumConstants() );
+        
+        setEnum( cls, true );
+        assertNotNull( cls.getEnumConstants() );
+        assertEquals( 0, cls.getEnumConstants().size() );
+        
+        List<JavaField> fields = new ArrayList<JavaField>();
+        JavaField nonEnumConstantField = mock(JavaField.class);
+        fields.add( nonEnumConstantField );
+        setFields( cls, fields );
+        assertEquals( 0, cls.getEnumConstants().size() );
+        
+        JavaField enumConstantField = mock(JavaField.class);
+        when ( enumConstantField.isEnumConstant() ).thenReturn( true );
+        fields.add( enumConstantField );
+        setFields( cls, fields );
+        assertEquals( 1, cls.getEnumConstants().size() );
+    }
+    
+    public void testGetEnumConstantByName() {
+        setName( cls, "MyEnum" );
+        
+        List<JavaField> fields = new ArrayList<JavaField>();
+        JavaField nonEnumConstantField = mock(JavaField.class);
+        when ( nonEnumConstantField.getName() ).thenReturn( "nonEnumField" );
+        fields.add( nonEnumConstantField );
+        setFields( cls, fields );
+        assertEquals( null, cls.getEnumConstantByName( "nonEnumField" ) );
+        
+        JavaField enumConstantField = mock(JavaField.class);
+        when ( enumConstantField.isEnumConstant() ).thenReturn( true );
+        when ( enumConstantField.getName() ).thenReturn( "enumField" );
+        fields.add( enumConstantField );
+        setFields( cls, fields );
+        assertEquals( enumConstantField, cls.getEnumConstantByName( "enumField" ) );
+    }
+    
 
     public void testCanGetFieldByName() throws Exception {
         JavaField fredField = mock(JavaField.class);


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to