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