(U|S)LC: fix getText for modifier list / accessor

This commit is contained in:
Jinseong Jeon
2022-10-12 23:21:21 -07:00
committed by Ilya Kirillov
parent e1344968ec
commit dbf0ba442a
4 changed files with 53 additions and 36 deletions
@@ -122,22 +122,26 @@ abstract class KtLightMethodImpl protected constructor(
} }
} }
override fun getTextOffset(): Int { private inline fun <R> getTextVariantFromPropertyAccessorIfNeeded(
retriever: (KtPropertyAccessor) -> R
): R? {
val auxiliaryOrigin = lightMemberOrigin?.auxiliaryOriginalElement val auxiliaryOrigin = lightMemberOrigin?.auxiliaryOriginalElement
if (auxiliaryOrigin is KtPropertyAccessor) { return (auxiliaryOrigin as? KtPropertyAccessor)?.let(retriever)
return auxiliaryOrigin.textOffset }
}
return super.getTextOffset() override fun getText(): String {
return getTextVariantFromPropertyAccessorIfNeeded(KtPropertyAccessor::getText)
?: super.getText()
}
override fun getTextOffset(): Int {
return getTextVariantFromPropertyAccessorIfNeeded(KtPropertyAccessor::getTextOffset)
?: super.getTextOffset()
} }
override fun getTextRange(): TextRange { override fun getTextRange(): TextRange {
val auxiliaryOrigin = lightMemberOrigin?.auxiliaryOriginalElement return getTextVariantFromPropertyAccessorIfNeeded(KtPropertyAccessor::getTextRange)
if (auxiliaryOrigin is KtPropertyAccessor) { ?: super.getTextRange()
return auxiliaryOrigin.textRange
}
return super.getTextRange()
} }
abstract override fun getThrowsList(): PsiReferenceList abstract override fun getThrowsList(): PsiReferenceList
@@ -217,6 +217,10 @@ internal class SymbolLightAccessorMethod(
return _defaultValue return _defaultValue
} }
override fun getText(): String {
return lightMemberOrigin?.auxiliaryOriginalElement?.text ?: super.getText()
}
override fun getTextOffset(): Int { override fun getTextOffset(): Int {
return lightMemberOrigin?.auxiliaryOriginalElement?.textOffset ?: super.getTextOffset() return lightMemberOrigin?.auxiliaryOriginalElement?.textOffset ?: super.getTextOffset()
} }
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.KtLightMember
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.KtModifierList
import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtPropertyAccessor
import org.jetbrains.kotlin.psi.psiUtil.hasBody import org.jetbrains.kotlin.psi.psiUtil.hasBody
@@ -55,20 +56,26 @@ internal class SymbolLightMemberModifierList<T : KtLightMember<*>>(
override fun findAnnotation(qualifiedName: String) = annotations.firstOrNull { it.qualifiedName == qualifiedName } override fun findAnnotation(qualifiedName: String) = annotations.firstOrNull { it.qualifiedName == qualifiedName }
override fun getTextOffset(): Int { private inline fun <R> getTextVariantFromModifierListOfPropertyAccessorIfNeeded(
retriever: (KtModifierList) -> R
): R? {
val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement
return if (auxiliaryOrigin is KtPropertyAccessor) return (auxiliaryOrigin as? KtPropertyAccessor)?.modifierList?.let(retriever)
auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() }
else
super.getTextOffset() override fun getText(): String {
return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getText)
?: super.getText()
}
override fun getTextOffset(): Int {
return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextOffset)
?: super.getTextOffset()
} }
override fun getTextRange(): TextRange { override fun getTextRange(): TextRange {
val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextRange)
return if (auxiliaryOrigin is KtPropertyAccessor) ?: super.getTextRange()
auxiliaryOrigin.modifierList?.textRange ?: super.getTextRange()
else
super.getTextRange()
} }
override fun equals(other: Any?): Boolean = this === other override fun equals(other: Any?): Boolean = this === other
@@ -26,11 +26,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.*
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.psi.psiUtil.hasBody
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
@@ -61,20 +57,26 @@ private class KtUltraLightMethodModifierList(
override fun copy() = KtUltraLightMethodModifierList(support, owner, delegate) override fun copy() = KtUltraLightMethodModifierList(support, owner, delegate)
override fun getTextOffset(): Int { private inline fun <R> getTextVariantFromModifierListOfPropertyAccessorIfNeeded(
retriever: (KtModifierList) -> R
): R? {
val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement
return if (auxiliaryOrigin is KtPropertyAccessor) return (auxiliaryOrigin as? KtPropertyAccessor)?.modifierList?.let(retriever)
auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() }
else
super.getTextOffset() override fun getText(): String {
return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getText)
?: super.getText()
}
override fun getTextOffset(): Int {
return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextOffset)
?: super.getTextOffset()
} }
override fun getTextRange(): TextRange { override fun getTextRange(): TextRange {
val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextRange)
return if (auxiliaryOrigin is KtPropertyAccessor) ?: super.getTextRange()
auxiliaryOrigin.modifierList?.textRange ?: super.getTextRange()
else
super.getTextRange()
} }
} }