Enable ultra-light classes by default
^KT-29267 Fixed
This commit is contained in:
committed by
Igor Yakovlev
parent
e8fbd42f7c
commit
1b5f72bd59
+14
-6
@@ -70,7 +70,10 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import java.util.*
|
||||
import javax.swing.Icon
|
||||
|
||||
abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtClassOrObject) : KtLazyLightClass(classOrObject.manager),
|
||||
abstract class KtLightClassForSourceDeclaration(
|
||||
protected val classOrObject: KtClassOrObject,
|
||||
private val forceUsingOldLightClasses: Boolean = false
|
||||
) : KtLazyLightClass(classOrObject.manager),
|
||||
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
||||
|
||||
@@ -303,7 +306,12 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
||||
// inner classes with null names can't be searched for and can't be used from java anyway
|
||||
// we can't prohibit creating light classes with null names either since they can contain members
|
||||
.filter { it.name != null }
|
||||
.mapNotNullTo(result) { create(it) }
|
||||
.mapNotNullTo(result) {
|
||||
if (!forceUsingOldLightClasses)
|
||||
create(it)
|
||||
else
|
||||
createNoCache(it, forceUsingOldLightClasses = true)
|
||||
}
|
||||
|
||||
if (classOrObject.hasInterfaceDefaultImpls) {
|
||||
result.add(KtLightClassForInterfaceDefaultImpls(classOrObject))
|
||||
@@ -334,10 +342,10 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
||||
fun create(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? =
|
||||
CachedValuesManager.getCachedValue(classOrObject) {
|
||||
CachedValueProvider.Result
|
||||
.create(createNoCache(classOrObject), OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
|
||||
.create(createNoCache(classOrObject, KtUltraLightClass.forceUsingOldLightClasses), OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
|
||||
}
|
||||
|
||||
fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
|
||||
fun createNoCache(classOrObject: KtClassOrObject, forceUsingOldLightClasses: Boolean): KtLightClassForSourceDeclaration? {
|
||||
val containingFile = classOrObject.containingFile
|
||||
if (containingFile is KtCodeFragment) {
|
||||
// Avoid building light classes for code fragments
|
||||
@@ -348,7 +356,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
||||
return null
|
||||
}
|
||||
|
||||
if (KtUltraLightClass.forceUsingUltraLightClasses || Registry.`is`("kotlin.use.ultra.light.classes", false)) {
|
||||
if (!forceUsingOldLightClasses && Registry.`is`("kotlin.use.ultra.light.classes", true)) {
|
||||
LightClassGenerationSupport.getInstance(classOrObject.project).createUltraLightClass(classOrObject)?.let { return it }
|
||||
}
|
||||
|
||||
@@ -360,7 +368,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
||||
KtLightClassForLocalDeclaration(classOrObject)
|
||||
|
||||
else ->
|
||||
KtLightClassImpl(classOrObject)
|
||||
KtLightClassImpl(classOrObject, forceUsingOldLightClasses)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,10 @@ package org.jetbrains.kotlin.asJava.classes
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
// light class for top level or (inner/nested of top level) source declarations
|
||||
open class KtLightClassImpl(classOrObject: KtClassOrObject) : KtLightClassForSourceDeclaration(classOrObject) {
|
||||
open class KtLightClassImpl(
|
||||
classOrObject: KtClassOrObject,
|
||||
forceUsingOldLightClasses: Boolean = false
|
||||
) : KtLightClassForSourceDeclaration(classOrObject, forceUsingOldLightClasses) {
|
||||
override fun getQualifiedName() = classOrObject.fqName?.asString()
|
||||
|
||||
override fun getParent() = if (classOrObject.isTopLevel())
|
||||
@@ -28,4 +31,4 @@ open class KtLightClassImpl(classOrObject: KtClassOrObject) : KtLightClassForSou
|
||||
containingClass
|
||||
|
||||
override fun copy() = KtLightClassImpl(classOrObject.copy() as KtClassOrObject)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.intellij.psi.impl.light.LightMethodBuilder
|
||||
import com.intellij.psi.impl.light.LightTypeParameterListBuilder
|
||||
import com.intellij.psi.search.LocalSearchScope
|
||||
import com.intellij.psi.search.SearchScope
|
||||
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
|
||||
@@ -72,6 +73,21 @@ internal abstract class KtUltraLightMethod(
|
||||
|
||||
override fun getHierarchicalMethodSignature() = PsiSuperMethodImplUtil.getHierarchicalMethodSignature(this)
|
||||
|
||||
override fun findSuperMethodSignaturesIncludingStatic(checkAccess: Boolean): List<MethodSignatureBackedByPsiMethod> =
|
||||
PsiSuperMethodImplUtil.findSuperMethodSignaturesIncludingStatic(this, checkAccess)
|
||||
|
||||
override fun findDeepestSuperMethod() = PsiSuperMethodImplUtil.findDeepestSuperMethod(this)
|
||||
|
||||
override fun findDeepestSuperMethods(): Array<out PsiMethod> = PsiSuperMethodImplUtil.findDeepestSuperMethods(this)
|
||||
|
||||
override fun findSuperMethods(): Array<out PsiMethod> = PsiSuperMethodImplUtil.findSuperMethods(this)
|
||||
|
||||
override fun findSuperMethods(checkAccess: Boolean): Array<out PsiMethod> =
|
||||
PsiSuperMethodImplUtil.findSuperMethods(this, checkAccess)
|
||||
|
||||
override fun findSuperMethods(parentClass: PsiClass?): Array<out PsiMethod> =
|
||||
PsiSuperMethodImplUtil.findSuperMethods(this, parentClass)
|
||||
|
||||
override fun getThrowsList(): PsiReferenceList = _throwsList
|
||||
|
||||
abstract fun computeDescriptor(): FunctionDescriptor?
|
||||
|
||||
@@ -59,7 +59,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
// And usages of that property may be replaced with relevant registry key
|
||||
@Volatile
|
||||
@get:TestOnly
|
||||
var forceUsingUltraLightClasses = false
|
||||
var forceUsingOldLightClasses = false
|
||||
}
|
||||
|
||||
private val tooComplex: Boolean by lazyPub { support.isTooComplexForUltraLightGeneration(classOrObject) }
|
||||
|
||||
@@ -186,7 +186,7 @@ fun main(args: Array<String>) {
|
||||
model("kotlinAndJavaChecker/javaWithKotlin")
|
||||
}
|
||||
|
||||
testClass<AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest> {
|
||||
testClass<AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest> {
|
||||
model("kotlinAndJavaChecker/javaAgainstKotlin")
|
||||
model("kotlinAndJavaChecker/javaWithKotlin")
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ fun main(args: Array<String>) {
|
||||
model("kotlinAndJavaChecker/javaWithKotlin")
|
||||
}
|
||||
|
||||
testClass<AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest> {
|
||||
testClass<AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest> {
|
||||
model("kotlinAndJavaChecker/javaAgainstKotlin")
|
||||
model("kotlinAndJavaChecker/javaWithKotlin")
|
||||
}
|
||||
|
||||
+2
-1
@@ -65,7 +65,8 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
||||
if (element.shouldNotBeVisibleAsLightClass() ||
|
||||
element is KtObjectDeclaration && element.isObjectLiteral() ||
|
||||
element.isLocal ||
|
||||
element is KtEnumEntry
|
||||
element is KtEnumEntry ||
|
||||
element.containingKtFile.isScript()
|
||||
) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
<registryKey key="kotlin.use.ultra.light.classes"
|
||||
description="Whether to use an experimental implementation of Kotlin-as-Java classes"
|
||||
defaultValue="false"
|
||||
defaultValue="true"
|
||||
restartRequired="false"/>
|
||||
|
||||
<registryKey key="kotlin.uast.multiresolve.enabled"
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
<registryKey key="kotlin.use.ultra.light.classes"
|
||||
description="Whether to use an experimental implementation of Kotlin-as-Java classes"
|
||||
defaultValue="false"
|
||||
defaultValue="true"
|
||||
restartRequired="false"/>
|
||||
|
||||
<registryKey key="kotlin.uast.multiresolve.enabled"
|
||||
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// ULTRA_LIGHT_CLASSES
|
||||
package test
|
||||
|
||||
expect interface Closable {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.checkers
|
||||
|
||||
import org.jetbrains.kotlin.idea.perf.forceUsingUltraLightClassesForTest
|
||||
import org.jetbrains.kotlin.idea.perf.forceUsingOldLightClassesForTest
|
||||
|
||||
abstract class AbstractJavaAgainstKotlinSourceCheckerTest : AbstractJavaAgainstKotlinCheckerTest() {
|
||||
fun doTest(path: String) {
|
||||
@@ -13,9 +13,9 @@ abstract class AbstractJavaAgainstKotlinSourceCheckerTest : AbstractJavaAgainstK
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest : AbstractJavaAgainstKotlinSourceCheckerTest() {
|
||||
abstract class AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest : AbstractJavaAgainstKotlinSourceCheckerTest() {
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
forceUsingUltraLightClassesForTest()
|
||||
forceUsingOldLightClassesForTest()
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -18,11 +18,11 @@ import java.util.regex.Pattern;
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class JavaAgainstKotlinSourceCheckerWithUltraLightTestGenerated extends AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest {
|
||||
public class JavaAgainstKotlinSourceCheckerWithoutUltraLightTestGenerated extends AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest {
|
||||
@TestMetadata("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class JavaAgainstKotlin extends AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest {
|
||||
public static class JavaAgainstKotlin extends AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||
}
|
||||
@@ -195,7 +195,7 @@ public class JavaAgainstKotlinSourceCheckerWithUltraLightTestGenerated extends A
|
||||
@TestMetadata("idea/testData/kotlinAndJavaChecker/javaWithKotlin")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class JavaWithKotlin extends AbstractJavaAgainstKotlinSourceCheckerWithUltraLightTest {
|
||||
public static class JavaWithKotlin extends AbstractJavaAgainstKotlinSourceCheckerWithoutUltraLightTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.KotlinDaemonAnalyzerTestCase
|
||||
import org.jetbrains.kotlin.idea.caches.lightClasses.IDELightClassConstructionContext
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.LightClassLazinessChecker.Tracker.Level.*
|
||||
import org.jetbrains.kotlin.idea.completion.test.withServiceRegistered
|
||||
import org.jetbrains.kotlin.idea.perf.forceUsingOldLightClassesForTest
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
@@ -44,6 +45,7 @@ import kotlin.test.assertTrue
|
||||
|
||||
abstract class AbstractIdeLightClassTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
fun doTest(testDataPath: String) {
|
||||
forceUsingOldLightClassesForTest()
|
||||
val extraFilePath = when {
|
||||
testDataPath.endsWith(".kt") -> testDataPath.replace(".kt", ".extra.kt")
|
||||
testDataPath.endsWith(".kts") -> testDataPath.replace(".kts", ".extra.kts")
|
||||
|
||||
@@ -49,8 +49,8 @@ public class LightClassEqualsTest extends KotlinLightCodeInsightFixtureTestCase
|
||||
private static void doTestEquals(@Nullable KtClassOrObject origin) {
|
||||
assertNotNull(origin);
|
||||
|
||||
PsiClass lightClass1 = KtLightClassForSourceDeclaration.Companion.createNoCache(origin);
|
||||
PsiClass lightClass2 = KtLightClassForSourceDeclaration.Companion.createNoCache(origin);
|
||||
PsiClass lightClass1 = KtLightClassForSourceDeclaration.Companion.createNoCache(origin, true);
|
||||
PsiClass lightClass2 = KtLightClassForSourceDeclaration.Companion.createNoCache(origin, true);
|
||||
assertNotNull(lightClass1);
|
||||
assertNotNull(lightClass2);
|
||||
|
||||
|
||||
-5
@@ -13,12 +13,10 @@ import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.idea.codeInsight.GotoSuperActionHandler
|
||||
import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure
|
||||
import org.jetbrains.kotlin.idea.perf.forceUsingUltraLightClassesForTest
|
||||
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.idea.test.extractMarkerOffset
|
||||
import org.jetbrains.kotlin.idea.test.findFileWithCaret
|
||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractKotlinNavigationMultiModuleTest : AbstractMultiModuleTest() {
|
||||
@@ -27,9 +25,6 @@ abstract class AbstractKotlinNavigationMultiModuleTest : AbstractMultiModuleTest
|
||||
protected fun doTest(testDataDir: String) {
|
||||
setupMppProjectFromDirStructure(File(testDataDir))
|
||||
val file = project.findFileWithCaret()
|
||||
if (InTextDirectivesUtils.isDirectiveDefined(file.text, "ULTRA_LIGHT_CLASSES")) {
|
||||
forceUsingUltraLightClassesForTest()
|
||||
}
|
||||
|
||||
val doc = PsiDocumentManager.getInstance(myProject).getDocument(file)!!
|
||||
val offset = doc.extractMarkerOffset(project, "<caret>")
|
||||
|
||||
@@ -19,10 +19,10 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.junit.Assert
|
||||
|
||||
fun UsefulTestCase.forceUsingUltraLightClassesForTest() {
|
||||
KtUltraLightClass.forceUsingUltraLightClasses = true
|
||||
fun UsefulTestCase.forceUsingOldLightClassesForTest() {
|
||||
KtUltraLightClass.forceUsingOldLightClasses = true
|
||||
Disposer.register(testRootDisposable, Disposable {
|
||||
KtUltraLightClass.forceUsingUltraLightClasses = false
|
||||
KtUltraLightClass.forceUsingOldLightClasses = false
|
||||
})
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ object UltraLightChecker {
|
||||
SyntaxTraverser.psiTraverser(file).filter(KtClassOrObject::class.java).toList()
|
||||
|
||||
fun checkClassEquivalence(ktClass: KtClassOrObject): KtUltraLightClass? {
|
||||
val gold = KtLightClassForSourceDeclaration.create(ktClass)
|
||||
val gold = KtLightClassForSourceDeclaration.createNoCache(ktClass, forceUsingOldLightClasses = true)
|
||||
val ultraLightClass = LightClassGenerationSupport.getInstance(ktClass.project).createUltraLightClass(ktClass) ?: return null
|
||||
|
||||
if (gold != null) {
|
||||
|
||||
-2
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.asJava.toLightMethods
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.perf.forceUsingUltraLightClassesForTest
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog.Companion.getTypeCodeFragmentContext
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinChangeSignatureDialog.Companion.getTypeInfo
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.ui.KotlinMethodNode
|
||||
@@ -568,7 +567,6 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
fun testConvertParameterToReceiverForMember1() = doTest { receiverParameterInfo = newParameters[0] }
|
||||
|
||||
fun testConvertParameterToReceiverForMemberUltraLight() {
|
||||
forceUsingUltraLightClassesForTest()
|
||||
doTest { receiverParameterInfo = newParameters[0] }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user