From 7485ae83266e23a92703e5f277602f213742bdc9 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Wed, 22 Aug 2018 09:01:08 -0300 Subject: [PATCH 1/3] repleace String loop to String builder --- .../jsr223/AbstractGremlinScriptEngineFactory.java | 6 +++--- .../process/traversal/dsl/GremlinDslProcessor.java | 12 +++++++----- .../traversal/util/DefaultTraversalMetrics.java | 14 +++++++------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java index e07e8840d83..e54b8cc39e8 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java @@ -107,12 +107,12 @@ public Object getParameter(final String key) { */ @Override public String getProgram(final String... statements) { - String program = ""; + StringBuilder program = new StringBuilder(); for (String statement : statements) { - program = program + statement + System.lineSeparator(); + program.append(statement).append(System.lineSeparator()); } - return program; + return program.toString(); } } 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 ec6379f27d1..e5fd37a7f87 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 @@ -429,23 +429,25 @@ private MethodSpec constructMethod(final Element element, final ClassName return private void addMethodBody(final MethodSpec.Builder methodToAdd, final ExecutableElement templateMethod, final String startBody, final String endBody, final Object... statementArgs) { final List parameters = templateMethod.getParameters(); - String body = startBody; + StringBuilder body = new StringBuilder(startBody); final int numberOfParams = parameters.size(); for (int ix = 0; ix < numberOfParams; ix++) { final VariableElement param = parameters.get(ix); methodToAdd.addParameter(ParameterSpec.get(param)); - body = body + param.getSimpleName(); - if (ix < numberOfParams - 1) body = body + ","; + body.append(param.getSimpleName()); + if (ix < numberOfParams - 1) { + body.append(","); + } } - body = body + endBody; + body.append(endBody); // treat a final array as a varargs param if (!parameters.isEmpty() && parameters.get(parameters.size() - 1).asType().getKind() == TypeKind.ARRAY) methodToAdd.varargs(true); - methodToAdd.addStatement(body, statementArgs); + methodToAdd.addStatement(body.toString(), statementArgs); } private TypeName getOverridenReturnTypeDefinition(final ClassName returnClazz, final String[] typeValues) { diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java index c5f290a4c98..e155ab69468 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java @@ -109,14 +109,14 @@ public String toString() { private void appendMetrics(final Collection metrics, final StringBuilder sb, final int indent) { // Append each StepMetric's row. indexToLabelMap values are ordered by index. for (Metrics m : metrics) { - String rowName = m.getName(); + StringBuilder rowName = new StringBuilder(m.getName()); // Handle indentation for (int ii = 0; ii < indent; ii++) { - rowName = " " + rowName; + rowName.insert(0, " "); } // Abbreviate if necessary - rowName = StringUtils.abbreviate(rowName, 50); + rowName = new StringBuilder(StringUtils.abbreviate(rowName.toString(), 50)); // Grab the values final Long itemCount = m.getCount(ELEMENT_COUNT_ID); @@ -125,7 +125,7 @@ private void appendMetrics(final Collection metrics, final St // Build the row string - sb.append(String.format("%n%-50s", rowName)); + sb.append(String.format("%n%-50s", rowName.toString())); if (itemCount != null) { sb.append(String.format(" %21d", itemCount)); @@ -187,11 +187,11 @@ private static String[] splitOnSize(final String text, final int size) { private static String padLeft(final String text, final int amountToPad) { // not sure why this method needed to exist. stupid string format stuff and commons utilities wouldn't // work for some reason in the context this method was used above. - String newText = text; + StringBuilder newText = new StringBuilder(text); for (int ix = 0; ix < amountToPad; ix++) { - newText = " " + newText; + newText.insert(0, " "); } - return newText; + return newText.toString(); } private void computeTotals() { From f6ecbff6e036bb246efed3b2db5664a154b14442 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Wed, 22 Aug 2018 09:19:20 -0300 Subject: [PATCH 2/3] makes the StringBuilder final --- .../jsr223/AbstractGremlinScriptEngineFactory.java | 2 +- .../process/traversal/dsl/GremlinDslProcessor.java | 2 +- .../process/traversal/util/DefaultTraversalMetrics.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java index e54b8cc39e8..69f4f736e62 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/AbstractGremlinScriptEngineFactory.java @@ -107,7 +107,7 @@ public Object getParameter(final String key) { */ @Override public String getProgram(final String... statements) { - StringBuilder program = new StringBuilder(); + final StringBuilder program = new StringBuilder(); for (String statement : statements) { program.append(statement).append(System.lineSeparator()); 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 e5fd37a7f87..b86a9b80d13 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 @@ -429,7 +429,7 @@ private MethodSpec constructMethod(final Element element, final ClassName return private void addMethodBody(final MethodSpec.Builder methodToAdd, final ExecutableElement templateMethod, final String startBody, final String endBody, final Object... statementArgs) { final List parameters = templateMethod.getParameters(); - StringBuilder body = new StringBuilder(startBody); + final StringBuilder body = new StringBuilder(startBody); final int numberOfParams = parameters.size(); for (int ix = 0; ix < numberOfParams; ix++) { diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java index e155ab69468..2a1b036318f 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java @@ -109,14 +109,14 @@ public String toString() { private void appendMetrics(final Collection metrics, final StringBuilder sb, final int indent) { // Append each StepMetric's row. indexToLabelMap values are ordered by index. for (Metrics m : metrics) { - StringBuilder rowName = new StringBuilder(m.getName()); + final StringBuilder metricName = new StringBuilder(m.getName()); // Handle indentation for (int ii = 0; ii < indent; ii++) { - rowName.insert(0, " "); + metricName.insert(0, " "); } // Abbreviate if necessary - rowName = new StringBuilder(StringUtils.abbreviate(rowName.toString(), 50)); + final StringBuilder rowName = new StringBuilder(StringUtils.abbreviate(metricName.toString(), 50)); // Grab the values final Long itemCount = m.getCount(ELEMENT_COUNT_ID); @@ -187,7 +187,7 @@ private static String[] splitOnSize(final String text, final int size) { private static String padLeft(final String text, final int amountToPad) { // not sure why this method needed to exist. stupid string format stuff and commons utilities wouldn't // work for some reason in the context this method was used above. - StringBuilder newText = new StringBuilder(text); + final StringBuilder newText = new StringBuilder(text); for (int ix = 0; ix < amountToPad; ix++) { newText.insert(0, " "); } From ca3a3432789d5e5443cb9bacb3dd934937c95797 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Wed, 22 Aug 2018 10:26:05 -0300 Subject: [PATCH 3/3] changes the StringBuilder operation to optmizes the byte array operation --- .../traversal/util/DefaultTraversalMetrics.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java index 2a1b036318f..055e3ab5adc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java @@ -109,12 +109,13 @@ public String toString() { private void appendMetrics(final Collection metrics, final StringBuilder sb, final int indent) { // Append each StepMetric's row. indexToLabelMap values are ordered by index. for (Metrics m : metrics) { - final StringBuilder metricName = new StringBuilder(m.getName()); + final StringBuilder metricName = new StringBuilder(); // Handle indentation for (int ii = 0; ii < indent; ii++) { - metricName.insert(0, " "); + metricName.append(" "); } + metricName.append(m.getName()); // Abbreviate if necessary final StringBuilder rowName = new StringBuilder(StringUtils.abbreviate(metricName.toString(), 50)); @@ -187,10 +188,11 @@ private static String[] splitOnSize(final String text, final int size) { private static String padLeft(final String text, final int amountToPad) { // not sure why this method needed to exist. stupid string format stuff and commons utilities wouldn't // work for some reason in the context this method was used above. - final StringBuilder newText = new StringBuilder(text); + final StringBuilder newText = new StringBuilder(); for (int ix = 0; ix < amountToPad; ix++) { - newText.insert(0, " "); + newText.append(" "); } + newText.append(text); return newText.toString(); }