FIR LC: get origin of property accessors via light member origin
This commit is contained in:
committed by
Ilya Kirillov
parent
dbce9b3d45
commit
24abf7168c
+21
-2
@@ -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
|
||||
)
|
||||
|
||||
+3
-3
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user