You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by GitBox <gi...@apache.org> on 2018/11/26 18:06:01 UTC
[GitHub] spmallette closed pull request #999: some improvements
spmallette closed pull request #999: some improvements
URL: https://github.com/apache/tinkerpop/pull/999
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index a3ba9f0243..0185bc0443 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -255,7 +255,7 @@ public int hashCode() {
private final Object[] flattenArguments(final Object... arguments) {
if (arguments.length == 0)
return EMPTY_ARRAY;
- final List<Object> flatArguments = new ArrayList<>();
+ final List<Object> flatArguments = new ArrayList<>(arguments.length);
for (final Object object : arguments) {
if (object instanceof Object[]) {
for (final Object nestObject : (Object[]) object) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 31738b0506..5e93345eab 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -25,6 +25,7 @@
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy;
@@ -33,7 +34,6 @@
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
@@ -48,6 +48,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -120,7 +121,7 @@
*
* @param strategies the traversal strategies to sort
*/
- public static List<TraversalStrategy<?>> sortStrategies(final List<TraversalStrategy<?>> strategies) {
+ public static Set<TraversalStrategy<?>> sortStrategies(final Set<TraversalStrategy<?>> strategies) {
final Map<Class<? extends TraversalStrategy>, Set<Class<? extends TraversalStrategy>>> dependencyMap = new HashMap<>();
final Map<Class<? extends TraversalStrategy>, Set<Class<? extends TraversalStrategy>>> strategiesByCategory = new HashMap<>();
final Set<Class<? extends TraversalStrategy>> strategyClasses = new HashSet<>(strategies.size());
@@ -163,8 +164,8 @@
visit(dependencyMap, sortedStrategyClasses, seenStrategyClasses, unprocessedStrategyClasses, strategy);
}
- final List<TraversalStrategy<?>> sortedStrategies = new ArrayList<>();
- //We now have a list of sorted strategy classes
+ final Set<TraversalStrategy<?>> sortedStrategies = new LinkedHashSet<>();
+ //We now have a linked set of sorted strategy classes
for (Class<? extends TraversalStrategy> strategyClass : sortedStrategyClasses) {
for (TraversalStrategy strategy : strategies) {
if (strategy.getClass().equals(strategyClass)) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index 74e84e252b..4a7d527c37 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -25,25 +25,23 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class DefaultTraversalStrategies implements TraversalStrategies {
- protected List<TraversalStrategy<?>> traversalStrategies = new ArrayList<>();
+ protected Set<TraversalStrategy<?>> traversalStrategies = new LinkedHashSet<>();
@Override
@SuppressWarnings({"unchecked", "varargs"})
public TraversalStrategies addStrategies(final TraversalStrategy<?>... strategies) {
- final List<TraversalStrategy<?>> concurrent = new ArrayList<>(this.traversalStrategies);
for (final TraversalStrategy<?> addStrategy : strategies) {
- for (final TraversalStrategy<?> currentStrategy : concurrent) {
- if (addStrategy.getClass().equals(currentStrategy.getClass()))
- this.traversalStrategies.remove(currentStrategy);
- }
+ this.traversalStrategies.remove(addStrategy);
}
Collections.addAll(this.traversalStrategies, strategies);
this.traversalStrategies = TraversalStrategies.sortStrategies(this.traversalStrategies);
@@ -68,7 +66,7 @@ public TraversalStrategies removeStrategies(final Class<? extends TraversalStrat
@Override
public List<TraversalStrategy<?>> toList() {
- return Collections.unmodifiableList(this.traversalStrategies);
+ return Collections.unmodifiableList(new ArrayList<>(this.traversalStrategies));
}
@Override
@@ -91,7 +89,7 @@ public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
public DefaultTraversalStrategies clone() {
try {
final DefaultTraversalStrategies clone = (DefaultTraversalStrategies) super.clone();
- clone.traversalStrategies = new ArrayList<>(this.traversalStrategies.size());
+ clone.traversalStrategies = new LinkedHashSet<>(this.traversalStrategies.size());
clone.traversalStrategies.addAll(this.traversalStrategies);
return clone;
} catch (final CloneNotSupportedException e) {
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
index bb58a069dc..1b90435169 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
@@ -36,8 +36,10 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
@@ -57,7 +59,7 @@
public class TraversalStrategiesTest {
@Test
- public void shouldAllowUserManipulationOfGlobalCache() throws Exception {
+ public void shouldAllowUserManipulationOfGlobalCache() {
///////////
// GRAPH //
///////////
@@ -225,7 +227,7 @@ public Configuration configuration() {
}
/**
- * Tests that {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies#sortStrategies(java.util.List)}
+ * Tests that {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies#sortStrategies(java.util.Set)}
* works as advertised. This class defines a bunch of dummy strategies which define an order. It is verified
* that the right order is being returned.
*/
@@ -243,30 +245,32 @@ public void testTraversalStrategySorting() {
n = new StrategyN(),
o = new StrategyO();
- List<TraversalStrategy<?>> s;
+ Set<TraversalStrategy<?>> s;
//Dependency well defined
- s = Arrays.asList(b, a);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(b, a));
s = TraversalStrategies.sortStrategies(s);
+ Iterator<TraversalStrategy<?>> it = s.iterator();
assertEquals(2, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
//No dependency
- s = Arrays.asList(c, a);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(c, a));
s = TraversalStrategies.sortStrategies(s);
assertEquals(2, s.size());
//Dependency well defined
- s = Arrays.asList(c, a, b);
+ s = new LinkedHashSet<>((Collection)Arrays.asList(c, a, b));
s = TraversalStrategies.sortStrategies(s);
assertEquals(3, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(c, s.get(2));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(c, it.next());
//Circular dependency => throws exception
- s = Arrays.asList(c, k, a, b);
+ s = new LinkedHashSet<>((Collection)Arrays.asList(c, k, a, b));
try {
TraversalStrategies.sortStrategies(s);
fail();
@@ -275,17 +279,18 @@ public void testTraversalStrategySorting() {
}
//Dependency well defined
- s = Arrays.asList(d, c, a, e, b);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(d, c, a, e, b));
s = TraversalStrategies.sortStrategies(s);
assertEquals(5, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(d, s.get(2));
- assertEquals(c, s.get(3));
- assertEquals(e, s.get(4));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(d, it.next());
+ assertEquals(c, it.next());
+ assertEquals(e, it.next());
//Circular dependency => throws exception
- s = Arrays.asList(d, c, k, a, e, b);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(d, c, k, a, e, b));
try {
TraversalStrategies.sortStrategies(s);
fail();
@@ -294,32 +299,36 @@ public void testTraversalStrategySorting() {
}
//Lots of strategies
- s = Arrays.asList(b, l, m, n, o, a);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(b, l, m, n, o, a));
s = TraversalStrategies.sortStrategies(s);
- assertTrue(s.indexOf(a) < s.indexOf(b));
+ List<TraversalStrategy<?>> list = new ArrayList<>(s);
+ assertTrue(list.indexOf(a) < list.indexOf(b));
// sort and then add more
- s = new ArrayList<>((List) Arrays.asList(b, a, c));
+ s = new LinkedHashSet<>(new LinkedHashSet<>((Collection) Arrays.asList(b, a, c)));
s = TraversalStrategies.sortStrategies(s);
assertEquals(3, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(c, s.get(2));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(c, it.next());
s.add(d);
s = TraversalStrategies.sortStrategies(s);
assertEquals(4, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(d, s.get(2));
- assertEquals(c, s.get(3));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(d, it.next());
+ assertEquals(c, it.next());
s.add(e);
s = TraversalStrategies.sortStrategies(s);
assertEquals(5, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(d, s.get(2));
- assertEquals(c, s.get(3));
- assertEquals(e, s.get(4));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(d, it.next());
+ assertEquals(c, it.next());
+ assertEquals(e, it.next());
}
@@ -428,34 +437,37 @@ public void testTraversalStrategySortingWithCategories() {
e = new StrategyEFinalization(),
k = new StrategyKVerification();
- List<TraversalStrategy<?>> s;
+ Set<TraversalStrategy<?>> s;
//in category sorting
- s = Arrays.asList(b, a);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(b, a));
s = TraversalStrategies.sortStrategies(s);
assertEquals(2, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
+ Iterator<TraversalStrategy<?>> it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
//mixed category sorting
- s = Arrays.asList(a, e, b, d);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(a, e, b, d));
s = TraversalStrategies.sortStrategies(s);
assertEquals(4, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(d, s.get(2));
- assertEquals(e, s.get(3));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(d, it.next());
+ assertEquals(e, it.next());
//full reverse sorting
- s = Arrays.asList(k, e, d, c, b, a);
+ s = new LinkedHashSet<>((Collection) Arrays.asList(k, e, d, c, b, a));
s = TraversalStrategies.sortStrategies(s);
assertEquals(6, s.size());
- assertEquals(a, s.get(0));
- assertEquals(b, s.get(1));
- assertEquals(c, s.get(2));
- assertEquals(d, s.get(3));
- assertEquals(e, s.get(4));
- assertEquals(k, s.get(5));
+ it = s.iterator();
+ assertEquals(a, it.next());
+ assertEquals(b, it.next());
+ assertEquals(c, it.next());
+ assertEquals(d, it.next());
+ assertEquals(e, it.next());
+ assertEquals(k, it.next());
}
public static class StrategyADecoration extends DummyStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services