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
|
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 }
|
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.impl.light.*
|
||||||
import com.intellij.psi.util.TypeConversionUtil
|
import com.intellij.psi.util.TypeConversionUtil
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
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) :
|
class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: UltraLightSupport) :
|
||||||
KtLightClassImpl(classOrObject) {
|
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) }
|
private val tooComplex: Boolean by lazyPub { support.isTooComplexForUltraLightGeneration(classOrObject) }
|
||||||
|
|
||||||
override fun isFinal(isFinalByPsi: Boolean) = if (tooComplex) super.isFinal(isFinalByPsi) else isFinalByPsi
|
override fun isFinal(isFinalByPsi: Boolean) = if (tooComplex) super.isFinal(isFinalByPsi) else isFinalByPsi
|
||||||
@@ -658,4 +668,4 @@ interface UltraLightSupport {
|
|||||||
val moduleName: String
|
val moduleName: String
|
||||||
fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair<KtAnnotationEntry, AnnotationDescriptor>?
|
fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair<KtAnnotationEntry, AnnotationDescriptor>?
|
||||||
fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean
|
fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.perf
|
package org.jetbrains.kotlin.idea.perf
|
||||||
|
|
||||||
|
import com.intellij.openapi.Disposable
|
||||||
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
|
import com.intellij.testFramework.UsefulTestCase
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
|
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.jetbrains.kotlin.psi.KtFile
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
|
||||||
|
fun UsefulTestCase.forceUsingUltraLightClassesForTest() {
|
||||||
|
KtUltraLightClass.forceUsingUltraLightClasses = true
|
||||||
|
Disposer.register(testRootDisposable, Disposable {
|
||||||
|
KtUltraLightClass.forceUsingUltraLightClasses = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
object UltraLightChecker {
|
object UltraLightChecker {
|
||||||
fun checkClassEquivalence(file: KtFile) {
|
fun checkClassEquivalence(file: KtFile) {
|
||||||
@@ -122,4 +132,4 @@ object UltraLightChecker {
|
|||||||
"}"
|
"}"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user