diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt index 156bd910352..e5711ec62b2 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightElementOrigin.kt @@ -53,6 +53,7 @@ interface LightMemberOrigin : LightElementOrigin { val parametersForJvmOverloads: List? get() = null val auxiliaryOriginalElement: KtDeclaration? get() = null + fun isValid(): Boolean fun isEquivalentTo(other: LightMemberOrigin?): Boolean fun copy(): LightMemberOrigin } @@ -63,6 +64,8 @@ data class LightMemberOriginForDeclaration( override val parametersForJvmOverloads: List? = null, override val auxiliaryOriginalElement: KtDeclaration? = null ) : LightMemberOrigin { + override fun isValid(): Boolean = originalElement.isValid + override fun isEquivalentTo(other: LightMemberOrigin?): Boolean { if (other !is LightMemberOriginForDeclaration) return false return originalElement.isEquivalentTo(other.originalElement) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt index 58c4a083ca6..40cdf7aee00 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightElementBase.kt @@ -38,7 +38,7 @@ abstract class KtLightElementBase(private val parent: PsiElement): LightElement( override fun getUseScope() = kotlinOrigin?.useScope ?: super.getUseScope() override fun getContainingFile() = parent.containingFile override fun getPresentation() = (kotlinOrigin ?: this).let { ItemPresentationProviders.getItemPresentation(it) } - override fun isValid() = parent.isValid + override fun isValid() = parent.isValid && (kotlinOrigin?.isValid != false) override fun findElementAt(offset: Int) = kotlinOrigin?.findElementAt(offset) override fun isEquivalentTo(another: PsiElement?): Boolean = super.isEquivalentTo(another) || kotlinOrigin?.isEquivalentTo(another) == true diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt index 3925b845202..11c8aa7d476 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightMemberImpl.kt @@ -65,6 +65,10 @@ abstract class KtLightMemberImpl( override fun isDeprecated() = (clsDelegate as PsiDocCommentOwner).isDeprecated + override fun isValid(): Boolean { + return parent.isValid && lightMemberOrigin?.isValid() != false + } + override fun isEquivalentTo(another: PsiElement?): Boolean { if (lightMemberOrigin?.originalElement?.isEquivalentTo(another) == true) return true diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt index 5c879456983..4c84a0ba17c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/LightMemberOriginForCompiledElement.kt @@ -42,13 +42,20 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor import org.jetbrains.kotlin.type.MapPsiToAsmDesc -interface LightMemberOriginForCompiledElement : LightMemberOrigin { +interface LightMemberOriginForCompiledElement : LightMemberOrigin { + val member: T + override val originKind: JvmDeclarationOriginKind get() = JvmDeclarationOriginKind.OTHER + + override fun isValid(): Boolean = member.isValid } -data class LightMemberOriginForCompiledField(val psiField: PsiField, val file: KtClsFile) : LightMemberOriginForCompiledElement { +data class LightMemberOriginForCompiledField(val psiField: PsiField, val file: KtClsFile) : LightMemberOriginForCompiledElement { + override val member: PsiField + get() = psiField + override fun copy(): LightMemberOrigin { return LightMemberOriginForCompiledField(psiField.copy() as PsiField, file) } @@ -65,7 +72,12 @@ data class LightMemberOriginForCompiledField(val psiField: PsiField, val file: K } } -data class LightMemberOriginForCompiledMethod(val psiMethod: PsiMethod, val file: KtClsFile) : LightMemberOriginForCompiledElement { +data class LightMemberOriginForCompiledMethod(val psiMethod: PsiMethod, val file: KtClsFile) : + LightMemberOriginForCompiledElement { + + override val member: PsiMethod + get() = psiMethod + override fun isEquivalentTo(other: LightMemberOrigin?): Boolean { if (other !is LightMemberOriginForCompiledMethod) return false return psiMethod.isEquivalentTo(other.psiMethod)