Skip to content

Commit

Permalink
Cache all TypeElement instances (#1107)
Browse files Browse the repository at this point in the history
  • Loading branch information
nakamura-to committed May 18, 2024
1 parent b5958e4 commit e3da1f4
Showing 1 changed file with 12 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public class MoreElements implements Elements {

private final Elements elementUtils;

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

public MoreElements(Context ctx, ProcessingEnvironment env) {
assertNotNull(ctx, env);
Expand All @@ -61,7 +61,17 @@ public PackageElement getPackageElement(CharSequence name) {
// delegate to elementUtils
@Override
public TypeElement getTypeElement(CharSequence canonicalName) {
return elementUtils.getTypeElement(canonicalName);
assertNotNull(canonicalName);
return getTypeElementInternal(canonicalName.toString());
}

public TypeElement getTypeElement(Class<?> clazz) {
assertNotNull(clazz);
return getTypeElementInternal(clazz.getCanonicalName());
}

private TypeElement getTypeElementInternal(String canonicalName) {
return typeElementCache.computeIfAbsent(canonicalName, elementUtils::getTypeElement);
}

// delegate to elementUtils
Expand Down Expand Up @@ -208,12 +218,6 @@ public TypeElement getTypeElementFromBinaryName(String binaryName) {
}
}

public TypeElement getTypeElement(Class<?> clazz) {
assertNotNull(clazz);
return typeElementCache.computeIfAbsent(
clazz, k -> elementUtils.getTypeElement(k.getCanonicalName()));
}

private TypeElement getEnclosedTypeElement(TypeElement typeElement, List<String> enclosedNames) {
TypeElement enclosing = typeElement;
for (String enclosedName : enclosedNames) {
Expand Down

0 comments on commit e3da1f4

Please sign in to comment.