Create InvalidLightClassDataHolder for expect classes
This fixes an exception from duplicateJvmSignature reporter Fixes "QuickFixTestGenerated$Override.testDontOfferToImplementMembersForExpectedClass" on teamcity
This commit is contained in:
+4
-1
@@ -341,7 +341,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
|
fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
|
||||||
if (classOrObject.parentsWithSelf.filterIsInstance<KtClassOrObject>().any { it.hasExpectModifier() }) {
|
if (classOrObject.shouldNotBeVisibleAsLightClass()) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -515,3 +515,6 @@ fun KtClassOrObject.defaultJavaAncestorQualifiedName(): String? {
|
|||||||
else -> CommonClassNames.JAVA_LANG_OBJECT
|
else -> CommonClassNames.JAVA_LANG_OBJECT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun KtClassOrObject.shouldNotBeVisibleAsLightClass() =
|
||||||
|
parentsWithSelf.filterIsInstance<KtClassOrObject>().any { it.hasExpectModifier() }
|
||||||
|
|||||||
+5
-4
@@ -26,6 +26,7 @@ import com.intellij.psi.util.PsiTreeUtil
|
|||||||
import org.jetbrains.kotlin.asJava.LightClassBuilder
|
import org.jetbrains.kotlin.asJava.LightClassBuilder
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory
|
||||||
|
import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.classes.*
|
import org.jetbrains.kotlin.asJava.classes.*
|
||||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||||
@@ -55,16 +56,16 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
private val psiManager: PsiManager = PsiManager.getInstance(project)
|
private val psiManager: PsiManager = PsiManager.getInstance(project)
|
||||||
|
|
||||||
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
|
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
|
||||||
return if (classOrObject.isLocal) {
|
return when {
|
||||||
LazyLightClassDataHolder.ForClass(
|
classOrObject.shouldNotBeVisibleAsLightClass() -> InvalidLightClassDataHolder
|
||||||
|
classOrObject.isLocal -> LazyLightClassDataHolder.ForClass(
|
||||||
builder,
|
builder,
|
||||||
classOrObject.project,
|
classOrObject.project,
|
||||||
exactContextProvider = { IDELightClassContexts.contextForLocalClassOrObject(classOrObject) },
|
exactContextProvider = { IDELightClassContexts.contextForLocalClassOrObject(classOrObject) },
|
||||||
dummyContextProvider = null,
|
dummyContextProvider = null,
|
||||||
isLocal = true
|
isLocal = true
|
||||||
)
|
)
|
||||||
} else {
|
else -> LazyLightClassDataHolder.ForClass(
|
||||||
LazyLightClassDataHolder.ForClass(
|
|
||||||
builder,
|
builder,
|
||||||
classOrObject.project,
|
classOrObject.project,
|
||||||
exactContextProvider = { IDELightClassContexts.contextForNonLocalClassOrObject(classOrObject) },
|
exactContextProvider = { IDELightClassContexts.contextForNonLocalClassOrObject(classOrObject) },
|
||||||
|
|||||||
Reference in New Issue
Block a user