[dna-commits] DNA SVN: r368 - trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Wed Jul 23 13:17:40 EDT 2008


Author: spagop
Date: 2008-07-23 13:17:39 -0400 (Wed, 23 Jul 2008)
New Revision: 368

Modified:
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
Log:
enhancement for the JavaMetadata "minimal fields and methods member of type"; "constructor of class"

Modified: trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
===================================================================
--- trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java	2008-07-23 17:17:17 UTC (rev 367)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java	2008-07-23 17:17:39 UTC (rev 368)
@@ -28,23 +28,39 @@
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.EnumDeclaration;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.MarkerAnnotation;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.NormalAnnotation;
 import org.eclipse.jdt.core.dom.PackageDeclaration;
+import org.eclipse.jdt.core.dom.ParameterizedType;
+import org.eclipse.jdt.core.dom.PrimitiveType;
+import org.eclipse.jdt.core.dom.QualifiedType;
+import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
+import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.jboss.dna.sequencer.java.metadata.ClassMetadata;
+import org.jboss.dna.sequencer.java.metadata.ConstructorMetadata;
+import org.jboss.dna.sequencer.java.metadata.FieldMetadata;
 import org.jboss.dna.sequencer.java.metadata.ImportMetadata;
 import org.jboss.dna.sequencer.java.metadata.ImportOnDemandMetadata;
 import org.jboss.dna.sequencer.java.metadata.InterfaceMetadata;
 import org.jboss.dna.sequencer.java.metadata.MarkerAnnotationMetadata;
+import org.jboss.dna.sequencer.java.metadata.MethodMetadata;
+import org.jboss.dna.sequencer.java.metadata.MethodTypeMemberMetadata;
 import org.jboss.dna.sequencer.java.metadata.NormalAnnotationMetadata;
 import org.jboss.dna.sequencer.java.metadata.PackageMetadata;
+import org.jboss.dna.sequencer.java.metadata.ParameterizedFieldMetadata;
+import org.jboss.dna.sequencer.java.metadata.PrimitiveFieldMetadata;
+import org.jboss.dna.sequencer.java.metadata.SimpleFieldMetadata;
 import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
 import org.jboss.dna.sequencer.java.metadata.SingleMemberAnnotationMetadata;
 import org.jboss.dna.sequencer.java.metadata.TypeMetadata;
