[dna-commits] DNA SVN: r408 - 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
Sun Aug 10 14:38:49 EDT 2008


Author: spagop
Date: 2008-08-10 14:38:48 -0400 (Sun, 10 Aug 2008)
New Revision: 408

Modified:
   trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java
Log:
enhance abstract meta data to support modifiers, return type and parameters of methods and more

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-08-09 15:43:34 UTC (rev 407)
+++ trunk/sequencers/dna-sequencer-java/src/main/java/org/jboss/dna/sequencer/java/AbstractJavaMetadata.java	2008-08-10 18:38:48 UTC (rev 408)
@@ -29,6 +29,7 @@
 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.IExtendedModifier;
 import org.eclipse.jdt.core.dom.ImportDeclaration;
 import org.eclipse.jdt.core.dom.MarkerAnnotation;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
@@ -37,9 +38,9 @@
 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.SingleVariableDeclaration;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
@@ -52,10 +53,12 @@
 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.ModifierMetadata;
 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.ReturnType;
 import org.jboss.dna.sequencer.java.metadata.SimpleFieldMetadata;
 import org.jboss.dna.sequencer.java.metadata.SingleImportMetadata;
 import org.jboss.dna.sequencer.java.metadata.SingleMemberAnnotationMetadata;
@@ -168,22 +171,8 @@
                 } else {
                     // is a class top level type
                     ClassMetadata classMetadata = new ClassMetadata();
+                    processModifiersOfTypDeclaration(typeDeclaration, classMetadata);
                     classMetadata.setName(JavaMetadataUtil.getName(typeDeclaration.getName()));
-                    List modifiers = typeDeclaration.modifiers();
-                    for (Object object : modifiers) {
-                        if (object instanceof Modifier) {
-                            Modifier modifier = (Modifier)object;
-                            if (modifier.isPublic()) {
-                                classMetadata.getModifiers().put(TypeMetadata.PUBLIC_MODIFIER, modifier.getKeyword().toString());
-                            }
-                        }
-                        if (object instanceof MarkerAnnotation) {
-                            MarkerAnnotation marker = (MarkerAnnotation)object;
-                            MarkerAnnotationMetadata markerAnnotationMetadata = new MarkerAnnotationMetadata();
-                            markerAnnotationMetadata.setName(JavaMetadataUtil.getName(marker.getTypeName()));
-                            classMetadata.getAnnotations().add(markerAnnotationMetadata);
-                        }
-                    }
                     // fields of the class top level type
                     FieldDeclaration[] fieldDeclarations = typeDeclaration.getFields();
                     for (FieldDeclaration fieldDeclaration : fieldDeclarations) {
@@ -216,6 +205,33 @@
     }
 
     /**
+     * @param typeDeclaration
+     * @param classMetadata
+     */
+    @SuppressWarnings( "unchecked" )
+    private void processModifiersOfTypDeclaration( TypeDeclaration typeDeclaration,
+                                                   ClassMetadata classMetadata ) {
+        List<IExtendedModifier> modifiers = typeDeclaration.modifiers();
+
+        for (IExtendedModifier extendedModifier : modifiers) {
+            ModifierMetadata modifierMetadata = new ModifierMetadata();
+            if (extendedModifier.isAnnotation()) {
+                if (extendedModifier instanceof MarkerAnnotation) {
+                    MarkerAnnotation marker = (MarkerAnnotation)extendedModifier;
+                    MarkerAnnotationMetadata markerAnnotationMetadata = new MarkerAnnotationMetadata();
+                    markerAnnotationMetadata.setName(JavaMetadataUtil.getName(marker.getTypeName()));
+                    classMetadata.getAnnotations().add(markerAnnotationMetadata);
+                }
+            } else {
+
+                Modifier modifier = (Modifier)extendedModifier;
+                modifierMetadata.setName(modifier.getKeyword().toString());
+                classMetadata.getModifiers().add(modifierMetadata);
+            }
+        }
+    }
+
+    /**
      * Gets a method meta data from {@link MethodDeclaration}.
      * 
      * @param methodDeclaration - the MethodDeclaration.
@@ -238,13 +254,106 @@
      * @param methodDeclaration
      * @return methodTypeMemberMetadata
      */
+    @SuppressWarnings( "unchecked" )
     private MethodMetadata getMethodTypeMemberMetadataFrom( MethodDeclaration methodDeclaration ) {
         MethodTypeMemberMetadata methodTypeMemberMetadata = new MethodTypeMemberMetadata();
+        processReturnTypeOfMethodDeclaration(methodDeclaration, methodTypeMemberMetadata);
+        processModifiersOfMethodDeclaration(methodDeclaration, methodTypeMemberMetadata);
+        processParametersOfMethodDeclaration(methodDeclaration, methodTypeMemberMetadata);
         methodTypeMemberMetadata.setName(JavaMetadataUtil.getName(methodDeclaration.getName()));
+        List<SingleVariableDeclaration> params = methodDeclaration.parameters();
+        for (SingleVariableDeclaration singleVariableDeclaration : params) {
+            singleVariableDeclaration.getName();
+        }
         return methodTypeMemberMetadata;
     }
 
     /**
+     * @param methodDeclaration
+     * @param methodMetadata
+     */
+    private void processReturnTypeOfMethodDeclaration( MethodDeclaration methodDeclaration,
+                                                       MethodMetadata methodMetadata ) {
+        Type type = methodDeclaration.getReturnType2();
+        ReturnType returnType = null;
+        if(type.isPrimitiveType()) {
+            returnType = new ReturnType();
+            returnType.setName(((PrimitiveType)type).getPrimitiveTypeCode().toString());
+            methodMetadata.setReturnType(returnType);
+        }
+        if(type.isSimpleType()) {
+            returnType = new ReturnType();
+            returnType.setName(JavaMetadataUtil.getName(((SimpleType)type).getName()));
+            methodMetadata.setReturnType(returnType);
+        }
+    }
+
+    /**
+     * @param methodDeclaration
+     * @param methodMetadata
+     */
+    @SuppressWarnings( "unchecked" )
+    private void processParametersOfMethodDeclaration( MethodDeclaration methodDeclaration,
+                                                       MethodMetadata methodMetadata ) {
+        List<SingleVariableDeclaration> params = methodDeclaration.parameters();
+        for (SingleVariableDeclaration singleVariableDeclaration : params) {
+            Type type = singleVariableDeclaration.getType();
+            if (type.isPrimitiveType()) {
+                PrimitiveFieldMetadata primitiveFieldMetadata = new PrimitiveFieldMetadata();
+                primitiveFieldMetadata.setType(((PrimitiveType)type).getPrimitiveTypeCode().toString());
+                Variable variable = new Variable();
+                variable.setName(JavaMetadataUtil.getName(singleVariableDeclaration.getName()));
+                primitiveFieldMetadata.getVariables().add(variable);
+                List<IExtendedModifier> extendedModifiers = singleVariableDeclaration.modifiers();
+                for (IExtendedModifier extendedModifier : extendedModifiers) {
+                    ModifierMetadata modifierMetadata = new ModifierMetadata();
+                    if (extendedModifier.isAnnotation()) {
+                        // TODO
+                    } else {
+                        Modifier modifier = (Modifier)extendedModifier;
+                        modifierMetadata.setName(modifier.getKeyword().toString());
+                        primitiveFieldMetadata.getModifiers().add(modifierMetadata);
+                    }
+                }
+                methodMetadata.getParameters().add(primitiveFieldMetadata);
+            }
+            if (type.isParameterizedType()) {
+                // TODO
+            }
+            if (type.isQualifiedType()) {
+
+            }
+            if (type.isSimpleType()) {
+                SimpleType simpleType = (SimpleType)type;
+                SimpleFieldMetadata simpleFieldMetadata = new SimpleFieldMetadata();
+                simpleFieldMetadata.setType(JavaMetadataUtil.getName(simpleType.getName()));
+                Variable variable = new Variable();
+                variable.setName(JavaMetadataUtil.getName(singleVariableDeclaration.getName()));
+                simpleFieldMetadata.getVariables().add(variable);
+                List<IExtendedModifier> extendedModifiers = singleVariableDeclaration.modifiers();
+                for (IExtendedModifier extendedModifier2 : extendedModifiers) {
+                    ModifierMetadata modifierMetadata = new ModifierMetadata();
+                    if (extendedModifier2.isAnnotation()) {
+                        // TODO
+                    } else {
+                        Modifier modifier = (Modifier)extendedModifier2;
+                        modifierMetadata.setName(modifier.getKeyword().toString());
+                        simpleFieldMetadata.getModifiers().add(modifierMetadata);
+                    }
+                }
+                methodMetadata.getParameters().add(simpleFieldMetadata);
+            }
+            if (type.isArrayType()) {
+                // TODO
+            }
+            if (type.isWildcardType()) {
+                // TODO
+            }
+        }
+
+    }
+
+    /**
      * Get {@link ConstructorMetadata}
      * 
      * @param methodDeclaration
@@ -252,7 +361,11 @@
      */
     private MethodMetadata getConstructorMetadataFrom( MethodDeclaration methodDeclaration ) {
         ConstructorMetadata constructorMetadata = new ConstructorMetadata();
+        // modifiers
+        processModifiersOfMethodDeclaration(methodDeclaration, constructorMetadata);
+        processParametersOfMethodDeclaration(methodDeclaration, constructorMetadata);
         constructorMetadata.setName(JavaMetadataUtil.getName(methodDeclaration.getName()));
+        // arguments list
         return constructorMetadata;
     }
 
@@ -265,60 +378,162 @@
     @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);
