Create InvalidLightClassDataHolder for expect classes

This fixes an exception from duplicateJvmSignature reporter
Fixes "QuickFixTestGenerated$Override.testDontOfferToImplementMembersForExpectedClass" on teamcity
This commit is contained in:
Pavel V. Talanov
2018-03-02 17:46:31 +01:00
parent 89c82a85d0
commit 6c4537accc
2 changed files with 9 additions and 5 deletions
@@ -341,7 +341,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
}
fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? {
if (classOrObject.parentsWithSelf.filterIsInstance<KtClassOrObject>().any { it.hasExpectModifier() }) {
if (classOrObject.shouldNotBeVisibleAsLightClass()) {
return null
}
@@ -515,3 +515,6 @@ fun KtClassOrObject.defaultJavaAncestorQualifiedName(): String? {
else -> CommonClassNames.JAVA_LANG_OBJECT
}
}
fun KtClassOrObject.shouldNotBeVisibleAsLightClass() =
parentsWithSelf.filterIsInstance<KtClassOrObject>().any { it.hasExpectModifier() }
@@ -26,6 +26,7 @@ import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.LightClassBuilder
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
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.classes.*
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)
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
return if (classOrObject.isLocal) {
LazyLightClassDataHolder.ForClass(
return when {
classOrObject.shouldNotBeVisibleAsLightClass() -> InvalidLightClassDataHolder
classOrObject.isLocal -> LazyLightClassDataHolder.ForClass(
builder,
classOrObject.project,
exactContextProvider = { IDELightClassContexts.contextForLocalClassOrObject(classOrObject) },
dummyContextProvider = null,
isLocal = true
)
} else {
LazyLightClassDataHolder.ForClass(
else -> LazyLightClassDataHolder.ForClass(
builder,
classOrObject.project,
exactContextProvider = { IDELightClassContexts.contextForNonLocalClassOrObject(classOrObject) },