(U|S)LC: fix getText for modifier list / accessor
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 d8b532f..d5cf041 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 @@
}
}
- override fun getTextOffset(): Int {
+ private inline fun <R> 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 5d9644b..bbb4914 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 @@
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 9ff558d..feab1a4 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.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 @@
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
- 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 d0855ae..bc21981 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.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 @@
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
- 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()
}
}