aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Andreevich <andreevich.egor@gmail.com>2019-02-07 16:12:39 -0500
committerGitHub <noreply@github.com>2019-02-07 16:12:39 -0500
commit218e4ad9c84fc72e6a56e20c114b221f35d2e26e (patch)
treec2f68bdfa528692eadba8c0eb4bea03921c5b02e
parentd00c7867970e9837e6b6316cb1e4659d680c84c0 (diff)
parentdc30890a5002fc65eefb94a570ff4aff2d6f8577 (diff)
downloadjavapoet-218e4ad9c84fc72e6a56e20c114b221f35d2e26e.tar.gz
Merge pull request #705 from ronshapiro/CodeWriter_resolve
Remove n^2 algorithm in CodeWriter.resolve() by precomputing all of the nested simple names of a TypeSpec
-rw-r--r--src/main/java/com/squareup/javapoet/CodeWriter.java6
-rw-r--r--src/main/java/com/squareup/javapoet/TypeSpec.java6
2 files changed, 8 insertions, 4 deletions
diff --git a/src/main/java/com/squareup/javapoet/CodeWriter.java b/src/main/java/com/squareup/javapoet/CodeWriter.java
index ac8178f..b2b088b 100644
--- a/src/main/java/com/squareup/javapoet/CodeWriter.java
+++ b/src/main/java/com/squareup/javapoet/CodeWriter.java
@@ -420,10 +420,8 @@ final class CodeWriter {
// Match a child of the current (potentially nested) class.
for (int i = typeSpecStack.size() - 1; i >= 0; i--) {
TypeSpec typeSpec = typeSpecStack.get(i);
- for (TypeSpec visibleChild : typeSpec.typeSpecs) {
- if (Objects.equals(visibleChild.name, simpleName)) {
- return stackClassName(i, simpleName);
- }
+ if (typeSpec.nestedTypesSimpleNames.contains(simpleName)) {
+ return stackClassName(i, simpleName);
}
}
diff --git a/src/main/java/com/squareup/javapoet/TypeSpec.java b/src/main/java/com/squareup/javapoet/TypeSpec.java
index c315579..3346763 100644
--- a/src/main/java/com/squareup/javapoet/TypeSpec.java
+++ b/src/main/java/com/squareup/javapoet/TypeSpec.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@@ -53,6 +54,7 @@ public final class TypeSpec {
public final CodeBlock initializerBlock;
public final List<MethodSpec> methodSpecs;
public final List<TypeSpec> typeSpecs;
+ final Set<String> nestedTypesSimpleNames;
public final List<Element> originatingElements;
private TypeSpec(Builder builder) {
@@ -72,11 +74,14 @@ public final class TypeSpec {
this.methodSpecs = Util.immutableList(builder.methodSpecs);
this.typeSpecs = Util.immutableList(builder.typeSpecs);
+ nestedTypesSimpleNames = new HashSet<>(builder.typeSpecs.size());
List<Element> originatingElementsMutable = new ArrayList<>();
originatingElementsMutable.addAll(builder.originatingElements);
for (TypeSpec typeSpec : builder.typeSpecs) {
+ nestedTypesSimpleNames.add(typeSpec.name);
originatingElementsMutable.addAll(typeSpec.originatingElements);
}
+
this.originatingElements = Util.immutableList(originatingElementsMutable);
}
@@ -102,6 +107,7 @@ public final class TypeSpec {
this.methodSpecs = Collections.emptyList();
this.typeSpecs = Collections.emptyList();
this.originatingElements = Collections.emptyList();
+ this.nestedTypesSimpleNames = Collections.emptySet();
}
public boolean hasModifier(Modifier modifier) {