Skip to content

Commit e3da1f4

Browse files
authored
Cache all TypeElement instances (#1107)
1 parent b5958e4 commit e3da1f4

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

doma-processor/src/main/java/org/seasar/doma/internal/apt/MoreElements.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class MoreElements implements Elements {
4444

4545
private final Elements elementUtils;
4646

47-
private final Map<Class<?>, TypeElement> typeElementCache = new HashMap<>(64);
47+
private final Map<String, TypeElement> typeElementCache = new HashMap<>(64);
4848

4949
public MoreElements(Context ctx, ProcessingEnvironment env) {
5050
assertNotNull(ctx, env);
@@ -61,7 +61,17 @@ public PackageElement getPackageElement(CharSequence name) {
6161
// delegate to elementUtils
6262
@Override
6363
public TypeElement getTypeElement(CharSequence canonicalName) {
64-
return elementUtils.getTypeElement(canonicalName);
64+
assertNotNull(canonicalName);
65+
return getTypeElementInternal(canonicalName.toString());
66+
}
67+
68+
public TypeElement getTypeElement(Class<?> clazz) {
69+
assertNotNull(clazz);
70+
return getTypeElementInternal(clazz.getCanonicalName());
71+
}
72+
73+
private TypeElement getTypeElementInternal(String canonicalName) {
74+
return typeElementCache.computeIfAbsent(canonicalName, elementUtils::getTypeElement);
6575
}
6676

6777
// delegate to elementUtils
@@ -208,12 +218,6 @@ public TypeElement getTypeElementFromBinaryName(String binaryName) {
208218
}
209219
}
210220

211-
public TypeElement getTypeElement(Class<?> clazz) {
212-
assertNotNull(clazz);
213-
return typeElementCache.computeIfAbsent(
214-
clazz, k -> elementUtils.getTypeElement(k.getCanonicalName()));
215-
}
216-
217221
private TypeElement getEnclosedTypeElement(TypeElement typeElement, List<String> enclosedNames) {
218222
TypeElement enclosing = typeElement;
219223
for (String enclosedName : enclosedNames) {

0 commit comments

Comments
 (0)