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 2019/06/19 04:01:09 UTC

[camel] 02/06: CAMEL-13658: Using OutputNode instead of isOutputSupported method to mark if a node/definition supports outputs or not.

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d1d8f4034c298914630ad3dba77bdfdc744e5ceb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Jun 18 21:21:02 2019 +0200

    CAMEL-13658: Using OutputNode instead of isOutputSupported method to mark if a node/definition supports outputs or not.
---
 .../java/org/apache/camel/model/ThrottleDefinition.java    |  2 +-
 .../camel/tools/apt/CoreEipAnnotationProcessorHelper.java  | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java
index a1436ee..c8a8d43 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ThrottleDefinition.java
@@ -37,7 +37,7 @@ import org.apache.camel.spi.Metadata;
 @Metadata(label = "eip,routing")
 @XmlRootElement(name = "throttle")
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(propOrder = {"expression", "correlationExpression", "outputs"})
+@XmlType(propOrder = {"expression", "correlationExpression"})
 public class ThrottleDefinition extends ExpressionNode implements ExecutorServiceAwareDefinition<ThrottleDefinition> {
 
     @XmlElement(name = "correlationExpression")
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
index 554fc96..396dda5 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
@@ -51,6 +51,7 @@ import static org.apache.camel.tools.apt.AnnotationProcessorHelper.findJavaDoc;
 import static org.apache.camel.tools.apt.AnnotationProcessorHelper.findTypeElement;
 import static org.apache.camel.tools.apt.AnnotationProcessorHelper.findTypeElementChildren;
 import static org.apache.camel.tools.apt.AnnotationProcessorHelper.hasSuperClass;
+import static org.apache.camel.tools.apt.AnnotationProcessorHelper.implementsInterface;
 import static org.apache.camel.tools.apt.AnnotationProcessorHelper.processFile;
 import static org.apache.camel.tools.apt.helper.JsonSchemaHelper.sanitizeDescription;
 import static org.apache.camel.tools.apt.helper.Strings.canonicalClassName;
@@ -71,9 +72,9 @@ public class CoreEipAnnotationProcessorHelper {
     // find all classes)
     private static final String[] ONE_OF_INPUTS = new String[] {"org.apache.camel.model.ProcessorDefinition", "org.apache.camel.model.VerbDefinition"};
     // special for outputs (these classes have sub classes, so we use this to
-    // find all classes)
+    // find all classes - and not in particular if they support outputs or not)
     private static final String[] ONE_OF_OUTPUTS = new String[] {"org.apache.camel.model.ProcessorDefinition", "org.apache.camel.model.NoOutputDefinition",
-                                                                 "org.apache.camel.model.OutputDefinition", "org.apache.camel.model.ExpressionNode",
+                                                                 "org.apache.camel.model.OutputDefinition", "org.apache.camel.model.OutputExpressionNode",
                                                                  "org.apache.camel.model.NoOutputExpressionNode", "org.apache.camel.model.SendDefinition",
                                                                  "org.apache.camel.model.InterceptDefinition", "org.apache.camel.model.WhenDefinition",
                                                                  "org.apache.camel.model.ToDynamicDefinition"};
@@ -767,7 +768,7 @@ public class CoreEipAnnotationProcessorHelper {
      */
     private void processOutputs(ProcessingEnvironment processingEnv, RoundEnvironment roundEnv, TypeElement originalClassType, XmlElementRef elementRef,
                                 VariableElement fieldElement, String fieldName, Set<EipOption> eipOptions, String prefix) {
-        if ("outputs".equals(fieldName) && supportOutputs(originalClassType)) {
+        if ("outputs".equals(fieldName) && supportOutputs(processingEnv, roundEnv, originalClassType)) {
             String kind = "element";
             String name = elementRef.name();
             if (isNullOrEmpty(name) || "##default".equals(name)) {
@@ -818,7 +819,7 @@ public class CoreEipAnnotationProcessorHelper {
 
         Elements elementUtils = processingEnv.getElementUtils();
 
-        if ("verbs".equals(fieldName) && supportOutputs(originalClassType)) {
+        if ("verbs".equals(fieldName) && supportOutputs(processingEnv, roundEnv, originalClassType)) {
             String kind = "element";
             String name = elementRef.name();
             if (isNullOrEmpty(name) || "##default".equals(name)) {
@@ -978,9 +979,8 @@ public class CoreEipAnnotationProcessorHelper {
      * There are some classes which does not support outputs, even though they
      * have a outputs element.
      */
-    private boolean supportOutputs(TypeElement classElement) {
-        String superclass = canonicalClassName(classElement.getSuperclass().toString());
-        return !"org.apache.camel.model.NoOutputExpressionNode".equals(superclass);
+    private boolean supportOutputs(ProcessingEnvironment processingEnv, RoundEnvironment roundEnv, TypeElement classElement) {
+        return implementsInterface(processingEnv, roundEnv, classElement, "org.apache.camel.model.OutputNode");
     }
 
     private String findDefaultValue(VariableElement fieldElement, String fieldTypeName) {