You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/07 16:57:06 UTC

camel git commit: CAMEL-8446: Component docs - Add support for @Metadata on component fields which is the common pattern.

Repository: camel
Updated Branches:
  refs/heads/master 2e2e3fe68 -> 20466f8a5


CAMEL-8446: Component docs - Add support for @Metadata on component fields which is the common pattern.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/20466f8a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/20466f8a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/20466f8a

Branch: refs/heads/master
Commit: 20466f8a53b5447522e9bdaf0b4493745beb3d26
Parents: 2e2e3fe
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Sep 7 16:56:25 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Sep 7 16:56:25 2015 +0200

----------------------------------------------------------------------
 .../camel/component/xslt/XsltComponent.java       |  1 -
 .../tools/apt/AbstractAnnotationProcessor.java    | 16 ++++++++++++++++
 .../tools/apt/EndpointAnnotationProcessor.java    | 18 ++++++++++++------
 3 files changed, 28 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/20466f8a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
index 427bed3..b0a06e0 100644
--- a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
+++ b/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
@@ -39,7 +39,6 @@ public class XsltComponent extends UriEndpointComponent {
     private URIResolver uriResolver;
     @Metadata(defaultValue = "true")
     private boolean contentCache = true;
-    @Metadata(defaultValue = "false")
     private boolean saxon;
 
     public XsltComponent() {

http://git-wip-us.apache.org/repos/asf/camel/blob/20466f8a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractAnnotationProcessor.java
----------------------------------------------------------------------
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractAnnotationProcessor.java
index 71c9a6f..051b5e2 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractAnnotationProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractAnnotationProcessor.java
@@ -33,6 +33,7 @@ import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeKind;
 import javax.lang.model.util.ElementFilter;
 import javax.lang.model.util.Elements;
@@ -168,6 +169,21 @@ public abstract class AbstractAnnotationProcessor extends AbstractProcessor {
         return null;
     }
 
+    protected VariableElement findFieldElement(TypeElement classElement, String fieldName) {
+        if (isNullOrEmpty(fieldName)) {
+            return null;
+        }
+
+        List<VariableElement> fields = ElementFilter.fieldsIn(classElement.getEnclosedElements());
+        for (VariableElement field : fields) {
+            if (fieldName.equals(field.getSimpleName().toString())) {
+                return field;
+            }
+        }
+
+        return null;
+    }
+
     protected TypeElement findTypeElement(RoundEnvironment roundEnv, String className) {
         if (isNullOrEmpty(className) || "java.lang.Object".equals(className)) {
             return null;

http://git-wip-us.apache.org/repos/asf/camel/blob/20466f8a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
----------------------------------------------------------------------
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index 55b32c9..00a35e7 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -466,12 +466,11 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor {
                 String fieldName = methodName.substring(3);
                 fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
 
-                ExecutableElement setter = method;
-                String name = fieldName;
-                name = prefix + name;
-                TypeMirror fieldType = setter.getParameters().get(0).asType();
-                String fieldTypeName = fieldType.toString();
-                TypeElement fieldTypeElement = findTypeElement(roundEnv, fieldTypeName);
+                // we usually favor putting the @Metadata annotation on the field instead of the setter, so try to use it if its there
+                VariableElement field = findFieldElement(classElement, fieldName);
+                if (field != null && metadata == null) {
+                    metadata = field.getAnnotation(Metadata.class);
+                }
 
                 String required = metadata != null ? metadata.required() : null;
                 String label = metadata != null ? metadata.label() : null;
@@ -481,6 +480,13 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor {
                 String defaultValue = metadata != null ? metadata.defaultValue() : null;
                 String defaultValueNote = null;
 
+                ExecutableElement setter = method;
+                String name = fieldName;
+                name = prefix + name;
+                TypeMirror fieldType = setter.getParameters().get(0).asType();
+                String fieldTypeName = fieldType.toString();
+                TypeElement fieldTypeElement = findTypeElement(roundEnv, fieldTypeName);
+
                 String docComment = findJavaDoc(elementUtils, method, fieldName, name, classElement, false);
                 if (isNullOrEmpty(docComment)) {
                     docComment = metadata != null ? metadata.description() : null;