Better validity check for kotlin light element

There're exceptions from `isWritable` method in light classes caused by
accessing invalid elements.

Override KtLightMemberImpl implementation to avoid activating
decompiler during validity check.
This commit is contained in:
Nikolay Krasko
2019-06-18 13:42:29 +03:00
parent 60c4eb68ff
commit 353ca9752f
4 changed files with 23 additions and 4 deletions
@@ -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<T : PsiMember> : 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<PsiField> {
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<PsiMethod> {
override val member: PsiMethod
get() = psiMethod
override fun isEquivalentTo(other: LightMemberOrigin?): Boolean {
if (other !is LightMemberOriginForCompiledMethod) return false
return psiMethod.isEquivalentTo(other.psiMethod)