Support forcing usage of ultra-light classes in tests
This commit is contained in:
+1
-1
@@ -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 }
|
||||
}
|
||||
|
||||
|
||||
@@ -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<KtAnnotationEntry, AnnotationDescriptor>?
|
||||
fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
"}"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user