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:
@@ -79,6 +79,7 @@ public abstract class KotlinBuiltIns {
|
|||||||
private final NotNullLazyValue<PackageFragments> packageFragments;
|
private final NotNullLazyValue<PackageFragments> packageFragments;
|
||||||
|
|
||||||
private final MemoizedFunctionToNotNull<Integer, ClassDescriptor> suspendFunctionClasses;
|
private final MemoizedFunctionToNotNull<Integer, ClassDescriptor> suspendFunctionClasses;
|
||||||
|
private final MemoizedFunctionToNotNull<Name, ClassDescriptor> builtInClassesByName;
|
||||||
|
|
||||||
private final StorageManager storageManager;
|
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() {
|
protected void createBuiltInsModule() {
|
||||||
@@ -415,7 +423,7 @@ public abstract class KotlinBuiltIns {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ClassDescriptor getBuiltInClassByName(@NotNull Name simpleName) {
|
public ClassDescriptor getBuiltInClassByName(@NotNull Name simpleName) {
|
||||||
return getBuiltInClassByName(simpleName, getBuiltInsPackageFragment());
|
return builtInClassesByName.invoke(simpleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
Reference in New Issue
Block a user