diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt index d8b532f9258..d5cf041cce8 100644 --- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt +++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/KtLightMethodImpl.kt @@ -122,22 +122,26 @@ abstract class KtLightMethodImpl protected constructor( } } - override fun getTextOffset(): Int { + private inline fun getTextVariantFromPropertyAccessorIfNeeded( + retriever: (KtPropertyAccessor) -> R + ): R? { val auxiliaryOrigin = lightMemberOrigin?.auxiliaryOriginalElement - if (auxiliaryOrigin is KtPropertyAccessor) { - return auxiliaryOrigin.textOffset - } + return (auxiliaryOrigin as? KtPropertyAccessor)?.let(retriever) + } - 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 { - val auxiliaryOrigin = lightMemberOrigin?.auxiliaryOriginalElement - if (auxiliaryOrigin is KtPropertyAccessor) { - return auxiliaryOrigin.textRange - } - - return super.getTextRange() + return getTextVariantFromPropertyAccessorIfNeeded(KtPropertyAccessor::getTextRange) + ?: super.getTextRange() } abstract override fun getThrowsList(): PsiReferenceList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index 5d9644bb23e..bbb4914deb4 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -217,6 +217,10 @@ internal class SymbolLightAccessorMethod( return _defaultValue } + override fun getText(): String { + return lightMemberOrigin?.auxiliaryOriginalElement?.text ?: super.getText() + } + override fun getTextOffset(): Int { return lightMemberOrigin?.auxiliaryOriginalElement?.textOffset ?: super.getTextOffset() } 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 9ff558dacd7..feab1a41d48 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 @@ -13,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.KtModifierList import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.psiUtil.hasBody @@ -55,20 +56,26 @@ internal class SymbolLightMemberModifierList>( override fun findAnnotation(qualifiedName: String) = annotations.firstOrNull { it.qualifiedName == qualifiedName } - override fun getTextOffset(): Int { + private inline fun getTextVariantFromModifierListOfPropertyAccessorIfNeeded( + retriever: (KtModifierList) -> R + ): R? { val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement - return if (auxiliaryOrigin is KtPropertyAccessor) - auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() - else - super.getTextOffset() + return (auxiliaryOrigin as? KtPropertyAccessor)?.modifierList?.let(retriever) + } + + override fun getText(): String { + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getText) + ?: super.getText() + } + + override fun getTextOffset(): Int { + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextOffset) + ?: 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() + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextRange) + ?: super.getTextRange() } override fun equals(other: Any?): Boolean = this === other 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 d0855aefee8..bc219813214 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 @@ -26,11 +26,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor 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.* import org.jetbrains.kotlin.psi.psiUtil.hasBody import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind @@ -61,20 +57,26 @@ private class KtUltraLightMethodModifierList( override fun copy() = KtUltraLightMethodModifierList(support, owner, delegate) - override fun getTextOffset(): Int { + private inline fun getTextVariantFromModifierListOfPropertyAccessorIfNeeded( + retriever: (KtModifierList) -> R + ): R? { val auxiliaryOrigin = (owner as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement - return if (auxiliaryOrigin is KtPropertyAccessor) - auxiliaryOrigin.modifierList?.textOffset ?: super.getTextOffset() - else - super.getTextOffset() + return (auxiliaryOrigin as? KtPropertyAccessor)?.modifierList?.let(retriever) + } + + override fun getText(): String { + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getText) + ?: super.getText() + } + + override fun getTextOffset(): Int { + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextOffset) + ?: 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() + return getTextVariantFromModifierListOfPropertyAccessorIfNeeded(KtModifierList::getTextRange) + ?: super.getTextRange() } }