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())));
}