From 24abf7168c60c08cffd4df907662163c7058000c Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 26 Aug 2021 16:07:34 -0700 Subject: [PATCH] FIR LC: get origin of property accessors via light member origin --- .../symbol/classes/firLightClassUtils.kt | 23 +++++++++++++++++-- .../FirLightAccessorMethodForSymbol.kt | 6 ++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt index e8520205b62..ea66bd25005 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt @@ -10,6 +10,7 @@ import com.intellij.psi.PsiReferenceList import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker +import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE @@ -32,6 +33,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClass +import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind import java.util.* fun getOrCreateFirLightClass(classOrObject: KtClassOrObject): KtLightClass? = @@ -207,16 +209,26 @@ internal fun FirLightClassBase.createMethods( return true } + val originalElement = declaration.psi as? KtDeclaration + val getter = declaration.getter?.takeIf { it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER) } if (getter != null) { + val lightMemberOrigin = originalElement?.let { + LightMemberOriginForDeclaration( + originalElement = it, + originKind = JvmDeclarationOriginKind.OTHER, + auxiliaryOriginalElement = getter.psi as? KtDeclaration + ) + } + result.add( FirLightAccessorMethodForSymbol( propertyAccessorSymbol = getter, containingPropertySymbol = declaration, - lightMemberOrigin = null, + lightMemberOrigin = lightMemberOrigin, containingClass = this@createMethods, isTopLevel = isTopLevel ) @@ -228,11 +240,18 @@ internal fun FirLightClassBase.createMethods( } if (setter != null) { + val lightMemberOrigin = originalElement?.let { + LightMemberOriginForDeclaration( + originalElement = it, + originKind = JvmDeclarationOriginKind.OTHER, + auxiliaryOriginalElement = setter.psi as? KtDeclaration + ) + } result.add( FirLightAccessorMethodForSymbol( propertyAccessorSymbol = setter, containingPropertySymbol = declaration, - lightMemberOrigin = null, + lightMemberOrigin = lightMemberOrigin, containingClass = this@createMethods, isTopLevel = isTopLevel ) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt index f95aea20e7c..7db7b64715d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightAccessorMethodForSymbol.kt @@ -58,8 +58,8 @@ internal class FirLightAccessorMethodForSymbol( override fun isVarArgs(): Boolean = false - override val kotlinOrigin: KtDeclaration? = - (propertyAccessorSymbol.psi ?: containingPropertySymbol.psi) as? KtDeclaration + override val kotlinOrigin: KtDeclaration? + get() = lightMemberOrigin?.originalElement private val accessorSite get() = @@ -186,4 +186,4 @@ internal class FirLightAccessorMethodForSymbol( override fun getParameterList(): PsiParameterList = _parametersList override fun isValid(): Boolean = super.isValid() && propertyAccessorSymbol.isValid() -} \ No newline at end of file +}