[AA K2] implement symbol pointers for property accessors
^KT-54311
This commit is contained in:
committed by
Space Team
parent
32c38c0ae4
commit
48f7cdfaa1
+5
-2
@@ -9,6 +9,8 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirPropertyAccessorSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
@@ -23,7 +25,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
|
|
||||||
@@ -76,7 +77,9 @@ internal class KtFirPropertyGetterSymbol(
|
|||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
|
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
TODO("Creating pointers for getters from library is not supported yet")
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
KtFirPropertyAccessorSymbolPointer(requireOwnerPointer(), true) as KtSymbolPointer<KtPropertyGetterSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||||
|
|||||||
+5
-2
@@ -9,6 +9,8 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirPropertyAccessorSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
@@ -23,7 +25,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.scope
|
import org.jetbrains.kotlin.fir.resolve.scope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenProperties
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenProperties
|
||||||
@@ -99,7 +100,9 @@ internal class KtFirPropertySetterSymbol(
|
|||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
|
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
TODO("Creating pointers for setters from library is not supported yet")
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
KtFirPropertyAccessorSymbolPointer(requireOwnerPointer(), true) as KtSymbolPointer<KtPropertySetterSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirKotlinPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyAccessorSymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
|
|
||||||
|
internal class KtFirPropertyAccessorSymbolPointer(
|
||||||
|
private val propertySymbolPointer: KtSymbolPointer<KtKotlinPropertySymbol>,
|
||||||
|
private val isGetter: Boolean,
|
||||||
|
) : KtSymbolPointer<KtPropertyAccessorSymbol>() {
|
||||||
|
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||||
|
override fun restoreSymbol(analysisSession: KtAnalysisSession): KtPropertyAccessorSymbol? {
|
||||||
|
require(analysisSession is KtFirAnalysisSession)
|
||||||
|
val propertySymbol = with(analysisSession) {
|
||||||
|
propertySymbolPointer.restoreSymbol()
|
||||||
|
} ?: return null
|
||||||
|
|
||||||
|
check(propertySymbol is KtFirKotlinPropertySymbol)
|
||||||
|
return if (isGetter) propertySymbol.getter else propertySymbol.setter
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
|
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE_K1
|
||||||
annotation class PropertyAnnotation
|
annotation class PropertyAnnotation
|
||||||
annotation class FieldAnnotation
|
annotation class FieldAnnotation
|
||||||
annotation class GetAnnotation
|
annotation class GetAnnotation
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
|
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE_K1
|
||||||
annotation class PropertyAnnotation
|
annotation class PropertyAnnotation
|
||||||
annotation class GetAnnotation
|
annotation class GetAnnotation
|
||||||
annotation class ExplicitGetAnnotation
|
annotation class ExplicitGetAnnotation
|
||||||
|
|||||||
Reference in New Issue
Block a user