aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Andreevich <andreevich.egor@gmail.com>2019-04-16 16:03:09 -0400
committerGitHub <noreply@github.com>2019-04-16 16:03:09 -0400
commit0f93da9a3d9a1da8d29fc993409fcf83d40452bc (patch)
tree3b4b454110655b9f91cdf7a5a19a19b9c7071f44
parentc4ac60e768c573cd1f682dac4d6922c05071c16c (diff)
parent02ece26b2e05f3b1306f67aacc3a8932a3e51d51 (diff)
downloadjavapoet-0f93da9a3d9a1da8d29fc993409fcf83d40452bc.tar.gz
Merge pull request #720 from ronshapiro/ClassName_simpleNames
Memoize ClassName.simpleNames()
-rw-r--r--src/main/java/com/squareup/javapoet/ClassName.java17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/main/java/com/squareup/javapoet/ClassName.java b/src/main/java/com/squareup/javapoet/ClassName.java
index e044985..b8dbd31 100644
--- a/src/main/java/com/squareup/javapoet/ClassName.java
+++ b/src/main/java/com/squareup/javapoet/ClassName.java
@@ -41,6 +41,8 @@ public final class ClassName extends TypeName implements Comparable<ClassName> {
/** This class name, like "Entry" for java.util.Map.Entry. */
final String simpleName;
+ private List<String> simpleNames;
+
/** The full class name like "java.util.Map.Entry". */
final String canonicalName;
@@ -108,11 +110,18 @@ public final class ClassName extends TypeName implements Comparable<ClassName> {
}
public List<String> simpleNames() {
- List<String> simpleNames = new ArrayList<>();
- if (enclosingClassName != null) {
- simpleNames.addAll(enclosingClassName().simpleNames());
+ if (simpleNames != null) {
+ return simpleNames;
+ }
+
+ if (enclosingClassName == null) {
+ simpleNames = Collections.singletonList(simpleName);
+ } else {
+ List<String> mutableNames = new ArrayList<>();
+ mutableNames.addAll(enclosingClassName().simpleNames());
+ mutableNames.add(simpleName);
+ simpleNames = Collections.unmodifiableList(mutableNames);
}
- simpleNames.add(simpleName);
return simpleNames;
}