+import org.jboss.dna.sequencer.java.metadata.Variable;
 
 /**
  * Abstract definition of a <tt>JavaMetadata<tt>. This class exposes some useful methods, that can
@@ -140,12 +156,10 @@
         List<TypeMetadata> metadata = new ArrayList<TypeMetadata>();
         List<AbstractTypeDeclaration> topLevelType = unit.types();
         for (AbstractTypeDeclaration abstractTypeDeclaration : topLevelType) {
-
             // process TypeDeclaration (class, interface)
             if (abstractTypeDeclaration instanceof TypeDeclaration) {
                 TypeDeclaration typeDeclaration = (TypeDeclaration)abstractTypeDeclaration;
                 if (typeDeclaration.isInterface()) {
-
                     // is an interface top level type
                     InterfaceMetadata interfaceMetadata = new InterfaceMetadata();
                     interfaceMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
@@ -166,9 +180,21 @@
                             MarkerAnnotation marker = (MarkerAnnotation)object;
                             MarkerAnnotationMetadata markerAnnotationMetadata = new MarkerAnnotationMetadata();
                             markerAnnotationMetadata.setName(JavaMetadataUtil.getName(marker.getTypeName()));
-                            classMetadata.getAnnotationMetadata().add(markerAnnotationMetadata);
+                            classMetadata.getAnnotations().add(markerAnnotationMetadata);
                         }
                     }
+                    // fields of the class top level type
+                    FieldDeclaration[] fieldDeclarations = typeDeclaration.getFields();
+                    for (FieldDeclaration fieldDeclaration : fieldDeclarations) {
+                        FieldMetadata fieldMetadata = getFieldMetadataFrom(fieldDeclaration);
+                        classMetadata.getFields().add(fieldMetadata);
+                    }
+                    // methods of the class top level type
+                    MethodDeclaration[] methodDeclarations = typeDeclaration.getMethods();
+                    for (MethodDeclaration methodDeclaration : methodDeclarations) {
+                        MethodMetadata methodMetadata = getFieldMetadataFrom(methodDeclaration);
+                        classMetadata.getMethods().add(methodMetadata);
+                    }
                     metadata.add(classMetadata);
                 }
             }
@@ -187,4 +213,113 @@
         }
         return metadata;
     }
+
+    /**
+     * Gets a method meta data from {@link MethodDeclaration}.
+     * 
+     * @param methodDeclaration - the MethodDeclaration.
+     * @return methodMetadata - the method meta data.
+     */
+    private MethodMetadata getFieldMetadataFrom( MethodDeclaration methodDeclaration ) {
+        if (methodDeclaration != null) {
+            if (methodDeclaration.isConstructor()) {
+                return getConstructorMetadataFrom(methodDeclaration);
+            }
+            return getMethodTypeMemberMetadataFrom(methodDeclaration);
+
+        }
+        return null;
+    }
+
+    /**
+     * Get {@link MethodTypeMemberMetadata}
+     * 
+     * @param methodDeclaration
+     * @return methodTypeMemberMetadata
+     */
+    private MethodMetadata getMethodTypeMemberMetadataFrom( MethodDeclaration methodDeclaration ) {
+        MethodTypeMemberMetadata methodTypeMemberMetadata = new MethodTypeMemberMetadata();
+        methodTypeMemberMetadata.setName(JavaMetadataUtil.getName(methodDeclaration.getName()));
+        return methodTypeMemberMetadata;
+    }
+
+    /**
+     * Get {@link ConstructorMetadata}
+     * 
+     * @param methodDeclaration
+     * @return constructorMetadata
+     */
+    private MethodMetadata getConstructorMetadataFrom( MethodDeclaration methodDeclaration ) {
+        ConstructorMetadata constructorMetadata = new ConstructorMetadata();
+        constructorMetadata.setName(JavaMetadataUtil.getName(methodDeclaration.getName()));
+        return constructorMetadata;
+    }
+
+    /**
+     * Gets a field meta data from {@link FieldDeclaration}.
+     * 
+     * @param fieldDeclaration - the declaration.
+     * @return fieldMetadata - meta data.
+     */
+    @SuppressWarnings( "unchecked" )
+    private FieldMetadata getFieldMetadataFrom( FieldDeclaration fieldDeclaration ) {
+        if (fieldDeclaration != null && fieldDeclaration.getType() != null && (!fieldDeclaration.fragments().isEmpty())) {
+            List<VariableDeclarationFragment> fragments = null;
+            // type
+            Type type = fieldDeclaration.getType();
+            // Primitive type
+            if (type instanceof PrimitiveType) {
+                PrimitiveType primitiveType = (PrimitiveType)type;
+                PrimitiveFieldMetadata primitiveFieldMetadata = new PrimitiveFieldMetadata();
+                primitiveFieldMetadata.setCode(primitiveType.getPrimitiveTypeCode().toString());
+                // variables
+                fragments = fieldDeclaration.fragments();
+                getAllVariablesOf(fragments, primitiveFieldMetadata);
+                return primitiveFieldMetadata;
+            }
+            if (type instanceof ParameterizedType) {
+                ParameterizedType parameterizedType = (ParameterizedType)type;
+                ParameterizedFieldMetadata parameterizedFieldMetadata = new ParameterizedFieldMetadata();
+                Type typeOfParameterizedType = parameterizedType.getType(); // type may be a simple type or a qualified type.
+                if (typeOfParameterizedType instanceof SimpleType) {
+                    SimpleType simpleType = (SimpleType)typeOfParameterizedType;
+                    parameterizedFieldMetadata.setName(JavaMetadataUtil.getName(simpleType.getName()));
+                }
+                if (typeOfParameterizedType instanceof QualifiedType) {
+                    QualifiedType qualifiedType = (QualifiedType)typeOfParameterizedType;
+                    parameterizedFieldMetadata.setName(JavaMetadataUtil.getName(qualifiedType.getName()));
+                    Type qualifier = qualifiedType.getQualifier();
+                    if (qualifier instanceof ParameterizedType) {
+                        // TODO
+                    }
+                }
+                // variables
+                fragments = fieldDeclaration.fragments();
+                getAllVariablesOf(fragments, parameterizedFieldMetadata);
+                return parameterizedFieldMetadata;
+            }
+            if (type instanceof SimpleType) {
+                SimpleType simpleType = (SimpleType)type;
+                SimpleFieldMetadata simpleFieldMetadata = new SimpleFieldMetadata();
+                simpleFieldMetadata.setName(JavaMetadataUtil.getName(simpleType.getName()));
+                fragments = fieldDeclaration.fragments();
+                getAllVariablesOf(fragments, simpleFieldMetadata);
+                return simpleFieldMetadata;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Get all variables of a fragment.
+     * 
+     * @param fragments
+     * @param fieldMetadata
+     */
+    private void getAllVariablesOf( List<VariableDeclarationFragment> fragments,
+                                    FieldMetadata fieldMetadata ) {
+        for (VariableDeclarationFragment fragment : fragments) {
+            fieldMetadata.getVariables().add(new Variable(JavaMetadataUtil.getName(fragment.getName())));
+        }
+    }
 }




More information about the dna-commits mailing list