(S|U)LC: fix getTextOffset and getTextRange for modifier list of accessors

in a similar way 36e1149e did for property accessors
This commit is contained in:
Jinseong Jeon
2022-10-12 22:47:16 -07:00
committed by Ilya Kirillov
parent 19151fa866
commit e1344968ec
2 changed files with 38 additions and 0 deletions
@@ -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<T : KtLightMember<*>>(
@@ -50,8 +52,25 @@ internal class SymbolLightMemberModifierList<T : KtLightMember<*>>(
get() = invalidAccess()
override fun getAnnotations(): Array<out PsiAnnotation> = 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()
@@ -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(