From b5b1b38cb015271e2f6e9544015c1c269c9721c5 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Thu, 16 Dec 2021 09:21:50 +0100 Subject: [PATCH] [FE] Do not repeatedly load inner classes from class files. Java protobufs generate a lot of inner classes and when compiling Kotlin wrappers for those Java protobufs the inner classes can be loaded hundreds of times leading to out of memory. This change avoids reloading by fixing a bug in the cache implementation that caused inner classes to not be cached. --- .../kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt index 619f8a67c3a..692a3b9d4f8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt @@ -100,7 +100,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ classId.outerClassId?.let { outerClassId -> val outerClass = outerClassFromRequest ?: findClass(outerClassId, searchScope) - return if (outerClass is BinaryJavaClass) + return@getOrPut if (outerClass is BinaryJavaClass) outerClass.findInnerClass(classId.shortClassName, classFileContentFromRequest) else outerClass?.findInnerClass(classId.shortClassName)