From 6c4537acccfd82440ccc216df3414a2bc17ef406 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 2 Mar 2018 17:46:31 +0100 Subject: [PATCH] Create InvalidLightClassDataHolder for expect classes This fixes an exception from duplicateJvmSignature reporter Fixes "QuickFixTestGenerated$Override.testDontOfferToImplementMembersForExpectedClass" on teamcity --- .../asJava/classes/KtLightClassForSourceDeclaration.kt | 5 ++++- .../caches/resolve/IDELightClassGenerationSupport.kt | 9 +++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index 0c936e36a43..07b9033891c 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt @@ -341,7 +341,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC } fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? { - if (classOrObject.parentsWithSelf.filterIsInstance().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().any { it.hasExpectModifier() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 055b2f270aa..12ba23840f2 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -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) },