Introduce cache for KotlinBuiltins::builtInClassesByName

There are a lot of places requesting nothing/any/.. instances
and just asking the scopes isn't very effecient:
see org.jetbrains.kotlin.builtins.KotlinBuiltIns#createPackage
having ChainedMemberScope and a `map` call
This commit is contained in:
Denis Zharkov
2017-10-05 19:07:30 +03:00
parent e3b453ada4
commit 3a9650d0fc
@@ -79,6 +79,7 @@ public abstract class KotlinBuiltIns {
private final NotNullLazyValue<PackageFragments> packageFragments;
private final MemoizedFunctionToNotNull<Integer, ClassDescriptor> suspendFunctionClasses;
private final MemoizedFunctionToNotNull<Name, ClassDescriptor> builtInClassesByName;
private final StorageManager storageManager;
@@ -135,6 +136,13 @@ public abstract class KotlinBuiltIns {
);
}
});
this.builtInClassesByName = storageManager.createMemoizedFunction(new Function1<Name, ClassDescriptor>() {
@Override
public ClassDescriptor invoke(Name name) {
return getBuiltInClassByName(name, getBuiltInsPackageFragment());
}
});
}
protected void createBuiltInsModule() {
@@ -415,7 +423,7 @@ public abstract class KotlinBuiltIns {
@NotNull
public ClassDescriptor getBuiltInClassByName(@NotNull Name simpleName) {
return getBuiltInClassByName(simpleName, getBuiltInsPackageFragment());
return builtInClassesByName.invoke(simpleName);
}
@NotNull