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/03/06 08:37:24 UTC
camel git commit: CAMEL-8444: Camel Toolbox - Component properties to
include setters
Repository: camel
Updated Branches:
refs/heads/master c544cfb4e -> 6506c87e3
CAMEL-8444: Camel Toolbox - Component properties to include setters
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6506c87e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6506c87e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6506c87e
Branch: refs/heads/master
Commit: 6506c87e3b29c432e50a06f34ca0b4baf0232056
Parents: c544cfb
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Mar 6 08:38:37 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Mar 6 08:38:37 2015 +0100
----------------------------------------------------------------------
.../tools/apt/EndpointAnnotationProcessor.java | 99 +++++++++++---------
1 file changed, 53 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6506c87e/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 280361b..4bda166 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
@@ -32,6 +32,7 @@ import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.MirroredTypeException;
+import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.Elements;
@@ -397,59 +398,65 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor {
protected void findComponentClassProperties(PrintWriter writer, RoundEnvironment roundEnv, Set<ComponentOption> componentOptions, TypeElement classElement, String prefix) {
Elements elementUtils = processingEnv.getElementUtils();
while (true) {
- List<VariableElement> fieldElements = ElementFilter.fieldsIn(classElement.getEnclosedElements());
- for (VariableElement fieldElement : fieldElements) {
- String fieldName = fieldElement.getSimpleName().toString();
- boolean deprecated = fieldElement.getAnnotation(Deprecated.class) != null;
- Metadata metadata = fieldElement.getAnnotation(Metadata.class);
+ List<ExecutableElement> methods = ElementFilter.methodsIn(classElement.getEnclosedElements());
+ for (ExecutableElement method : methods) {
+ String methodName = method.getSimpleName().toString();
+ boolean deprecated = method.getAnnotation(Deprecated.class) != null;
+ Metadata metadata = method.getAnnotation(Metadata.class);
+
+ // must be the setter
+ boolean isSetter = methodName.startsWith("set") && method.getParameters().size() == 1 & method.getReturnType().getKind().equals(TypeKind.VOID);
+ if (!isSetter) {
+ continue;
+ }
- // skip unwanted fields as they are inherited from default component and are not intended for end users to configure
- if ("endpointClass".equals(fieldName) || "camelContext".equals(fieldName)) {
+ // skip unwanted methods as they are inherited from default component and are not intended for end users to configure
+ if ("setEndpointClass".equals(methodName) || "setCamelContext".equals(methodName)) {
continue;
}
// must be a getter/setter pair
- ExecutableElement getter = findGetter(fieldName, classElement);
- ExecutableElement setter = findSetter(fieldName, classElement);
- if (getter != null && setter != null) {
- String name = fieldName;
- name = prefix + name;
- TypeMirror fieldType = fieldElement.asType();
- String fieldTypeName = fieldType.toString();
- TypeElement fieldTypeElement = findTypeElement(roundEnv, fieldTypeName);
-
- String required = metadata != null ? metadata.required() : null;
- String label = metadata != null ? metadata.label() : null;
-
- // we do not yet have default values / notes / as no annotation support yet
- // String defaultValueNote = param.defaultValueNote();
- String defaultValue = metadata != null ? metadata.defaultValue() : null;
- String defaultValueNote = null;
-
- String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, false);
- if (docComment == null) {
- docComment = "";
- }
+ 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);
+
+ String required = metadata != null ? metadata.required() : null;
+ String label = metadata != null ? metadata.label() : null;
+
+ // we do not yet have default values / notes / as no annotation support yet
+ // String defaultValueNote = param.defaultValueNote();
+ String defaultValue = metadata != null ? metadata.defaultValue() : null;
+ String defaultValueNote = null;
+
+ String docComment = findJavaDoc(elementUtils, method, fieldName, name, classElement, false);
+ if (docComment == null) {
+ docComment = "";
+ }
- // gather enums
- Set<String> enums = new LinkedHashSet<String>();
- boolean isEnum = fieldTypeElement != null && fieldTypeElement.getKind() == ElementKind.ENUM;
- if (isEnum) {
- TypeElement enumClass = findTypeElement(roundEnv, fieldTypeElement.asType().toString());
- // find all the enum constants which has the possible enum value that can be used
- List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements());
- for (VariableElement var : fields) {
- if (var.getKind() == ElementKind.ENUM_CONSTANT) {
- String val = var.toString();
- enums.add(val);
- }
+ // gather enums
+ Set<String> enums = new LinkedHashSet<String>();
+ boolean isEnum = fieldTypeElement != null && fieldTypeElement.getKind() == ElementKind.ENUM;
+ if (isEnum) {
+ TypeElement enumClass = findTypeElement(roundEnv, fieldTypeElement.asType().toString());
+ // find all the enum constants which has the possible enum value that can be used
+ List<VariableElement> fields = ElementFilter.fieldsIn(enumClass.getEnclosedElements());
+ for (VariableElement var : fields) {
+ if (var.getKind() == ElementKind.ENUM_CONSTANT) {
+ String val = var.toString();
+ enums.add(val);
}
}
-
- ComponentOption option = new ComponentOption(name, fieldTypeName, required, defaultValue, defaultValueNote,
- docComment.trim(), deprecated, label, isEnum, enums);
- componentOptions.add(option);
}
+
+ ComponentOption option = new ComponentOption(name, fieldTypeName, required, defaultValue, defaultValueNote,
+ docComment.trim(), deprecated, label, isEnum, enums);
+ componentOptions.add(option);
}
// check super classes which may also have fields
@@ -490,7 +497,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor {
defaultValue = metadata.defaultValue();
}
String defaultValueNote = path.defaultValueNote();
- String required = metadata != null ? metadata.required() : null;
+ String required = metadata != null ? metadata.required() : null;
String label = path.label();
TypeMirror fieldType = fieldElement.asType();
@@ -545,7 +552,7 @@ public class EndpointAnnotationProcessor extends AbstractAnnotationProcessor {
defaultValue = metadata.defaultValue();
}
String defaultValueNote = param.defaultValueNote();
- String required = metadata != null ? metadata.required() : null;
+ String required = metadata != null ? metadata.required() : null;
String label = param.label();
// if the field type is a nested parameter then iterate through its fields