From 3a9650d0fca0bbdda24ddc5c9ad093c676e5215b Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 5 Oct 2017 19:07:30 +0300 Subject: [PATCH] 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 --- .../org/jetbrains/kotlin/builtins/KotlinBuiltIns.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 6e40c4674f3..dc4f99d4bab 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -79,6 +79,7 @@ public abstract class KotlinBuiltIns { private final NotNullLazyValue packageFragments; private final MemoizedFunctionToNotNull suspendFunctionClasses; + private final MemoizedFunctionToNotNull builtInClassesByName; private final StorageManager storageManager; @@ -135,6 +136,13 @@ public abstract class KotlinBuiltIns { ); } }); + + this.builtInClassesByName = storageManager.createMemoizedFunction(new Function1() { + @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