diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index 716d3fe0bfe..2c2f0d84793 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt @@ -341,7 +341,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC return null } - if (Registry.`is`("kotlin.use.ultra.light.classes", false)) { + if (KtUltraLightClass.forceUsingUltraLightClasses || Registry.`is`("kotlin.use.ultra.light.classes", false)) { LightClassGenerationSupport.getInstance(classOrObject.project).createUltraLightClass(classOrObject)?.let { return it } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index ac91448ca5d..8f89260d45a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -14,6 +14,7 @@ import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.impl.light.* import com.intellij.psi.util.TypeConversionUtil import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.builder.LightClassData import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration @@ -47,6 +48,15 @@ import org.jetbrains.kotlin.types.KotlinType class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: UltraLightSupport) : KtLightClassImpl(classOrObject) { + companion object { + + // This property may be removed once IntelliJ versions earlier than 2018.3 become unsupported + // And usages of that property may be replaced with relevant registry change + @Volatile + @TestOnly + var forceUsingUltraLightClasses = false + } + private val tooComplex: Boolean by lazyPub { support.isTooComplexForUltraLightGeneration(classOrObject) } override fun isFinal(isFinalByPsi: Boolean) = if (tooComplex) super.isFinal(isFinalByPsi) else isFinalByPsi @@ -658,4 +668,4 @@ interface UltraLightSupport { val moduleName: String fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair? fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean -} \ No newline at end of file +} diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt index 34709159339..8212bf4c26b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/perf/UltraLightChecker.kt @@ -5,7 +5,10 @@ package org.jetbrains.kotlin.idea.perf +import com.intellij.openapi.Disposable +import com.intellij.openapi.util.Disposer import com.intellij.psi.* +import com.intellij.testFramework.UsefulTestCase import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration @@ -14,6 +17,13 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.junit.Assert +fun UsefulTestCase.forceUsingUltraLightClassesForTest() { + KtUltraLightClass.forceUsingUltraLightClasses = true + Disposer.register(testRootDisposable, Disposable { + KtUltraLightClass.forceUsingUltraLightClasses = false + }) +} + @TestOnly object UltraLightChecker { fun checkClassEquivalence(file: KtFile) { @@ -122,4 +132,4 @@ object UltraLightChecker { "}" } -} \ No newline at end of file +}