diff options
author | Egor Andreevich <andreevich.egor@gmail.com> | 2019-02-07 16:12:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-07 16:12:39 -0500 |
commit | 218e4ad9c84fc72e6a56e20c114b221f35d2e26e (patch) | |
tree | c2f68bdfa528692eadba8c0eb4bea03921c5b02e | |
parent | d00c7867970e9837e6b6316cb1e4659d680c84c0 (diff) | |
parent | dc30890a5002fc65eefb94a570ff4aff2d6f8577 (diff) | |
download | javapoet-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.java | 6 | ||||
-rw-r--r-- | src/main/java/com/squareup/javapoet/TypeSpec.java | 6 |
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) { |