+            if (type.isPrimitiveType()) {
+                PrimitiveFieldMetadata primitiveFieldMetadata = processPrimitiveType(fieldDeclaration, type);
                 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;
+            // ParameterizedType
+            if (type.isParameterizedType()) {
+                ParameterizedFieldMetadata referenceFieldMetadata = processParameterizedType(fieldDeclaration, type);
+                return referenceFieldMetadata;
             }
-            if (type instanceof SimpleType) {
-                SimpleType simpleType = (SimpleType)type;
-                SimpleFieldMetadata simpleFieldMetadata = new SimpleFieldMetadata();
-                simpleFieldMetadata.setName(JavaMetadataUtil.getName(simpleType.getName()));
-                fragments = fieldDeclaration.fragments();
-                getAllVariablesOf(fragments, simpleFieldMetadata);
+            // SimpleType
+            if (type.isSimpleType()) {
+                SimpleFieldMetadata simpleFieldMetadata = processSimpleType(fieldDeclaration, type);
                 return simpleFieldMetadata;
             }
+            // ArrayType
+            if (type.isArrayType()) {
+                // TODO
+            }
+            // QualifiedType
+            if (type.isQualifiedType()) {
+                // TODO
+
+            }
+            // WildcardType
+            if (type.isWildcardType()) {
+
+            }
         }
         return null;
     }
 
     /**
-     * Get all variables of a fragment.
+     * @param fieldDeclaration
+     * @param type
+     * @return SimpleFieldMetadata
+     */
+    private SimpleFieldMetadata processSimpleType( FieldDeclaration fieldDeclaration,
+                                                   Type type ) {
+        SimpleType simpleType = (SimpleType)type;
+        SimpleFieldMetadata simpleFieldMetadata = new SimpleFieldMetadata();
+        simpleFieldMetadata.setType(JavaMetadataUtil.getName(simpleType.getName()));
+        // modifiers
+        processModifiersOfFieldDeclaration(fieldDeclaration, simpleFieldMetadata);
+        processVariablesOfVariableDeclarationFragment(fieldDeclaration, simpleFieldMetadata);
+        return simpleFieldMetadata;
+    }
+
+    /**
+     * @param fieldDeclaration
+     * @param type
+     * @return ParameterizedFieldMetadata
+     */
+    private ParameterizedFieldMetadata processParameterizedType( FieldDeclaration fieldDeclaration,
+                                                                 Type type ) {
+        ParameterizedType parameterizedType = (ParameterizedType)type;
+        Type typeOfParameterizedType = parameterizedType.getType(); // type may be a simple type or a qualified type.
+        ParameterizedFieldMetadata referenceFieldMetadata = (ParameterizedFieldMetadata)createParameterizedFieldMetadataFrom(typeOfParameterizedType);
+        // modifiers
+        processModifiersOfFieldDeclaration(fieldDeclaration, referenceFieldMetadata);
+        // variables
+        processVariablesOfVariableDeclarationFragment(fieldDeclaration, referenceFieldMetadata);
+        return referenceFieldMetadata;
+    }
+
+    /**
+     * @param fieldDeclaration
+     * @param type
+     * @return PrimitiveFieldMetadata
+     */
+    private PrimitiveFieldMetadata processPrimitiveType( FieldDeclaration fieldDeclaration,
+                                                         Type type ) {
+        PrimitiveType primitiveType = (PrimitiveType)type;
+        PrimitiveFieldMetadata primitiveFieldMetadata = new PrimitiveFieldMetadata();
+        primitiveFieldMetadata.setType(primitiveType.getPrimitiveTypeCode().toString());
+        // modifiers
+        processModifiersOfFieldDeclaration(fieldDeclaration, primitiveFieldMetadata);
+        // variables
+        processVariablesOfVariableDeclarationFragment(fieldDeclaration, primitiveFieldMetadata);
+        return primitiveFieldMetadata;
+    }
+
+    /**
+     * Process modifiers of a {@link FieldDeclaration}
      * 
-     * @param fragments
+     * @param fieldDeclaration
      * @param fieldMetadata
      */
