Author: alexsmirnov
Date: 2010-07-28 19:36:46 -0400 (Wed, 28 Jul 2010)
New Revision: 18270
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ReflectionUtils.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
Log:
https://jira.jboss.org/browse/RF-8975
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java 2010-07-28
23:02:49 UTC (rev 18269)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java 2010-07-28
23:36:46 UTC (rev 18270)
@@ -11,6 +11,7 @@
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
@@ -215,6 +216,49 @@
return this.processingEnv.getElementUtils().getDocComment(componentElement);
}
+ @Override
+ public AnnotationMirror getAnnotationMirror(Element element, Class<? extends
Annotation> annotationType) {
+ List<? extends AnnotationMirror> annotationMirrors =
+ processingEnv.getElementUtils().getAllAnnotationMirrors(element);
+ TypeMirror annotationTypeMirror =
+
processingEnv.getElementUtils().getTypeElement(annotationType.getName()).asType();
+ for (AnnotationMirror annotationMirror : annotationMirrors) {
+ if (processingEnv.getTypeUtils().isSameType(annotationTypeMirror,
annotationMirror.getAnnotationType())) {
+ return annotationMirror;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isAnnotationPresent(Element element, Class<? extends Annotation>
annotationType) {
+ return null != element.getAnnotation(annotationType);
+ }
+
+ @Override
+ public <T> T getAnnotationValue(AnnotationMirror annotation, String
propertyName, Class<T> expectedType) {
+ Map<? extends ExecutableElement, ? extends AnnotationValue> elements =
processingEnv.getElementUtils().getElementValuesWithDefaults(annotation);
+ for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue>
attributeEntry : elements.entrySet()) {
+ if(attributeEntry.getKey().getSimpleName().toString().equals(propertyName)){
+ AnnotationValue annotationValue = attributeEntry.getValue();
+ if(Enum.class.isAssignableFrom(expectedType)){
+ VariableElement variable = (VariableElement)
annotationValue.getValue();
+ Object constantValue = variable.getConstantValue();
+ // TODO - properly convert into enum value.
+ return (T) Enum.valueOf((Class<? extends Enum>) expectedType,
(String)constantValue);
+ }
+ return (T) annotationValue.getValue();
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public <T> List<T> getAnnotationValues(AnnotationMirror annotation,
String propertyName, Class<T> expectedType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
public Object getConstant(TypeElement componentElement, String name) {
List<VariableElement> fieldsIn =
ElementFilter.fieldsIn(this.processingEnv.getElementUtils().getAllMembers(componentElement));
@@ -362,8 +406,8 @@
return exists;
}
- public List<? extends AnnotationMirror> getAnnotationMirrors() {
- return element.getAnnotationMirrors();
+ public AnnotationMirror getAnnotationMirror(Class<? extends Annotation>
annotationType) {
+ return AptSourceUtils.this.getAnnotationMirror(element, annotationType);
}
public <T extends Annotation> T getAnnotation(Class<T>
annotationType) {
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ReflectionUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ReflectionUtils.java 2010-07-28
23:02:49 UTC (rev 18269)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ReflectionUtils.java 2010-07-28
23:36:46 UTC (rev 18270)
@@ -24,8 +24,10 @@
package org.richfaces.cdk.apt;
import java.lang.annotation.Annotation;
+import java.util.List;
import java.util.Set;
+import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
@@ -82,5 +84,29 @@
}
+ @Override
+ public AnnotationMirror getAnnotationMirror(Element element, Class<? extends
Annotation> annotationType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public boolean isAnnotationPresent(Element element, Class<? extends Annotation>
annotationType) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public <T> T getAnnotationValue(AnnotationMirror annotation, String
propertyName, Class<T> expectedType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T> List<T> getAnnotationValues(AnnotationMirror annotation,
String propertyName, Class<T> expectedType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2010-07-28
23:02:49 UTC (rev 18269)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2010-07-28
23:36:46 UTC (rev 18270)
@@ -37,118 +37,176 @@
import com.google.inject.ProvidedBy;
/**
- * <p class="changed_added_4_0">This class provides utility methods to
analayze java classes. This implementation uses APT API to get
- * information about Java code.</p>
+ * <p class="changed_added_4_0">
+ * This class provides utility methods to analayze java classes. This implementation uses
APT API to get information
+ * about Java code.
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
@ProvidedBy(SourceUtilsProvider.class)
-public interface SourceUtils {
-
-
+public interface SourceUtils {
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
public interface SuperTypeVisitor {
- public void visit(TypeMirror type);
+ void visit(TypeMirror type);
}
-
/**
* <p class="changed_added_4_0">
* </p>
- *
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
public interface BeanProperty {
-
+
/**
* <p class="changed_added_4_0">
* </p>
- *
+ *
* @return the name
*/
- public String getName();
-
+ String getName();
+
/**
- * <p class="changed_added_4_0">Get JavaDoc comment of
appropriate bean property element.</p>
+ * <p class="changed_added_4_0">
+ * Get JavaDoc comment of appropriate bean property element.
+ * </p>
+ *
* @return
*/
- public String getDocComment();
-
- public ClassName getType();
-
+ String getDocComment();
+
+ ClassName getType();
+
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @return the exists
*/
- public boolean isExists();
+ boolean isExists();
- public List<? extends AnnotationMirror> getAnnotationMirrors();
+ AnnotationMirror getAnnotationMirror(Class<? extends Annotation>
annotationType);
- public <T extends Annotation> T getAnnotation(Class<T>
annotationType);
+ <T extends Annotation> T getAnnotation(Class<T> annotationType);
}
-
/**
* <p class="changed_added_4_0">
- * Get all fields and bean properties that are annotated with given
- * annotation.
+ * Get all fields and bean properties that are annotated with given annotation.
* </p>
- *
+ *
* @param annotation
* @param type
* @return
*/
- public Set<BeanProperty> getBeanPropertiesAnnotatedWith(Class<? extends
Annotation> annotation,
- TypeElement type);
+ Set<BeanProperty> getBeanPropertiesAnnotatedWith(Class<? extends
Annotation> annotation, TypeElement type);
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @param type
* @return
*/
- public Set<BeanProperty> getAbstractBeanProperties(TypeElement type);
+ Set<BeanProperty> getAbstractBeanProperties(TypeElement type);
/**
- * <p class="changed_added_4_0">Get JavaDoc comments associated with
given element.</p>
+ * <p class="changed_added_4_0">
+ * Get JavaDoc comments associated with given element.
+ * </p>
+ *
* @param componentElement
* @return
*/
- public String getDocComment(Element element);
+ String getDocComment(Element element);
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * Check model element for presense of annotation.
+ * </p>
+ *
+ * @param element
+ * @param annotationType
+ * @return
+ */
+ boolean isAnnotationPresent(Element element, Class<? extends Annotation>
annotationType);
+
+ /**
+ * <p class="changed_added_4_0">
+ * Get model representation of the annotation for given model element
+ * </p>
+ *
+ * @param annotationType
+ * @return
+ */
+ AnnotationMirror getAnnotationMirror(Element element, Class<? extends
Annotation> annotationType);
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @param annotation
+ * @param propertyName
+ * @return
+ */
+ <T> T getAnnotationValue(AnnotationMirror annotation, String propertyName,
Class<T> expectedType);
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @param annotation
+ * @param propertyName
+ * @return
+ */
+ <T> List<T> getAnnotationValues(AnnotationMirror annotation, String
propertyName, Class<T> expectedType);
+
+ /**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @param componentElement
* @param name
* @return
*/
- public Object getConstant(TypeElement element, String name);
-
-
+ Object getConstant(TypeElement element, String name);
+
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @param type
* @param visitor
*/
- public void visitSupertypes(TypeElement type, SuperTypeVisitor visitor);
+ void visitSupertypes(TypeElement type, SuperTypeVisitor visitor);
/**
- * <p class="changed_added_4_0">Converts TypeMirror into
corresponding TypeElement</p>
+ * <p class="changed_added_4_0">
+ * Converts TypeMirror into corresponding TypeElement
+ * </p>
+ *
* @param mirror
* @return
*/
- public TypeElement asTypeElement(TypeMirror mirror);
+ TypeElement asTypeElement(TypeMirror mirror);
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">
+ * </p>
+ *
* @param type
* @return
*/
- public TypeElement asTypeElement(ClassName type);
-
+ TypeElement asTypeElement(ClassName type);
+
}