[AA K2] KtFirMemberSymbolPointer: migrate owner to pointer
^KT-54311
This commit is contained in:
committed by
Space Team
parent
2ac85b96e5
commit
85072b0c96
+6
-7
@@ -1,27 +1,27 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirConstructorSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.createSignature
|
||||
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.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
@@ -64,9 +64,8 @@ internal class KtFirConstructorSymbol(
|
||||
if (symbolKind == KtSymbolKind.LOCAL) {
|
||||
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException("constructor")
|
||||
}
|
||||
val ownerClassId = containingClassIdIfNonLocal
|
||||
?: error("ClassId should present for member declaration")
|
||||
return KtFirConstructorSymbolPointer(ownerClassId, isPrimary, firSymbol.fir.createSignature())
|
||||
|
||||
KtFirConstructorSymbolPointer(requireOwnerPointer(), isPrimary, firSymbol.fir.createSignature())
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||
|
||||
+2
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberFunctionSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelFunctionSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.createSignature
|
||||
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.impl.base.util.kotlinFunctionInvokeCallableIds
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
@@ -97,7 +98,7 @@ internal class KtFirFunctionSymbol(
|
||||
KtSymbolKind.TOP_LEVEL -> KtFirTopLevelFunctionSymbolPointer(firSymbol.callableId, firSymbol.createSignature())
|
||||
KtSymbolKind.CLASS_MEMBER ->
|
||||
KtFirMemberFunctionSymbolPointer(
|
||||
firSymbol.containingClassLookupTag()?.classId ?: error("ClassId should not be null for member function"),
|
||||
requireOwnerPointer(),
|
||||
firSymbol.name,
|
||||
firSymbol.createSignature()
|
||||
)
|
||||
|
||||
+5
-8
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -11,16 +11,16 @@ import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirJavaFieldSymbolPointer
|
||||
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.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtJavaFieldSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modalityOrFinal
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
@@ -53,10 +53,7 @@ internal class KtFirJavaFieldSymbol(
|
||||
override val isStatic: Boolean get() = withValidityAssertion { firSymbol.isStatic }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion {
|
||||
val containingClassId = firSymbol.containingClassLookupTag()?.classId
|
||||
?: error("Cannot find parent class for java field $callableIdIfNonLocal")
|
||||
|
||||
return KtFirJavaFieldSymbolPointer(containingClassId, name)
|
||||
KtFirJavaFieldSymbolPointer(requireOwnerPointer(), name)
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberPropertySymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelPropertySymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.createSignature
|
||||
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.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
@@ -132,7 +133,7 @@ internal class KtFirKotlinPropertySymbol(
|
||||
KtSymbolKind.TOP_LEVEL -> KtFirTopLevelPropertySymbolPointer(firSymbol.callableId, firSymbol.createSignature())
|
||||
KtSymbolKind.CLASS_MEMBER ->
|
||||
KtFirMemberPropertySymbolPointer(
|
||||
firSymbol.containingClassLookupTag()?.classId ?: error("ClassId should not be null for member property"),
|
||||
requireOwnerPointer(),
|
||||
firSymbol.name,
|
||||
firSymbol.createSignature()
|
||||
)
|
||||
|
||||
+5
-8
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -11,16 +11,16 @@ import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirJavaSyntheticPropertySymbolPointer
|
||||
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.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||
@@ -89,10 +89,7 @@ internal class KtFirSyntheticJavaPropertySymbol(
|
||||
override val origin: KtSymbolOrigin get() = withValidityAssertion { KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
|
||||
val containingClassId = firSymbol.containingClassLookupTag()?.classId
|
||||
?: error("Cannot find parent class for synthetic java property $callableIdIfNonLocal")
|
||||
|
||||
return KtFirJavaSyntheticPropertySymbolPointer(containingClassId, name)
|
||||
KtFirJavaSyntheticPropertySymbolPointer(requireOwnerPointer(), name)
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean = symbolEquals(other)
|
||||
|
||||
+10
-9
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -7,26 +7,27 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
internal class KtFirConstructorSymbolPointer(
|
||||
ownerClassId: ClassId,
|
||||
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
private val isPrimary: Boolean,
|
||||
private val signature: IdSignature
|
||||
) : KtFirMemberSymbolPointer<KtConstructorSymbol>(ownerClassId) {
|
||||
private val signature: IdSignature,
|
||||
) : KtFirMemberSymbolPointer<KtConstructorSymbol>(ownerPointer) {
|
||||
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
): KtConstructorSymbol? {
|
||||
val firConstructor =
|
||||
candidates.findDeclarationWithSignature<FirConstructor>(signature, firSession) { processDeclaredConstructors(it) }
|
||||
?: return null
|
||||
val firConstructor = candidates.findDeclarationWithSignature<FirConstructor>(signature, firSession) {
|
||||
processDeclaredConstructors(it)
|
||||
} ?: return null
|
||||
|
||||
if (firConstructor.isPrimary != isPrimary) return null
|
||||
return firSymbolBuilder.functionLikeBuilder.buildConstructorSymbol(firConstructor.symbol)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -7,17 +7,18 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtJavaFieldSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.getProperties
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class KtFirJavaFieldSymbolPointer(
|
||||
containingClassId: ClassId,
|
||||
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
private val fieldName: Name
|
||||
) : KtFirMemberSymbolPointer<KtJavaFieldSymbol>(containingClassId) {
|
||||
) : KtFirMemberSymbolPointer<KtJavaFieldSymbol>(ownerPointer) {
|
||||
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
@@ -30,4 +31,4 @@ internal class KtFirJavaFieldSymbolPointer(
|
||||
|
||||
return firSymbolBuilder.variableLikeBuilder.buildFieldSymbol(javaField.symbol)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -7,17 +7,18 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSyntheticJavaPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.getProperties
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class KtFirJavaSyntheticPropertySymbolPointer(
|
||||
containingClassId: ClassId,
|
||||
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
private val propertyName: Name
|
||||
) : KtFirMemberSymbolPointer<KtSyntheticJavaPropertySymbol>(containingClassId) {
|
||||
) : KtFirMemberSymbolPointer<KtSyntheticJavaPropertySymbol>(ownerPointer) {
|
||||
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
@@ -30,4 +31,4 @@ internal class KtFirJavaSyntheticPropertySymbolPointer(
|
||||
|
||||
return firSymbolBuilder.variableLikeBuilder.buildSyntheticJavaPropertySymbol(syntheticProperty.symbol)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -7,18 +7,19 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class KtFirMemberFunctionSymbolPointer(
|
||||
ownerClassId: ClassId,
|
||||
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
private val name: Name,
|
||||
private val signature: IdSignature
|
||||
) : KtFirMemberSymbolPointer<KtFunctionSymbol>(ownerClassId) {
|
||||
) : KtFirMemberSymbolPointer<KtFunctionSymbol>(ownerPointer) {
|
||||
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
@@ -29,4 +30,3 @@ internal class KtFirMemberFunctionSymbolPointer(
|
||||
return firSymbolBuilder.functionLikeBuilder.buildFunctionSymbol(firFunction.symbol)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -7,18 +7,19 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
internal class KtFirMemberPropertySymbolPointer(
|
||||
ownerClassId: ClassId,
|
||||
ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
private val name: Name,
|
||||
private val signature: IdSignature
|
||||
) : KtFirMemberSymbolPointer<KtKotlinPropertySymbol>(ownerClassId) {
|
||||
) : KtFirMemberSymbolPointer<KtKotlinPropertySymbol>(ownerPointer) {
|
||||
override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
@@ -28,4 +29,3 @@ internal class KtFirMemberPropertySymbolPointer(
|
||||
return firSymbolBuilder.variableLikeBuilder.buildVariableSymbol(firProperty.symbol) as? KtKotlinPropertySymbol
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+32
-13
@@ -1,40 +1,59 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.analyze
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
|
||||
internal abstract class KtFirMemberSymbolPointer<S : KtSymbol>(
|
||||
private val ownerClassId: ClassId,
|
||||
private val ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
) : KtSymbolPointer<S>() {
|
||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||
final override fun restoreSymbol(analysisSession: KtAnalysisSession): S? {
|
||||
require(analysisSession is KtFirAnalysisSession)
|
||||
val owner = analysisSession.getClassLikeSymbol(ownerClassId) as? FirRegularClass
|
||||
?: return null
|
||||
val ownerSymbol = with(analysisSession) {
|
||||
ownerPointer.restoreSymbol() as? KtClassOrObjectSymbol ?: return null
|
||||
}
|
||||
|
||||
val owner = ownerSymbol.firSymbol as? FirClassSymbol ?: return null
|
||||
val firSession = analysisSession.useSiteSession
|
||||
val scope = owner.unsubstitutedScope(
|
||||
firSession,
|
||||
analysisSession.getScopeSessionFor(firSession),
|
||||
withForcedTypeCalculator = false
|
||||
withForcedTypeCalculator = false,
|
||||
)
|
||||
return analysisSession.chooseCandidateAndCreateSymbol(scope, owner.moduleData.session)
|
||||
|
||||
return analysisSession.chooseCandidateAndCreateSymbol(scope, firSession)
|
||||
}
|
||||
|
||||
protected abstract fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(
|
||||
candidates: FirScope,
|
||||
firSession: FirSession
|
||||
): S?
|
||||
protected abstract fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol(candidates: FirScope, firSession: FirSession): S?
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
internal fun KtSymbol.requireOwnerPointer(): KtSymbolPointer<KtSymbolWithMembers> {
|
||||
val symbolWithMembers = getContainingSymbol()
|
||||
requireNotNull(symbolWithMembers) { "should present for member declaration" }
|
||||
requireIsInstance<KtSymbolWithMembers>(symbolWithMembers)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return symbolWithMembers.createPointer() as KtSymbolPointer<KtSymbolWithMembers>
|
||||
}
|
||||
|
||||
internal fun KtFirSymbol<*>.requireOwnerPointer(): KtSymbolPointer<KtSymbolWithMembers> = analyze(firResolveSession.useSiteKtModule) {
|
||||
requireOwnerPointer()
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
|
||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
||||
// DO_NOT_CHECK_SYMBOL_RESTORE_K1
|
||||
package test
|
||||
|
||||
class SomeClass
|
||||
|
||||
Reference in New Issue
Block a user