This is an automated email from the ASF dual-hosted git repository. okram pushed a commit to branch tp4 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/tp4 by this push: new 34a848c added P. It is much easier to work with than TP3 P. It is just an enum at the bytecode level. No more nested analysis of the P argument. Really clean. 34a848c is described below commit 34a848cb317a78471c2258f2d1c89628d453463f Author: Marko A. Rodriguez <okramma...@gmail.com> AuthorDate: Mon Mar 18 08:48:37 2019 -0600 added P. It is much easier to work with than TP3 P. It is just an enum at the bytecode level. No more nested analysis of the P argument. Really clean. --- .../tinkerpop/machine/bytecode/BytecodeUtil.java | 2 +- .../tinkerpop/machine/bytecode/Compilation.java | 4 +- .../org/apache/tinkerpop/machine/bytecode/P.java | 113 +++++++++++++++++++++ .../machine/function/filter/IsFilter.java | 11 +- .../machine/processor/ConstantProcessor.java | 2 +- ...{BooleanProcessor.java => FilterProcessor.java} | 4 +- .../machine/processor/HasNextProcessor.java | 2 +- .../machine/processor/LoopsProcessor.java | 2 +- ...ingletonProcessor.java => SimpleProcessor.java} | 2 +- .../tinkerpop/language/gremlin/Traversal.java | 10 +- .../tinkerpop/language/gremlin/TraversalUtil.java | 4 + .../org/apache/tinkerpop/machine/beam/Beam.java | 2 +- .../beam/{OutputStep.java => OutputFn.java} | 9 +- .../tinkerpop/machine/beam/RepeatDeadEndFn.java | 1 + .../machine/beam/util/PrimitiveVisitor.java | 9 +- .../apache/tinkerpop/machine/beam/BeamTest.java | 7 ++ .../apache/tinkerpop/machine/pipes/PipesTest.java | 6 ++ java/pom.xml | 2 +- 18 files changed, 170 insertions(+), 22 deletions(-) diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java index 016eb30..7a81cd1 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/BytecodeUtil.java @@ -177,7 +177,7 @@ public final class BytecodeUtil { case Symbols.INJECT: return new InjectInitial<>(coefficient, labels, instruction.args()); case Symbols.IS: - return new IsFilter<>(coefficient, labels, Argument.create(instruction.args()[0])); + return new IsFilter<>(coefficient, labels, (P.Type) instruction.args()[0], Argument.create(instruction.args()[1])); case Symbols.INCR: return new IncrMap<>(coefficient, labels); case Symbols.JOIN: diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java index 3c8c0a2..7872c7e 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Compilation.java @@ -19,7 +19,7 @@ package org.apache.tinkerpop.machine.bytecode; import org.apache.tinkerpop.machine.function.CFunction; -import org.apache.tinkerpop.machine.processor.BooleanProcessor; +import org.apache.tinkerpop.machine.processor.FilterProcessor; import org.apache.tinkerpop.machine.processor.LoopsProcessor; import org.apache.tinkerpop.machine.processor.Processor; import org.apache.tinkerpop.machine.processor.ProcessorFactory; @@ -160,7 +160,7 @@ public final class Compilation<C, S, E> implements Serializable { else if (arg instanceof Integer) objects.add(new Compilation<>(new LoopsProcessor<>((int) arg))); else if (arg instanceof Boolean) - objects.add(new Compilation<>(new BooleanProcessor<>((boolean) arg))); + objects.add(new Compilation<>(new FilterProcessor<>((boolean) arg))); } return objects; } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/P.java b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/P.java new file mode 100644 index 0000000..32dc6c7 --- /dev/null +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/P.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tinkerpop.machine.bytecode; + +import org.apache.tinkerpop.util.NumberHelper; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public final class P<S> { + + public enum Type { + eq { + public boolean test(final Object first, final Object second) { + return null == first ? null == second : (first instanceof Number && second instanceof Number + ? NumberHelper.compare((Number) first, (Number) second) == 0 + : first.equals(second)); + } + }, neq { + public boolean test(final Object first, final Object second) { + return !eq.test(first, second); + } + }, lt { + public boolean test(final Object first, final Object second) { + return null != first && null != second && ( + first instanceof Number && second instanceof Number + ? NumberHelper.compare((Number) first, (Number) second) < 0 + : ((Comparable) first).compareTo(second) < 0); + } + }, gt { + public boolean test(final Object first, final Object second) { + return null != first && null != second && ( + first instanceof Number && second instanceof Number + ? NumberHelper.compare((Number) first, (Number) second) > 0 + : ((Comparable) first).compareTo(second) > 0); + } + }, lte { + public boolean test(final Object first, final Object second) { + return null == first ? null == second : (null != second && !gt.test(first, second)); + } + }, gte { + public boolean test(final Object first, final Object second) { + return null == first ? null == second : (null != second && !lt.test(first, second)); + } + }; + + public abstract boolean test(final Object first, final Object second); + + } + + private final S object; + private final Type type; + + private P(final Type type, final S object) { + this.type = type; + this.object = object; + } + + public S object() { + return this.object; + } + + public Type type() { + return this.type; + } + + public static <S> P<S> eq(final Object object) { + return new P<>(Type.eq, (S) object); + } + + public static <S> P<S> neq(final Object object) { + return new P<>(Type.neq, (S) object); + } + + public static <S> P<S> lt(final Object object) { + return new P<>(Type.lt, (S) object); + } + + public static <S> P<S> gt(final Object object) { + return new P<>(Type.gt, (S) object); + } + + public static <S> P<S> lte(final Object object) { + return new P<>(Type.lte, (S) object); + } + + public static <S> P<S> gte(final Object object) { + return new P<>(Type.gte, (S) object); + } + + @Override + public String toString() { + return this.type.toString(); + } + + +} diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java b/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java index c4c8138..ac4dc28 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/function/filter/IsFilter.java @@ -19,6 +19,7 @@ package org.apache.tinkerpop.machine.function.filter; import org.apache.tinkerpop.machine.bytecode.Argument; +import org.apache.tinkerpop.machine.bytecode.P; import org.apache.tinkerpop.machine.coefficient.Coefficient; import org.apache.tinkerpop.machine.function.AbstractFunction; import org.apache.tinkerpop.machine.function.FilterFunction; @@ -32,20 +33,22 @@ import java.util.Set; */ public final class IsFilter<C, S> extends AbstractFunction<C> implements FilterFunction<C, S> { - private Argument<S> argument; + private final P.Type predicate; + private final Argument<S> argument; - public IsFilter(final Coefficient<C> coefficient, final Set<String> labels, final Argument<S> argument) { + public IsFilter(final Coefficient<C> coefficient, final Set<String> labels, final P.Type predicate, final Argument<S> argument) { super(coefficient, labels); + this.predicate = predicate; this.argument = argument; } @Override public boolean test(final Traverser<C, S> traverser) { - return traverser.object().equals(this.argument.getArg(traverser)); + return this.predicate.test(traverser.object(), this.argument.getArg(traverser)); } @Override public String toString() { - return StringFactory.makeFunctionString(this, this.argument); + return StringFactory.makeFunctionString(this, this.predicate, this.argument); } } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java index ec84968..5e52aff 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/ConstantProcessor.java @@ -23,7 +23,7 @@ import org.apache.tinkerpop.machine.traverser.Traverser; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class ConstantProcessor<C, S, E> extends SingletonProcessor<C, S, E> { +public final class ConstantProcessor<C, S, E> extends SimpleProcessor<C, S, E> { private final E constant; diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/FilterProcessor.java similarity index 90% rename from java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java rename to java/core/src/main/java/org/apache/tinkerpop/machine/processor/FilterProcessor.java index 99172a7..1a23279 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/BooleanProcessor.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/FilterProcessor.java @@ -23,11 +23,11 @@ import org.apache.tinkerpop.machine.traverser.Traverser; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class BooleanProcessor<C, S> extends SingletonProcessor<C, S, S> { +public final class FilterProcessor<C, S> extends SimpleProcessor<C, S, S> { private final boolean allow; - public BooleanProcessor(final boolean allow) { + public FilterProcessor(final boolean allow) { this.allow = allow; } diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java index 7f0ec33..83aa364 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/HasNextProcessor.java @@ -24,7 +24,7 @@ import org.apache.tinkerpop.machine.traverser.Traverser; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class HasNextProcessor<C, S> extends SingletonProcessor<C, S, Boolean> { +public final class HasNextProcessor<C, S> extends SimpleProcessor<C, S, Boolean> { private final Compilation<C, S, ?> predicate; diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java index eb060b4..d367356 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/LoopsProcessor.java @@ -23,7 +23,7 @@ import org.apache.tinkerpop.machine.traverser.Traverser; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public final class LoopsProcessor<C, S> extends SingletonProcessor<C, S, S> { +public final class LoopsProcessor<C, S> extends SimpleProcessor<C, S, S> { private final int loops; diff --git a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java similarity index 95% rename from java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java rename to java/core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java index f6acd9a..b96ab6b 100644 --- a/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SingletonProcessor.java +++ b/java/core/src/main/java/org/apache/tinkerpop/machine/processor/SimpleProcessor.java @@ -29,7 +29,7 @@ import java.util.List; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public abstract class SingletonProcessor<C, S, E> implements Processor<C, S, E>, ProcessorFactory { +public abstract class SimpleProcessor<C, S, E> implements Processor<C, S, E>, ProcessorFactory { protected Traverser<C, E> traverser = null; diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java index f9eae16..ab939e7 100644 --- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java +++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/Traversal.java @@ -21,6 +21,7 @@ package org.apache.tinkerpop.language.gremlin; import org.apache.tinkerpop.machine.bytecode.Bytecode; import org.apache.tinkerpop.machine.bytecode.BytecodeUtil; import org.apache.tinkerpop.machine.bytecode.Compilation; +import org.apache.tinkerpop.machine.bytecode.P; import org.apache.tinkerpop.machine.bytecode.Symbols; import org.apache.tinkerpop.machine.coefficient.Coefficient; import org.apache.tinkerpop.machine.coefficient.LongCoefficient; @@ -150,12 +151,17 @@ public class Traversal<C, S, E> implements Iterator<E> { } public Traversal<C, S, E> is(final E object) { - this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, object); + this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, P.Type.eq, object); return this; } public Traversal<C, S, E> is(final Traversal<C, E, E> objectTraversal) { - this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, objectTraversal.bytecode); + this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, P.Type.eq, objectTraversal.bytecode); + return this; + } + + public Traversal<C, S, E> is(final P<E> predicate) { + this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, predicate.type(), TraversalUtil.tryToGetBytecode(predicate.object())); return this; } diff --git a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java index e776bff..15f0ccc 100644 --- a/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java +++ b/java/language/gremlin/src/main/java/org/apache/tinkerpop/language/gremlin/TraversalUtil.java @@ -36,6 +36,10 @@ public final class TraversalUtil { return traversal.bytecode; } + public static Object tryToGetBytecode(final Object object) { + return object instanceof Traversal ? ((Traversal) object).bytecode : object; + } + public static <C, S, E> void insertRepeatInstruction(final Bytecode<C> bytecode, final Coefficient<C> currentCoefficient, final char type, final Object argument) { final Instruction<C> lastInstruction = bytecode.lastInstruction(); if (lastInstruction.op().equals(Symbols.REPEAT)) diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java index 5e0dcab..2a5d2e9 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/Beam.java @@ -52,7 +52,7 @@ public class Beam<C, S, E> implements Processor<C, S, E> { final PCollection<Traverser<C, S>> source = this.pipeline.apply(Create.of(EmptyTraverser.instance())); source.setCoder(new TraverserCoder<>()); final PCollection<Traverser<C, E>> sink = TopologyUtil.compile(source, compilation); - sink.apply(ParDo.of(new OutputStep<>())); // TODO: we need an in-memory router of outgoing data + sink.apply(ParDo.of(new OutputFn<>())); // TODO: we need an in-memory router of outgoing data } diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputStep.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputFn.java similarity index 87% rename from java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputStep.java rename to java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputFn.java index a66f60b..7c2c37c 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputStep.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/OutputFn.java @@ -24,10 +24,10 @@ import org.apache.tinkerpop.machine.traverser.Traverser; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ -public class OutputStep<C, S> extends DoFn<Traverser<C, S>, String> { +public class OutputFn<C, S> extends DoFn<Traverser<C, S>, String> { - public OutputStep() { + public OutputFn() { } @@ -35,4 +35,9 @@ public class OutputStep<C, S> extends DoFn<Traverser<C, S>, String> { public void processElement(final @Element Traverser<C, S> traverser, final OutputReceiver<String> output) { Beam.OUTPUT.add(traverser); } + + @Override + public String toString() { + return ""; + } } \ No newline at end of file diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/RepeatDeadEndFn.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/RepeatDeadEndFn.java index b228b0b..ca28c72 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/RepeatDeadEndFn.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/RepeatDeadEndFn.java @@ -34,4 +34,5 @@ public class RepeatDeadEndFn<C, S> extends DoFn<Traverser<C, S>, Traverser<C, S> public void processElement(final @DoFn.Element Traverser<C, S> traverser, final DoFn.OutputReceiver<Traverser<C, S>> output) { throw new IllegalStateException("There are not enough repetitions to account for this traversal: " + Beam.MAX_REPETIONS + " (max loops)"); } + } diff --git a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/util/PrimitiveVisitor.java b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/util/PrimitiveVisitor.java index 43c7e03..d85042e 100644 --- a/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/util/PrimitiveVisitor.java +++ b/java/machine/beam/src/main/java/org/apache/tinkerpop/machine/beam/util/PrimitiveVisitor.java @@ -22,6 +22,8 @@ import org.apache.beam.sdk.Pipeline; import org.apache.beam.sdk.runners.TransformHierarchy; import org.apache.beam.sdk.transforms.PTransform; import org.apache.beam.sdk.values.PValue; +import org.apache.tinkerpop.machine.beam.OutputFn; +import org.apache.tinkerpop.machine.beam.RepeatDeadEndFn; import java.util.ArrayList; import java.util.List; @@ -40,7 +42,7 @@ public class PrimitiveVisitor implements Pipeline.PipelineVisitor { @Override public CompositeBehavior enterCompositeTransform(final TransformHierarchy.Node node) { - return node.isRootNode() ? CompositeBehavior.ENTER_TRANSFORM : CompositeBehavior.DO_NOT_ENTER_TRANSFORM; + return CompositeBehavior.ENTER_TRANSFORM; } @Override @@ -51,9 +53,10 @@ public class PrimitiveVisitor implements Pipeline.PipelineVisitor { @Override public void visitPrimitiveTransform(final TransformHierarchy.Node node) { if (!node.getTransform().toString().startsWith("Read") && - !node.getTransform().toString().contains("OutputStep") && + !node.getTransform().toString().contains(OutputFn.class.getSimpleName()) && + !node.getTransform().toString().contains(RepeatDeadEndFn.class.getSimpleName()) && !node.getTransform().toString().startsWith("Flatten")) - this.primitives.add(node.getTransform()); + this.primitives.add(node.getTransform()); } @Override diff --git a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java index 75c203a..72f8a26 100644 --- a/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java +++ b/java/machine/beam/src/test/java/org/apache/tinkerpop/machine/beam/BeamTest.java @@ -23,11 +23,13 @@ import org.apache.tinkerpop.language.gremlin.Traversal; import org.apache.tinkerpop.language.gremlin.TraversalSource; import org.apache.tinkerpop.language.gremlin.TraversalUtil; import org.apache.tinkerpop.language.gremlin.__; +import org.apache.tinkerpop.machine.bytecode.P; import org.apache.tinkerpop.machine.strategy.IdentityStrategy; import org.junit.jupiter.api.Test; import java.util.Arrays; +import static org.apache.tinkerpop.language.gremlin.__.constant; import static org.apache.tinkerpop.language.gremlin.__.incr; import static org.apache.tinkerpop.language.gremlin.__.is; @@ -47,6 +49,11 @@ public class BeamTest { System.out.println(traversal); System.out.println(traversal.toList()); System.out.println("\n----------\n"); + traversal = g.inject(Arrays.asList(1L, 2L)).<Long>unfold().map(incr()).is(P.lt(constant(3L))); + System.out.println(TraversalUtil.getBytecode(traversal)); + System.out.println(traversal); + System.out.println(traversal.toList()); + System.out.println("\n----------\n"); traversal = g.inject(1L).times(10).repeat(__.incr()).emit(); System.out.println(TraversalUtil.getBytecode(traversal)); System.out.println(traversal); diff --git a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java index e6b1a59..42b7ec5 100644 --- a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java +++ b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java @@ -23,6 +23,7 @@ import org.apache.tinkerpop.language.gremlin.Traversal; import org.apache.tinkerpop.language.gremlin.TraversalSource; import org.apache.tinkerpop.language.gremlin.TraversalUtil; import org.apache.tinkerpop.language.gremlin.__; +import org.apache.tinkerpop.machine.bytecode.P; import org.apache.tinkerpop.machine.coefficient.LongCoefficient; import org.apache.tinkerpop.machine.strategy.IdentityStrategy; import org.junit.jupiter.api.Test; @@ -51,6 +52,11 @@ public class PipesTest { System.out.println(traversal); System.out.println(traversal.toList()); System.out.println("\n----------\n"); + traversal = g.inject(Arrays.asList(1L, 2L)).unfold().is(P.lt(__.constant(2L))); + System.out.println(TraversalUtil.getBytecode(traversal)); + System.out.println(traversal); + System.out.println(traversal.toList()); + System.out.println("\n----------\n"); traversal = g.inject(1L).times(10).repeat(__.incr()).emit(); System.out.println(TraversalUtil.getBytecode(traversal)); System.out.println(traversal); diff --git a/java/pom.xml b/java/pom.xml index c404757..2486950 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -171,7 +171,7 @@ limitations under the License. <source>11</source> <target>11</target> <compilerArgs> - <arg>-parameters</arg> + <object>-parameters</object> </compilerArgs> </configuration> </plugin>