From e1344968ec2ef800233963c4d5735df377e00a5f Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 12 Oct 2022 22:47:16 -0700 Subject: [PATCH] (S|U)LC: fix getTextOffset and getTextRange for modifier list of accessors in a similar way 36e1149e did for property accessors --- .../SymbolLightMemberModifierList.kt | 19 +++++++++++++++++++ .../asJava/classes/ultraLightMethods.kt | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/SymbolLightMemberModifierList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/SymbolLightMemberModifierList.kt index 8ad37ae5269..9ff558dacd7 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/SymbolLightMemberModifierList.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/SymbolLightMemberModifierList.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.light.classes.symbol.modifierLists +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiModifier import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation @@ -12,6 +13,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase +import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.psiUtil.hasBody internal class SymbolLightMemberModifierList>( @@ -50,8 +52,25 @@ internal class SymbolLightMemberModifierList>( get() = invalidAccess() override fun getAnnotations(): Array = annotations.toTypedArray() + override fun findAnnotation(qualifiedName: String) = annotations.firstOrNull { it.qualifiedName == qualifiedName } + override fun getTextOffset(): Int { + val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement + return if (auxiliaryOrigin is KtPropertyAccessor) + auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() + else + super.getTextOffset() + } + + override fun getTextRange(): TextRange { + val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement + return if (auxiliaryOrigin is KtPropertyAccessor) + auxiliaryOrigin.modifierList?.textRange ?: super.getTextRange() + else + super.getTextRange() + } + override fun equals(other: Any?): Boolean = this === other override fun hashCode(): Int = kotlinOrigin.hashCode() diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt index dee595e655b..d0855aefee8 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMethods.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.asJava.classes +import com.intellij.openapi.util.TextRange import com.intellij.psi.* import com.intellij.psi.impl.PsiImplUtil import com.intellij.psi.impl.PsiSuperMethodImplUtil @@ -15,6 +16,7 @@ import com.intellij.psi.util.MethodSignature import com.intellij.psi.util.MethodSignatureBackedByPsiMethod import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation +import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl import org.jetbrains.kotlin.asJava.elements.KtUltraLightModifierList import org.jetbrains.kotlin.codegen.FunctionCodegen @@ -27,6 +29,7 @@ import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtTypeParameterListOwner import org.jetbrains.kotlin.psi.psiUtil.hasBody import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -57,6 +60,22 @@ private class KtUltraLightMethodModifierList( private fun isImplementationInInterface() = owner.containingClass.isInterface && owner.kotlinOrigin?.hasBody() == true override fun copy() = KtUltraLightMethodModifierList(support, owner, delegate) + + override fun getTextOffset(): Int { + val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement + return if (auxiliaryOrigin is KtPropertyAccessor) + auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() + else + super.getTextOffset() + } + + override fun getTextRange(): TextRange { + val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement + return if (auxiliaryOrigin is KtPropertyAccessor) + auxiliaryOrigin.modifierList?.textRange ?: super.getTextRange() + else + super.getTextRange() + } } internal abstract class KtUltraLightMethod(