You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2017/04/27 09:50:08 UTC

qpid-broker-j git commit: QPID-7760: Allow ConfiguredObjectRegistrationGenerator to handle incremental compliation

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master b7617e5f5 -> b2f341655


QPID-7760: Allow ConfiguredObjectRegistrationGenerator to handle incremental compliation


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/b2f34165
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/b2f34165
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/b2f34165

Branch: refs/heads/master
Commit: b2f341655ccfb6631e4b641e682cf039c059f9c8
Parents: b7617e5
Author: Keith Wall <kw...@apache.org>
Authored: Thu Apr 27 09:23:14 2017 +0100
Committer: Keith Wall <kw...@apache.org>
Committed: Thu Apr 27 10:49:33 2017 +0100

----------------------------------------------------------------------
 .../ConfiguredObjectRegistrationGenerator.java  | 118 +++++++++++--------
 1 file changed, 67 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/b2f34165/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
----------------------------------------------------------------------
diff --git a/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java b/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
index 9e63e96..1aaf661 100644
--- a/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
+++ b/broker-codegen/src/main/java/org/apache/qpid/server/model/ConfiguredObjectRegistrationGenerator.java
@@ -32,6 +32,7 @@ import java.util.Set;
 
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.SourceVersion;
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
@@ -47,6 +48,7 @@ import javax.tools.JavaFileObject;
 
 import org.apache.qpid.server.License;
 
+@SupportedAnnotationTypes(ConfiguredObjectRegistrationGenerator.MANAGED_OBJECT_CANONICAL_NAME)
 public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
 {
 
@@ -56,6 +58,7 @@ public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
 
     private Map<String, String> _typeMap = new HashMap<>();
     private Map<String, String> _categoryMap = new HashMap<>();
+    private boolean _elementProcessingDone;
 
     @Override
     public SourceVersion getSupportedSourceVersion()
@@ -64,72 +67,80 @@ public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
     }
 
     @Override
-    public Set<String> getSupportedAnnotationTypes()
-    {
-        return Collections.singleton(MANAGED_OBJECT_CANONICAL_NAME);
-    }
-
-    @Override
     public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv)
     {
+        if (!_elementProcessingDone)
+        {
+            final Elements elementUtils = processingEnv.getElementUtils();
+            final TypeElement managedObjectElement = elementUtils.getTypeElement(MANAGED_OBJECT_CANONICAL_NAME);
+            try
+            {
+                roundEnv.getElementsAnnotatedWith(managedObjectElement).stream()
+                        .map(element -> elementUtils.getPackageOf(element))
+                        .flatMap(packageElement -> packageElement.getEnclosedElements().stream())
+                        .filter(element -> hasAnnotation(element, managedObjectElement))
+                        .forEach(annotatedElement -> processAnnotatedElement(elementUtils,
+                                                                             managedObjectElement,
+                                                                             annotatedElement));
+
+                for (Map.Entry<String, Set<String>> entry : _managedObjectClasses.entrySet())
+                {
+                    processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
+                                                             String.format("Generating CO registration for package '%s'", entry.getKey()));
+                    generateRegistrationFile(entry.getKey(), entry.getValue());
+                }
+                _managedObjectClasses.clear();
+                _typeMap.clear();
+                _categoryMap.clear();
 
-        Elements elementUtils = processingEnv.getElementUtils();
-        TypeElement annotationElement = elementUtils.getTypeElement(MANAGED_OBJECT_CANONICAL_NAME);
+                _elementProcessingDone = true;
 
+            }
+            catch (Exception e)
+            {
+                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Error: " + e.getLocalizedMessage());
+            }
+        }
+        return false;
+    }
 
-        try
+    private void processAnnotatedElement(final Elements elementUtils,
+                                         final TypeElement annotationElement,
+                                         final Element e)
+    {
+        if (e.getKind().equals(ElementKind.INTERFACE) || e.getKind().equals(ElementKind.CLASS))
         {
+            PackageElement packageElement = elementUtils.getPackageOf(e);
+            String packageName = packageElement.getQualifiedName().toString();
+            String className = e.getSimpleName().toString();
+            AnnotationMirror annotation = getAnnotation(e, annotationElement);
 
-            for (Element e : roundEnv.getElementsAnnotatedWith(annotationElement))
-            {
-                if (e.getKind().equals(ElementKind.INTERFACE) || e.getKind().equals(ElementKind.CLASS))
-                {
-                    PackageElement packageElement = elementUtils.getPackageOf(e);
-                    String packageName = packageElement.getQualifiedName().toString();
-                    String className = e.getSimpleName().toString();
-                    AnnotationMirror annotation = getAnnotation(e, annotationElement);
-
-                    AnnotationValue registerValue = getAnnotationValue(annotation, "register");
+            AnnotationValue registerValue = getAnnotationValue(annotation, "register");
 
-                    if(registerValue == null || (Boolean) registerValue.getValue() )
-                    {
-                        AnnotationValue typeValue = getAnnotationValue(annotation, "type");
+            if(registerValue == null || (Boolean) registerValue.getValue() )
+            {
+                AnnotationValue typeValue = getAnnotationValue(annotation, "type");
 
-                        if (typeValue != null)
-                        {
-                            _typeMap.put(packageName + "." + className, (String) typeValue.getValue());
-                            processingEnv.getMessager()
-                                    .printMessage(Diagnostic.Kind.NOTE,
-                                                  "looking for " + packageName + "." + className);
-                            _categoryMap.put(packageName + "." + className, getCategory((TypeElement) e));
+                if (typeValue != null)
+                {
+                    _typeMap.put(packageName + "." + className, (String) typeValue.getValue());
+                    processingEnv.getMessager()
+                            .printMessage(Diagnostic.Kind.NOTE,
+                                          "looking for " + packageName + "." + className);
+                    _categoryMap.put(packageName + "." + className, getCategory((TypeElement) e));
 
-                        }
+                }
 
 
-                        Set<String> classNames = _managedObjectClasses.get(packageName);
-                        if (classNames == null)
-                        {
-                            classNames = new HashSet<>();
-                            _managedObjectClasses.put(packageName, classNames);
-                        }
-                        classNames.add(className);
-                    }
+                Set<String> classNames = _managedObjectClasses.get(packageName);
+                if (classNames == null)
+                {
+                    classNames = new HashSet<>();
+                    _managedObjectClasses.put(packageName, classNames);
                 }
+                classNames.add(className);
             }
-            for (Map.Entry<String, Set<String>> entry : _managedObjectClasses.entrySet())
-            {
-                generateRegistrationFile(entry.getKey(), entry.getValue());
-            }
-            _managedObjectClasses.clear();
-            _typeMap.clear();
-            _categoryMap.clear();
-        }
-        catch (Exception e)
-        {
-            processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Error: " + e.getLocalizedMessage());
         }
-
-        return false;
     }
 
     private AnnotationValue getAnnotationValue(final AnnotationMirror annotation, final String attribute)
@@ -144,6 +155,11 @@ public class ConfiguredObjectRegistrationGenerator extends AbstractProcessor
         return null;
     }
 
+    private boolean hasAnnotation(final Element element, final TypeElement annotationElement)
+    {
+        return getAnnotation(element, annotationElement) != null;
+    }
+
     private AnnotationMirror getAnnotation(final Element e, final TypeElement annotationElement)
     {
         for(AnnotationMirror a : e.getAnnotationMirrors())


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org