You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/05/26 12:59:20 UTC
[29/50] [abbrv] tinkerpop git commit: TINKERPOP-786 Refactored
processor
TINKERPOP-786 Refactored processor
Removed some more duplicate code and streamlined a bit further.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7963dc24
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7963dc24
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7963dc24
Branch: refs/heads/TINKERPOP-1489
Commit: 7963dc24a0cc87f3c2a68aef9ff887e04b18596d
Parents: fbf8f0d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 12 09:02:08 2017 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue May 16 11:02:31 2017 -0400
----------------------------------------------------------------------
.../traversal/dsl/GremlinDslProcessor.java | 48 +++++++++-----------
1 file changed, 21 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7963dc24/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java
index 1717053..3358143 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/GremlinDslProcessor.java
@@ -61,7 +61,6 @@ import javax.tools.Diagnostic;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -135,7 +134,7 @@ public class GremlinDslProcessor extends AbstractProcessor {
.build());
// process the methods of the GremlinDsl annotated class
- for (ExecutableElement templateMethod : findMethodsOfElement(ctx.annotatedDslType)) {
+ for (ExecutableElement templateMethod : findMethodsOfElement(ctx.annotatedDslType, null)) {
final String methodName = templateMethod.getSimpleName().toString();
final TypeName returnType = getReturnTypeDefinition(ctx.traversalClassName, templateMethod);
@@ -178,12 +177,10 @@ public class GremlinDslProcessor extends AbstractProcessor {
// use methods from __ to template them into the DSL __
final Element anonymousTraversal = elementUtils.getTypeElement(__.class.getCanonicalName());
- for (ExecutableElement templateMethod : findMethodsOfElement(anonymousTraversal)) {
+ final Predicate<ExecutableElement> ignore = ee -> ee.getSimpleName().contentEquals("start");
+ for (ExecutableElement templateMethod : findMethodsOfElement(anonymousTraversal, ignore)) {
final String methodName = templateMethod.getSimpleName().toString();
- // ignore start() from __ - that's not proxied
- if (methodName.equals("start")) continue;
-
final TypeName returnType = getReturnTypeDefinition(ctx.traversalClassName, templateMethod);
final MethodSpec.Builder methodToAdd = MethodSpec.methodBuilder(methodName)
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
@@ -251,18 +248,16 @@ public class GremlinDslProcessor extends AbstractProcessor {
// override methods to return a the DSL TraversalSource. find GraphTraversalSource class somewhere in the hierarchy
final Element tinkerPopsGraphTraversalSource = findClassAsElement(graphTraversalSourceElement, GraphTraversalSource.class);
- for (ExecutableElement elementOfGraphTraversalSource : findMethodsOfElement(tinkerPopsGraphTraversalSource)) {
+ final Predicate<ExecutableElement> ignore = e -> !(e.getReturnType().getKind() == TypeKind.DECLARED && ((DeclaredType) e.getReturnType()).asElement().getSimpleName().contentEquals(GraphTraversalSource.class.getSimpleName()));
+ for (ExecutableElement elementOfGraphTraversalSource : findMethodsOfElement(tinkerPopsGraphTraversalSource, ignore)) {
// first copy/override methods that return a GraphTraversalSource so that we can instead return
// the DSL TraversalSource class.
- tryConstructMethod(elementOfGraphTraversalSource, ctx.traversalSourceClassName, "",
- e -> !(e.getReturnType().getKind() == TypeKind.DECLARED && ((DeclaredType) e.getReturnType()).asElement().getSimpleName().contentEquals(GraphTraversalSource.class.getSimpleName())),
- Modifier.PUBLIC)
- .ifPresent(traversalSourceClass::addMethod);
+ traversalSourceClass.addMethod(constructMethod(elementOfGraphTraversalSource, ctx.traversalSourceClassName, "",Modifier.PUBLIC));
}
// override methods that return GraphTraversal that come from the user defined extension of GraphTraversal
if (!graphTraversalSourceElement.getSimpleName().contentEquals(GraphTraversalSource.class.getSimpleName())) {
- for (ExecutableElement templateMethod : findMethodsOfElement(graphTraversalSourceElement)) {
+ for (ExecutableElement templateMethod : findMethodsOfElement(graphTraversalSourceElement, null)) {
final MethodSpec.Builder methodToAdd = MethodSpec.methodBuilder(templateMethod.getSimpleName().toString())
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class);
@@ -410,18 +405,17 @@ public class GremlinDslProcessor extends AbstractProcessor {
.addSuperinterface(TypeName.get(ctx.annotatedDslType.asType()));
// process the methods of the GremlinDsl annotated class
- for (ExecutableElement templateMethod : findMethodsOfElement(ctx.annotatedDslType)) {
- tryConstructMethod(templateMethod, ctx.traversalClassName, ctx.dslName, null,
- Modifier.PUBLIC, Modifier.DEFAULT).ifPresent(traversalInterface::addMethod);
+ for (ExecutableElement templateMethod : findMethodsOfElement(ctx.annotatedDslType, null)) {
+ traversalInterface.addMethod(constructMethod(templateMethod, ctx.traversalClassName, ctx.dslName,
+ Modifier.PUBLIC, Modifier.DEFAULT));
}
// process the methods of GraphTraversal
final TypeElement graphTraversalElement = elementUtils.getTypeElement(GraphTraversal.class.getCanonicalName());
- for (ExecutableElement templateMethod : findMethodsOfElement(graphTraversalElement)) {
- tryConstructMethod(templateMethod, ctx.traversalClassName, ctx.dslName,
- e -> e.getSimpleName().contentEquals("asAdmin") || e.getSimpleName().contentEquals("iterate"),
- Modifier.PUBLIC, Modifier.DEFAULT)
- .ifPresent(traversalInterface::addMethod);
+ final Predicate<ExecutableElement> ignore = e -> e.getSimpleName().contentEquals("asAdmin") || e.getSimpleName().contentEquals("iterate");
+ for (ExecutableElement templateMethod : findMethodsOfElement(graphTraversalElement, ignore)) {
+ traversalInterface.addMethod(constructMethod(templateMethod, ctx.traversalClassName, ctx.dslName,
+ Modifier.PUBLIC, Modifier.DEFAULT));
}
// there are weird things with generics that require this method to be implemented if it isn't already present
@@ -438,13 +432,11 @@ public class GremlinDslProcessor extends AbstractProcessor {
traversalJavaFile.writeTo(filer);
}
- private Optional<MethodSpec> tryConstructMethod(final Element element, final ClassName returnClazz, final String parent,
- final Predicate<ExecutableElement> ignore, final Modifier... modifiers) {
+ private MethodSpec constructMethod(final Element element, final ClassName returnClazz, final String parent,
+ final Modifier... modifiers) {
final ExecutableElement templateMethod = (ExecutableElement) element;
final String methodName = templateMethod.getSimpleName().toString();
- if (ignore != null && ignore.test(templateMethod)) return Optional.empty();
-
final TypeName returnType = getReturnTypeDefinition(returnClazz, templateMethod);
final MethodSpec.Builder methodToAdd = MethodSpec.methodBuilder(methodName)
.addModifiers(modifiers)
@@ -474,7 +466,7 @@ public class GremlinDslProcessor extends AbstractProcessor {
body = body + ")";
methodToAdd.addStatement(body, returnClazz, methodName);
- return Optional.of(methodToAdd.build());
+ return methodToAdd.build();
}
private TypeName getReturnTypeDefinition(final ClassName returnClazz, final ExecutableElement templateMethod) {
@@ -495,10 +487,12 @@ public class GremlinDslProcessor extends AbstractProcessor {
throw new ProcessorException(dslElement, "The interface %s is not public.", typeElement.getQualifiedName());
}
- private List<ExecutableElement> findMethodsOfElement(final Element element) {
+ private List<ExecutableElement> findMethodsOfElement(final Element element, final Predicate<ExecutableElement> ignore) {
+ final Predicate<ExecutableElement> test = null == ignore ? ee -> false : ignore;
return element.getEnclosedElements().stream()
.filter(ee -> ee.getKind() == ElementKind.METHOD)
- .map(ee -> (ExecutableElement) ee).collect(Collectors.toList());
+ .map(ee -> (ExecutableElement) ee)
+ .filter(ee -> !test.test(ee)).collect(Collectors.toList());
}
private List<? extends TypeMirror> getTypeArguments(final ExecutableElement templateMethod) {