Author: tchemit
Date: 2008-08-04 00:00:05 +0000 (Mon, 04 Aug 2008)
New Revision: 807
Modified:
trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/ActionAnnotationProcessing.java
Log:
fix bug : when a class has to be compiled but not the baseAction class, we did not have the providerConfig, in that casespecial case we try to find it in a super class of on of found action class
Modified: trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/ActionAnnotationProcessing.java
===================================================================
--- trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/ActionAnnotationProcessing.java 2008-07-31 13:17:21 UTC (rev 806)
+++ trunk/lutinjaxx/jaxx-swing-action/src/main/java/org/codelutin/jaxx/action/ActionAnnotationProcessing.java 2008-08-04 00:00:05 UTC (rev 807)
@@ -126,12 +126,20 @@
}
if ((roundEnv.processingOver())) {
- if (providerConfig == null) {
- throw new IllegalStateException("no provider name found, you must add on baseaction the annotation " + ActionProviderAnnotation.class);
- }
try {
- writeProviderClass();
- writeProviderServiceDeclaration();
+ if (providerConfig == null) {
+ // baseActionClass was not compiled at this time, must find it back
+
+ findProviderConfigFromCompiledClass();
+
+ if (providerConfig == null) {
+ throw new IllegalStateException("no provider name found, you must add on baseaction the annotation " + ActionProviderAnnotation.class);
+ }
+ actionsFileLocation = String.format(actionsFileLocation, providerConfig.name());
+ } else {
+ writeProviderClass();
+ writeProviderServiceDeclaration();
+ }
writeActionMapping();
} catch (Exception e) {
throw new RuntimeException(e);
@@ -141,9 +149,22 @@
}
}
- return false;
+ return true;
}
+ protected void findProviderConfigFromCompiledClass() throws ClassNotFoundException {
+ if (!processedClass.isEmpty()) {
+ Class<?> klazz = Class.forName(processedClass.get(0));
+ providerConfig = klazz.getAnnotation(ActionProviderAnnotation.class);
+ while (klazz != null && providerConfig == null) {
+ klazz = klazz.getSuperclass();
+ if (klazz != null) {
+ providerConfig = klazz.getAnnotation(ActionProviderAnnotation.class);
+ }
+ }
+ }
+ }
+
protected void registerActionsForClass(TypeMirror annotationType, Element e) {
for (AnnotationMirror mirror : e.getAnnotationMirrors()) {
if (!mirror.getAnnotationType().equals(annotationType)) {