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)) {