-    private void getAllVariablesOf( List<VariableDeclarationFragment> fragments,
-                                    FieldMetadata fieldMetadata ) {
+    @SuppressWarnings( "unchecked" )
+    protected void processModifiersOfFieldDeclaration( FieldDeclaration fieldDeclaration,
+                                                       FieldMetadata fieldMetadata ) {
+        List<IExtendedModifier> extendedModifiers = fieldDeclaration.modifiers();
+        for (IExtendedModifier extendedModifier : extendedModifiers) {
+            ModifierMetadata modifierMetadata = new ModifierMetadata();
+            if (extendedModifier.isAnnotation()) {
+                // TODO annotation modifiers
+            } else {
+                Modifier modifier = (Modifier)extendedModifier;
+                modifierMetadata.setName(modifier.getKeyword().toString());
+                fieldMetadata.getModifiers().add(modifierMetadata);
+            }
+        }
+
+    }
+
+    /**
+     * Process modifiers of a {@link MethodDeclaration}.
+     * 
+     * @param methodDeclaration
+     * @param methodMetadata
+     */
+    @SuppressWarnings( "unchecked" )
+    private void processModifiersOfMethodDeclaration( MethodDeclaration methodDeclaration,
+                                                      MethodMetadata methodMetadata ) {
+        List<IExtendedModifier> extendedModifiers = methodDeclaration.modifiers();
+        for (IExtendedModifier extendedModifier : extendedModifiers) {
+            ModifierMetadata modifierMetadata = new ModifierMetadata();
+            if (extendedModifier.isAnnotation()) {
+                // TODO
+            } else {
+                Modifier modifier = (Modifier)extendedModifier;
+                modifierMetadata.setName(modifier.getKeyword().toString());
+                methodMetadata.getModifiers().add(modifierMetadata);
+            }
+        }
+    }
+
+    /**
+     * Create a <code>FieldMetadata</code> from a {@link Type} instance.
+     * 
+     * @param type - The {@link Type}
+     * @return the specific type of <code>FieldMetadata</code>
+     */
+    protected FieldMetadata createParameterizedFieldMetadataFrom( Type type ) {
+        ParameterizedFieldMetadata parameterizedFieldMetadata = null;
+        if (type.isSimpleType()) {
+            SimpleType simpleType = (SimpleType)type;
+            parameterizedFieldMetadata = new ParameterizedFieldMetadata();
+            parameterizedFieldMetadata.setType(JavaMetadataUtil.getName(simpleType.getName()));
+        }
+        // TODO also process QualifiedType
+        return parameterizedFieldMetadata;
+    }
+
+    /**
+     * Process variables of a {@link VariableDeclarationFragment}.
+     * 
+     * @param fieldDeclaration - the {@link FieldDeclaration}
+     * @param fieldMetadata - where to transfer the meta data.
+     */
+    @SuppressWarnings( "unchecked" )
+    protected void processVariablesOfVariableDeclarationFragment( FieldDeclaration fieldDeclaration,
+                                                                  FieldMetadata fieldMetadata ) {
+        List<VariableDeclarationFragment> fragments = fieldDeclaration.fragments();
         for (VariableDeclarationFragment fragment : fragments) {
             fieldMetadata.getVariables().add(new Variable(JavaMetadataUtil.getName(fragment.getName())));
         }




More information about the dna-commits mailing list