Author: alexsmirnov
Date: 2010-12-29 21:34:42 -0500 (Wed, 29 Dec 2010)
New Revision: 20844
Modified:
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessorImpl.java
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/model/PropertyBase.java
Log:
OPEN - issue RF-9323: CDK annotation @RendererSpecificComponent.attributes doesn't
work
https://issues.jboss.org/browse/RF-9323
Modified:
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java
===================================================================
---
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java 2010-12-29
22:21:20 UTC (rev 20843)
+++
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/AptSourceUtils.java 2010-12-30
02:34:42 UTC (rev 20844)
@@ -154,11 +154,11 @@
ExecutableElement method, boolean setter) {
String propertyName = getPropertyName(method);
if (!HIDDEN_PROPERTIES.contains(propertyName)) {
- ClassName propertyType = asClassDescription(method.getReturnType());
+ ClassName propertyType =
asClassDescription(setter?method.getParameters().get(0).asType():method.getReturnType());
if (result.containsKey(propertyName)) {
// Merge property with existed one.
AptBeanProperty beanProperty = result.get(propertyName);
- if (null != beanProperty.getter) {
+ if (null != (setter?beanProperty.setter:beanProperty.getter)) {
log.warn("Two " + (setter ? "setter" :
"getter") + " methods for the same bean property "
+ propertyName + " in the class " +
type.getQualifiedName());
}
Modified:
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessorImpl.java
===================================================================
---
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessorImpl.java 2010-12-29
22:21:20 UTC (rev 20843)
+++
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessorImpl.java 2010-12-30
02:34:42 UTC (rev 20844)
@@ -38,6 +38,7 @@
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic.Kind;
+import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkProcessingException;
import org.richfaces.cdk.LibraryBuilder;
import org.richfaces.cdk.Logger;
@@ -96,52 +97,65 @@
for (CdkAnnotationProcessor process : processors) {
processAnnotation(process, roundEnv);
}
- } else {
+ } else {
// parse non-java sources
processNonJavaSources();
+ verify();
+ if (0 == log.getErrorCount()) {
+ generate();
+ }
}
return false;
}
- /* (non-Javadoc)
+ private void generate() {
+ log.debug("Generate output files");
+ builder.generate(library);
+ }
+
+ private void verify() {
+ try {
+ log.debug("Validate model");
+ validator.verify(library);
+
+ } catch (CdkException e) {
+ sendError(e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
* @see org.richfaces.cdk.apt.CdkProcessor#processNonJavaSources()
*/
public void processNonJavaSources() {
for (ModelBuilder builder : builders) {
- log.debug("Run builder "+builder.getClass().getName());
- builder.build();
+ log.debug("Run builder " + builder.getClass().getName());
+ try {
+ builder.build();
+
+ } catch (CdkException e) {
+ sendError(e);
+ }
}
- // validator should be called even if previvous phases finish with errors, to
collect all possible problems.
- log.debug("Validate model");
- validator.verify(library);
- if(0 == log.getErrorCount()) {
- // processing over, generate files.
- log.debug("Generate output files");
- builder.generate(library);
- }
}
protected void processAnnotation(CdkAnnotationProcessor processor, RoundEnvironment
environment) {
Class<? extends Annotation> processedAnnotation =
processor.getProcessedAnnotation();
- log.debug("Process all elements annotated with
"+processedAnnotation.getName());
+ log.debug("Process all elements annotated with " +
processedAnnotation.getName());
Target target = processedAnnotation.getAnnotation(Target.class);
- try {
- Set<? extends Element> rootElements = environment.getRootElements();
- for (Element element : rootElements) {
- if (isAppropriateTarget(element, target)){
- processElement(processor, processedAnnotation, element);
- } else {
- for (Element enclosedElement : element.getEnclosedElements()) {
- if (isAppropriateTarget(enclosedElement, target)){
- processElement(processor, processedAnnotation,
enclosedElement);
- }
+ Set<? extends Element> rootElements = environment.getRootElements();
+ for (Element element : rootElements) {
+ if (isAppropriateTarget(element, target)) {
+ processElement(processor, processedAnnotation, element);
+ } else {
+ for (Element enclosedElement : element.getEnclosedElements()) {
+ if (isAppropriateTarget(enclosedElement, target)) {
+ processElement(processor, processedAnnotation, enclosedElement);
}
}
}
- } catch (Exception e) {
- processingEnv.getMessager().printMessage(Kind.ERROR,
- "Errorr processing annotation " + processedAnnotation + ":
" + e);
}
}
@@ -149,22 +163,23 @@
Element element) {
if (null != element.getAnnotation(processedAnnotation)) {
try {
- log.debug("Process "+element.getSimpleName()+" annotated
with "+processedAnnotation.getName());
+ log.debug("Process " + element.getSimpleName() + "
annotated with " + processedAnnotation.getName());
processor.process(element, library);
} catch (CdkProcessingException e) {
sendError(element, e);
}
}
}
-
- private boolean isAppropriateTarget(Element element,Target target){
+
+ private boolean isAppropriateTarget(Element element, Target target) {
boolean match = false;
ElementKind kind = element.getKind();
- if(null != target){
- for(ElementType targetType : target.value()){
+ if (null != target) {
+ for (ElementType targetType : target.value()) {
switch (targetType) {
case TYPE:
- match |=
ElementKind.CLASS.equals(kind)||ElementKind.INTERFACE.equals(kind)||ElementKind.ENUM.equals(kind);
+ match |= ElementKind.CLASS.equals(kind) ||
ElementKind.INTERFACE.equals(kind)
+ || ElementKind.ENUM.equals(kind);
break;
case PACKAGE:
match |= ElementKind.PACKAGE.equals(kind);
@@ -181,19 +196,22 @@
}
} else {
// Annotation without @Target match any element.
- match =
- ElementKind.CLASS.equals(kind) || ElementKind.INTERFACE.equals(kind) ||
ElementKind.ENUM.equals(kind)
- || ElementKind.PACKAGE.equals(kind) ||
ElementKind.METHOD.equals(kind)
- || ElementKind.FIELD.equals(kind);
+ match = ElementKind.CLASS.equals(kind) || ElementKind.INTERFACE.equals(kind)
+ || ElementKind.ENUM.equals(kind) || ElementKind.PACKAGE.equals(kind) ||
ElementKind.METHOD.equals(kind)
+ || ElementKind.FIELD.equals(kind);
}
return match;
}
- protected void sendError(Element componentElement, CdkProcessingException e) {
+ protected void sendError(Element componentElement, Exception e) {
// rise error and continue.
processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.ERROR,
e.getMessage(), componentElement);
}
+ protected void sendError(CdkException e) {
+ processingEnv.getMessager().printMessage(javax.tools.Diagnostic.Kind.ERROR,
e.getMessage());
+ }
+
@Override
public Set<String> getSupportedAnnotationTypes() {
return PROCESSED_ANNOTATION;
Modified:
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/model/PropertyBase.java
===================================================================
---
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/model/PropertyBase.java 2010-12-29
22:21:20 UTC (rev 20843)
+++
branches/RF-9323/cdk/generator/src/main/java/org/richfaces/cdk/model/PropertyBase.java 2010-12-30
02:34:42 UTC (rev 20844)
@@ -293,9 +293,7 @@
@Override
public void merge(PropertyBase other) {
- boolean generate = getGenerate();
ComponentLibrary.merge(this, other);
- setGenerate(generate || other.getGenerate());
}
public <R,D> R accept(Visitor<R,D> visitor, D data) {