[FIR] Add symbol to all declarations. Get rid of FirSymbolOwner
This commit is contained in:
+4
-4
@@ -13,7 +13,7 @@ abstract class ContextByDesignationCollector<C : Any>(private val designation: F
|
||||
private val designationState = FirDesignationState(designation)
|
||||
|
||||
protected abstract fun getCurrentContext(): C
|
||||
protected abstract fun goToNestedDeclaration(declaration: FirDeclaration)
|
||||
protected abstract fun goToNestedDeclaration(declaration: FirDeclaration<*>)
|
||||
|
||||
fun getCollectedContext(): C {
|
||||
return context
|
||||
@@ -47,14 +47,14 @@ private class FirDesignationState(val designation: FirDeclarationDesignation) {
|
||||
|
||||
fun canGoNext(): Boolean = currentIndex < designation.path.size
|
||||
|
||||
val currentDeclarationIfPresent: FirDeclaration?
|
||||
val currentDeclarationIfPresent: FirDeclaration<*>?
|
||||
get() = when (currentIndex) {
|
||||
in designation.path.indices -> designation.path[currentIndex]
|
||||
designation.path.size -> designation.declaration
|
||||
else -> null
|
||||
}
|
||||
|
||||
val currentDeclaration: FirDeclaration
|
||||
val currentDeclaration: FirDeclaration<*>
|
||||
get() = currentDeclarationIfPresent
|
||||
?: error("Went inside target declaration")
|
||||
|
||||
@@ -73,4 +73,4 @@ private class FirDesignationState(val designation: FirDeclarationDesignation) {
|
||||
throw IndexOutOfBoundsException()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -59,13 +59,13 @@ internal class FirModuleResolveStateDepended(
|
||||
override fun getOrBuildFirFile(ktFile: KtFile): FirFile =
|
||||
originalState.getOrBuildFirFile(ktFile)
|
||||
|
||||
override fun <D : FirDeclaration> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D =
|
||||
override fun <D : FirDeclaration<*>> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D =
|
||||
originalState.resolveFirToPhase(declaration, toPhase)
|
||||
|
||||
override fun <D : FirDeclaration> resolveFirToResolveType(declaration: D, type: ResolveType): D =
|
||||
override fun <D : FirDeclaration<*>> resolveFirToResolveType(declaration: D, type: ResolveType): D =
|
||||
originalState.resolveFirToResolveType(declaration, type)
|
||||
|
||||
override fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? {
|
||||
override fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile? {
|
||||
val ktFile = declaration.containingKtFileIfAny ?: return null
|
||||
cache.getCachedFirFile(ktFile)?.let { return it }
|
||||
ktFile.originalKtFile?.let(cache::getCachedFirFile)?.let { return it }
|
||||
@@ -79,11 +79,11 @@ internal class FirModuleResolveStateDepended(
|
||||
TODO("Diagnostics are not implemented for depended state")
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration =
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration<*> =
|
||||
originalState.findSourceFirDeclaration(ktDeclaration)
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration =
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> =
|
||||
originalState.findSourceFirDeclaration(ktDeclaration)
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
|
||||
+15
-12
@@ -11,10 +11,12 @@ import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.InternalForInline
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.DiagnosticCheckerFilter
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
@@ -31,8 +33,10 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.lazyResolveDecla
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSessionProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.FirDeclarationForCompiledElementSearcher
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.FirElementFinder
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.findSourceNonLocalFirDeclaration
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
|
||||
internal class FirModuleResolveStateImpl(
|
||||
@@ -70,7 +74,7 @@ internal class FirModuleResolveStateImpl(
|
||||
override fun getOrBuildFirFile(ktFile: KtFile): FirFile =
|
||||
firFileBuilder.buildRawFirFileWithCaching(ktFile, rootModuleSession.cache, preferLazyBodies = false)
|
||||
|
||||
override fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? =
|
||||
override fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile? =
|
||||
cache.getContainerFirFile(declaration)
|
||||
|
||||
override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<FirPsiDiagnostic> =
|
||||
@@ -80,21 +84,20 @@ internal class FirModuleResolveStateImpl(
|
||||
diagnosticsCollector.collectDiagnosticsForFile(ktFile, filter)
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration =
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> =
|
||||
findSourceFirDeclarationByExpression(ktDeclaration)
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration =
|
||||
override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration<*> =
|
||||
findSourceFirDeclarationByExpression(ktDeclaration)
|
||||
|
||||
/**
|
||||
* [ktDeclaration] should be either [KtDeclaration] or [KtLambdaExpression]
|
||||
*/
|
||||
private fun findSourceFirDeclarationByExpression(ktDeclaration: KtExpression): FirDeclaration {
|
||||
private fun findSourceFirDeclarationByExpression(ktDeclaration: KtExpression): FirDeclaration<*> {
|
||||
require(ktDeclaration.getModuleInfo() is ModuleSourceInfoBase) {
|
||||
"Declaration should have ModuleSourceInfo, instead it had ${ktDeclaration.getModuleInfo()}"
|
||||
}
|
||||
|
||||
val nonLocalNamedDeclaration = ktDeclaration.getNonLocalContainingOrThisDeclaration()
|
||||
?: error("Declaration should have non-local container${ktDeclaration.getElementTextInContext()}")
|
||||
|
||||
@@ -113,7 +116,7 @@ internal class FirModuleResolveStateImpl(
|
||||
toPhase = FirResolvePhase.BODY_RESOLVE,
|
||||
checkPCE = false, /*TODO*/
|
||||
)
|
||||
val firDeclaration = FirElementFinder.findElementIn<FirDeclaration>(nonLocalFirForNamedDeclaration) { firDeclaration ->
|
||||
val firDeclaration = FirElementFinder.findElementIn<FirDeclaration<*>>(nonLocalFirForNamedDeclaration) { firDeclaration ->
|
||||
when (val realPsi = firDeclaration.realPsi) {
|
||||
is KtObjectLiteralExpression -> realPsi.objectDeclaration == ktDeclaration
|
||||
is KtFunctionLiteral -> realPsi.parent == ktDeclaration
|
||||
@@ -125,7 +128,7 @@ internal class FirModuleResolveStateImpl(
|
||||
}
|
||||
|
||||
@OptIn(InternalForInline::class)
|
||||
override fun findSourceFirCompiledDeclaration(ktDeclaration: KtDeclaration): FirDeclaration {
|
||||
override fun findSourceFirCompiledDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> {
|
||||
require(ktDeclaration.containingKtFile.isCompiled) {
|
||||
"This method will only work on compiled declarations, but this declaration is not compiled: ${ktDeclaration.getElementTextInContext()}"
|
||||
}
|
||||
@@ -142,7 +145,7 @@ internal class FirModuleResolveStateImpl(
|
||||
}
|
||||
}
|
||||
|
||||
override fun <D : FirDeclaration> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D {
|
||||
override fun <D : FirDeclaration<*>> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D {
|
||||
if (toPhase == FirResolvePhase.RAW_FIR) return declaration
|
||||
val fileCache = when (val session = declaration.moduleData.session) {
|
||||
is FirIdeSourcesSession -> session.cache
|
||||
@@ -158,7 +161,7 @@ internal class FirModuleResolveStateImpl(
|
||||
return declaration
|
||||
}
|
||||
|
||||
override fun <D : FirDeclaration> resolveFirToResolveType(declaration: D, type: ResolveType): D {
|
||||
override fun <D : FirDeclaration<*>> resolveFirToResolveType(declaration: D, type: ResolveType): D {
|
||||
if (type == ResolveType.NoResolve) return declaration
|
||||
val fileCache = when (val session = declaration.moduleData.session) {
|
||||
is FirIdeSourcesSession -> session.cache
|
||||
|
||||
+2
-2
@@ -65,8 +65,8 @@ internal object DeclarationCopyBuilder {
|
||||
}
|
||||
|
||||
private fun FirDeclarationBuilder.initDeclaration(
|
||||
originalDeclaration: FirDeclaration,
|
||||
builtDeclaration: FirDeclaration,
|
||||
originalDeclaration: FirDeclaration<*>,
|
||||
builtDeclaration: FirDeclaration<*>,
|
||||
) {
|
||||
resolvePhase = minOf(originalDeclaration.resolvePhase, FirResolvePhase.DECLARATIONS)
|
||||
source = builtDeclaration.source
|
||||
|
||||
+16
-16
@@ -15,14 +15,14 @@ import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile
|
||||
|
||||
class FirDeclarationDesignationWithFile(
|
||||
path: List<FirDeclaration>,
|
||||
declaration: FirDeclaration,
|
||||
path: List<FirDeclaration<*>>,
|
||||
declaration: FirDeclaration<*>,
|
||||
val firFile: FirFile
|
||||
) : FirDeclarationDesignation(
|
||||
path,
|
||||
declaration,
|
||||
) {
|
||||
fun toSequenceWithFile(includeTarget: Boolean): Sequence<FirDeclaration> = sequence {
|
||||
fun toSequenceWithFile(includeTarget: Boolean): Sequence<FirDeclaration<*>> = sequence {
|
||||
yield(firFile)
|
||||
yieldAll(path)
|
||||
if (includeTarget) yield(declaration)
|
||||
@@ -30,20 +30,20 @@ class FirDeclarationDesignationWithFile(
|
||||
}
|
||||
|
||||
open class FirDeclarationDesignation(
|
||||
val path: List<FirDeclaration>,
|
||||
val declaration: FirDeclaration,
|
||||
val path: List<FirDeclaration<*>>,
|
||||
val declaration: FirDeclaration<*>,
|
||||
) {
|
||||
fun toSequence(includeTarget: Boolean): Sequence<FirDeclaration> = sequence {
|
||||
fun toSequence(includeTarget: Boolean): Sequence<FirDeclaration<*>> = sequence {
|
||||
yieldAll(path)
|
||||
if (includeTarget) yield(declaration)
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirRegularClass.collectForNonLocal(): List<FirDeclaration> {
|
||||
private fun FirRegularClass.collectForNonLocal(): List<FirDeclaration<*>> {
|
||||
require(!isLocal)
|
||||
val firProvider = moduleData.session.firProvider
|
||||
var containingClassId = classId.outerClassId
|
||||
val designation = mutableListOf<FirDeclaration>(this)
|
||||
val designation = mutableListOf<FirDeclaration<*>>(this)
|
||||
while (containingClassId != null) {
|
||||
val currentClass = firProvider.getFirClassifierByFqName(containingClassId) ?: break
|
||||
designation.add(currentClass)
|
||||
@@ -52,7 +52,7 @@ private fun FirRegularClass.collectForNonLocal(): List<FirDeclaration> {
|
||||
return designation
|
||||
}
|
||||
|
||||
private fun collectDesignationPath(declaration: FirDeclaration): List<FirDeclaration>? {
|
||||
private fun collectDesignationPath(declaration: FirDeclaration<*>): List<FirDeclaration<*>>? {
|
||||
val containingClass = when (declaration) {
|
||||
is FirCallableDeclaration<*> -> {
|
||||
if (declaration.symbol.callableId.isLocal) return null
|
||||
@@ -79,27 +79,27 @@ private fun collectDesignationPath(declaration: FirDeclaration): List<FirDeclara
|
||||
return if (!containingClass.isLocal) containingClass.collectForNonLocal().asReversed() else null
|
||||
}
|
||||
|
||||
fun FirDeclaration.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile =
|
||||
fun FirDeclaration<*>.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile =
|
||||
tryCollectDesignation(firFile) ?: error("No designation of local declaration ${this.render()}")
|
||||
|
||||
fun FirDeclaration.collectDesignation(): FirDeclarationDesignation =
|
||||
fun FirDeclaration<*>.collectDesignation(): FirDeclarationDesignation =
|
||||
tryCollectDesignation() ?: error("No designation of local declaration ${this.render()}")
|
||||
|
||||
fun FirDeclaration.collectDesignationWithFile(): FirDeclarationDesignationWithFile =
|
||||
fun FirDeclaration<*>.collectDesignationWithFile(): FirDeclarationDesignationWithFile =
|
||||
tryCollectDesignationWithFile() ?: error("No designation of local declaration ${this.render()}")
|
||||
|
||||
fun FirDeclaration.tryCollectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile? =
|
||||
fun FirDeclaration<*>.tryCollectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile? =
|
||||
collectDesignationPath(this)?.let {
|
||||
FirDeclarationDesignationWithFile(it, this, firFile)
|
||||
}
|
||||
|
||||
fun FirDeclaration.tryCollectDesignation(): FirDeclarationDesignation? =
|
||||
fun FirDeclaration<*>.tryCollectDesignation(): FirDeclarationDesignation? =
|
||||
collectDesignationPath(this)?.let {
|
||||
FirDeclarationDesignation(it, this)
|
||||
}
|
||||
|
||||
fun FirDeclaration.tryCollectDesignationWithFile(): FirDeclarationDesignationWithFile? {
|
||||
fun FirDeclaration<*>.tryCollectDesignationWithFile(): FirDeclarationDesignationWithFile? {
|
||||
val path = collectDesignationPath(this) ?: return null
|
||||
val firFile = getContainingFile() ?: return null
|
||||
return FirDeclarationDesignationWithFile(path, this, firFile)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -44,13 +44,13 @@ abstract class FirModuleResolveState {
|
||||
/**
|
||||
* Try get [FirFile] from the cache in undefined phase
|
||||
*/
|
||||
internal abstract fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile?
|
||||
internal abstract fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile?
|
||||
|
||||
internal abstract fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List<FirPsiDiagnostic>
|
||||
|
||||
internal abstract fun collectDiagnosticsForFile(ktFile: KtFile, filter: DiagnosticCheckerFilter): Collection<FirPsiDiagnostic>
|
||||
|
||||
internal inline fun <D : FirDeclaration, R> withLock(declaration: D, declarationLockType: DeclarationLockType, action: (D) -> R): R {
|
||||
internal inline fun <D : FirDeclaration<*>, R> withLock(declaration: D, declarationLockType: DeclarationLockType, action: (D) -> R): R {
|
||||
val originalDeclaration = (declaration as? FirCallableDeclaration<*>)?.unwrapFakeOverrides() ?: declaration
|
||||
val session = originalDeclaration.moduleData.session
|
||||
return when {
|
||||
@@ -67,12 +67,12 @@ abstract class FirModuleResolveState {
|
||||
@InternalForInline
|
||||
abstract fun findSourceFirDeclaration(
|
||||
ktDeclaration: KtDeclaration,
|
||||
): FirDeclaration
|
||||
): FirDeclaration<*>
|
||||
|
||||
@InternalForInline
|
||||
abstract fun findSourceFirDeclaration(
|
||||
ktDeclaration: KtLambdaExpression,
|
||||
): FirDeclaration
|
||||
): FirDeclaration<*>
|
||||
|
||||
/**
|
||||
* Looks for compiled non-local [ktDeclaration] declaration by querying its classId/callableId from the SymbolProvider.
|
||||
@@ -82,10 +82,10 @@ abstract class FirModuleResolveState {
|
||||
@InternalForInline
|
||||
abstract fun findSourceFirCompiledDeclaration(
|
||||
ktDeclaration: KtDeclaration
|
||||
): FirDeclaration
|
||||
): FirDeclaration<*>
|
||||
|
||||
|
||||
internal abstract fun <D : FirDeclaration> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D
|
||||
internal abstract fun <D : FirDeclaration<*>> resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D
|
||||
|
||||
internal abstract fun <D : FirDeclaration> resolveFirToResolveType(declaration: D, type: ResolveType): D
|
||||
internal abstract fun <D : FirDeclaration<*>> resolveFirToResolveType(declaration: D, type: ResolveType): D
|
||||
}
|
||||
|
||||
+10
-10
@@ -43,7 +43,7 @@ fun ModuleInfo.getResolveState(project: Project): FirModuleResolveState =
|
||||
inline fun <R> KtDeclaration.withFirDeclaration(
|
||||
resolveState: FirModuleResolveState,
|
||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||
action: (FirDeclaration) -> R
|
||||
action: (FirDeclaration<*>) -> R
|
||||
): R {
|
||||
val firDeclaration = if (containingKtFile.isCompiled) {
|
||||
resolveState.findSourceFirCompiledDeclaration(this)
|
||||
@@ -71,7 +71,7 @@ inline fun <R> KtDeclaration.withFirDeclaration(
|
||||
inline fun <R> KtDeclaration.withFirDeclaration(
|
||||
resolveState: FirModuleResolveState,
|
||||
resolveType: ResolveType = ResolveType.NoResolve,
|
||||
action: (FirDeclaration) -> R
|
||||
action: (FirDeclaration<*>) -> R
|
||||
): R {
|
||||
val firDeclaration = resolveState.findSourceFirDeclaration(this)
|
||||
firDeclaration.resolvedFirToType(resolveType, resolveState)
|
||||
@@ -88,7 +88,7 @@ inline fun <R> KtDeclaration.withFirDeclaration(
|
||||
* Otherwise, some threading problems may arise,
|
||||
*/
|
||||
@OptIn(InternalForInline::class)
|
||||
inline fun <reified F : FirDeclaration, R> KtDeclaration.withFirDeclarationOfType(
|
||||
inline fun <reified F : FirDeclaration<*>, R> KtDeclaration.withFirDeclarationOfType(
|
||||
resolveState: FirModuleResolveState,
|
||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||
action: (F) -> R
|
||||
@@ -106,7 +106,7 @@ inline fun <reified F : FirDeclaration, R> KtDeclaration.withFirDeclarationOfTyp
|
||||
* Otherwise, some threading problems may arise,
|
||||
*/
|
||||
@OptIn(InternalForInline::class)
|
||||
inline fun <reified F : FirDeclaration, R> KtLambdaExpression.withFirDeclarationOfType(
|
||||
inline fun <reified F : FirDeclaration<*>, R> KtLambdaExpression.withFirDeclarationOfType(
|
||||
resolveState: FirModuleResolveState,
|
||||
action: (F) -> R
|
||||
): R {
|
||||
@@ -119,7 +119,7 @@ inline fun <reified F : FirDeclaration, R> KtLambdaExpression.withFirDeclaration
|
||||
* Executes [action] with given [FirDeclaration] under read action, so resolve **is not possible** inside [action]
|
||||
* [FirDeclaration] passed to [action] will be resolved at least to [phase] when executing [action] on it
|
||||
*/
|
||||
fun <D : FirDeclaration, R> D.withFirDeclaration(
|
||||
fun <D : FirDeclaration<*>, R> D.withFirDeclaration(
|
||||
resolveState: FirModuleResolveState,
|
||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||
action: (D) -> R,
|
||||
@@ -132,7 +132,7 @@ fun <D : FirDeclaration, R> D.withFirDeclaration(
|
||||
* Executes [action] with given [FirDeclaration] under read action, so resolve **is not possible** inside [action]
|
||||
* [FirDeclaration] passed to [action] will be resolved at least to [phase] when executing [action] on it
|
||||
*/
|
||||
fun <D : FirDeclaration, R> D.withFirDeclaration(
|
||||
fun <D : FirDeclaration<*>, R> D.withFirDeclaration(
|
||||
type: ResolveType,
|
||||
resolveState: FirModuleResolveState,
|
||||
action: (D) -> R,
|
||||
@@ -144,7 +144,7 @@ fun <D : FirDeclaration, R> D.withFirDeclaration(
|
||||
/**
|
||||
* Executes [action] with given [FirDeclaration] under write lock, so resolve **is possible** inside [action]
|
||||
*/
|
||||
fun <D : FirDeclaration, R> D.withFirDeclarationInWriteLock(
|
||||
fun <D : FirDeclaration<*>, R> D.withFirDeclarationInWriteLock(
|
||||
resolveState: FirModuleResolveState,
|
||||
phase: FirResolvePhase = FirResolvePhase.RAW_FIR,
|
||||
action: (D) -> R,
|
||||
@@ -156,7 +156,7 @@ fun <D : FirDeclaration, R> D.withFirDeclarationInWriteLock(
|
||||
/**
|
||||
* Executes [action] with given [FirDeclaration] under write lock, so resolve **is possible** inside [action]
|
||||
*/
|
||||
fun <D : FirDeclaration, R> D.withFirDeclarationInWriteLock(
|
||||
fun <D : FirDeclaration<*>, R> D.withFirDeclarationInWriteLock(
|
||||
resolveState: FirModuleResolveState,
|
||||
resolveType: ResolveType = ResolveType.BodyResolveWithChildren,
|
||||
action: (D) -> R,
|
||||
@@ -187,7 +187,7 @@ fun KtFile.collectDiagnosticsForFile(
|
||||
*
|
||||
* Should not be called form [withFirDeclaration], [withFirDeclarationOfType] functions, as it it may cause deadlock
|
||||
*/
|
||||
fun <D : FirDeclaration> D.resolvedFirToPhase(
|
||||
fun <D : FirDeclaration<*>> D.resolvedFirToPhase(
|
||||
phase: FirResolvePhase,
|
||||
resolveState: FirModuleResolveState
|
||||
): D =
|
||||
@@ -198,7 +198,7 @@ fun <D : FirDeclaration> D.resolvedFirToPhase(
|
||||
*
|
||||
* Should not be called form [withFirDeclaration], [withFirDeclarationOfType] functions, as it it may cause deadlock
|
||||
*/
|
||||
fun <D : FirDeclaration> D.resolvedFirToType(
|
||||
fun <D : FirDeclaration<*>> D.resolvedFirToType(
|
||||
type: ResolveType,
|
||||
resolveState: FirModuleResolveState
|
||||
): D =
|
||||
|
||||
+1
-1
@@ -235,7 +235,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
||||
}
|
||||
|
||||
val originalDeclaration = nonLocalDeclaration.getOrBuildFir(state)
|
||||
check(originalDeclaration is FirDeclaration) { "Invalid original declaration type ${originalDeclaration::class.simpleName}" }
|
||||
check(originalDeclaration is FirDeclaration<*>) { "Invalid original declaration type ${originalDeclaration::class.simpleName}" }
|
||||
|
||||
val originalDesignation = originalDeclaration.collectDesignation()
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
|
||||
abstract class BeforeElementDiagnosticCollectionHandler: FirSessionComponent {
|
||||
open fun beforeCollectingForElement(element: FirElement) {}
|
||||
open fun beforeGoingNestedDeclaration(declaration: FirDeclaration, context: PersistentCheckerContext) {}
|
||||
open fun beforeGoingNestedDeclaration(declaration: FirDeclaration<*>, context: PersistentCheckerContext) {}
|
||||
}
|
||||
|
||||
val FirSession.beforeElementDiagnosticCollectionHandler: BeforeElementDiagnosticCollectionHandler? by FirSession.nullableSessionComponentAccessor()
|
||||
|
||||
+5
-5
@@ -24,7 +24,7 @@ internal abstract class FileStructureElementDiagnosticRetriever {
|
||||
}
|
||||
|
||||
internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
private val structureElementDeclaration: FirDeclaration
|
||||
private val structureElementDeclaration: FirDeclaration<*>
|
||||
) : FileStructureElementDiagnosticRetriever() {
|
||||
override fun retrieve(
|
||||
firFile: FirFile,
|
||||
@@ -41,13 +41,13 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
}
|
||||
|
||||
private class Visitor(
|
||||
private val structureElementDeclaration: FirDeclaration,
|
||||
private val structureElementDeclaration: FirDeclaration<*>,
|
||||
context: PersistentCheckerContext,
|
||||
components: List<AbstractDiagnosticCollectorComponent>
|
||||
) : FirIdeDiagnosticVisitor(context, components) {
|
||||
private var insideAlwaysVisitableDeclarations = 0
|
||||
|
||||
override fun shouldVisitDeclaration(declaration: FirDeclaration): Boolean {
|
||||
override fun shouldVisitDeclaration(declaration: FirDeclaration<*>): Boolean {
|
||||
if (declaration.shouldVisitWithNestedDeclarations()) {
|
||||
insideAlwaysVisitableDeclarations++
|
||||
}
|
||||
@@ -64,7 +64,7 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirDeclaration.shouldVisitWithNestedDeclarations(): Boolean {
|
||||
private fun FirDeclaration<*>.shouldVisitWithNestedDeclarations(): Boolean {
|
||||
if (shouldDiagnosticsAlwaysBeCheckedOn(this)) return true
|
||||
return when (this) {
|
||||
is FirAnonymousInitializer -> true
|
||||
@@ -75,7 +75,7 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDeclarationExit(declaration: FirDeclaration) {
|
||||
override fun onDeclarationExit(declaration: FirDeclaration<*>) {
|
||||
if (declaration.shouldVisitWithNestedDeclarations()) {
|
||||
insideAlwaysVisitableDeclarations--
|
||||
}
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ internal class FileStructureElementDiagnosticsCollector private constructor(priv
|
||||
}
|
||||
|
||||
fun collectForStructureElement(
|
||||
firDeclaration: FirDeclaration,
|
||||
firDeclaration: FirDeclaration<*>,
|
||||
createVisitor: (components: List<AbstractDiagnosticCollectorComponent>) -> CheckerRunningDiagnosticCollectorVisitor,
|
||||
): FileStructureElementDiagnosticList {
|
||||
val reporter = FirIdeDiagnosticReporter()
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ internal open class FirIdeDiagnosticVisitor(
|
||||
private val beforeElementDiagnosticCollectionHandler = context.session.beforeElementDiagnosticCollectionHandler
|
||||
|
||||
override fun visitNestedElements(element: FirElement) {
|
||||
if (element is FirDeclaration) {
|
||||
if (element is FirDeclaration<*>) {
|
||||
beforeElementDiagnosticCollectionHandler?.beforeGoingNestedDeclaration(element, context)
|
||||
}
|
||||
super.visitNestedElements(element)
|
||||
@@ -32,4 +32,4 @@ internal open class FirIdeDiagnosticVisitor(
|
||||
element.accept(it, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-5
@@ -8,7 +8,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.fir
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.renderWithType
|
||||
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.ContextByDesignationCollector
|
||||
@@ -24,13 +27,13 @@ private class ContextCollectingDiagnosticCollectorVisitor private constructor(
|
||||
private val contextCollector = object : ContextByDesignationCollector<PersistentCheckerContext>(designation) {
|
||||
override fun getCurrentContext(): PersistentCheckerContext = context
|
||||
|
||||
override fun goToNestedDeclaration(declaration: FirDeclaration) {
|
||||
override fun goToNestedDeclaration(declaration: FirDeclaration<*>) {
|
||||
declaration.accept(this@ContextCollectingDiagnosticCollectorVisitor, null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitNestedElements(element: FirElement) {
|
||||
if (element is FirDeclaration) {
|
||||
if (element is FirDeclaration<*>) {
|
||||
contextCollector.nextStep()
|
||||
} else {
|
||||
element.accept(this, null)
|
||||
@@ -52,7 +55,7 @@ internal object PersistenceContextCollector {
|
||||
fun collectContext(
|
||||
sessionHolder: SessionHolder,
|
||||
firFile: FirFile,
|
||||
declaration: FirDeclaration,
|
||||
declaration: FirDeclaration<*>,
|
||||
): PersistentCheckerContext {
|
||||
val isLocal = when (declaration) {
|
||||
is FirClassLikeDeclaration<*> -> declaration.symbol.classId.isLocal
|
||||
@@ -65,4 +68,4 @@ internal object PersistenceContextCollector {
|
||||
val designation = declaration.collectDesignation(firFile)
|
||||
return ContextCollectingDiagnosticCollectorVisitor.collect(sessionHolder, designation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.element.builder
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||
@@ -56,7 +59,7 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl(
|
||||
returnTypeCalculator,
|
||||
outerBodyResolveContext
|
||||
) {
|
||||
private val declarationDesignation = designation.filterIsInstance<FirDeclaration>()
|
||||
private val declarationDesignation = designation.filterIsInstance<FirDeclaration<*>>()
|
||||
|
||||
override fun transformSimpleFunction(
|
||||
simpleFunction: FirSimpleFunction,
|
||||
@@ -67,7 +70,7 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl(
|
||||
return super.transformSimpleFunction(simpleFunction, data)
|
||||
}
|
||||
|
||||
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration {
|
||||
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
|
||||
val firDesignation = FirDeclarationDesignation(declarationDesignation, constructor)
|
||||
FirLazyBodiesCalculator.calculateLazyBodyForSecondaryConstructor(firDesignation)
|
||||
return super.transformConstructor(constructor, data)
|
||||
@@ -78,4 +81,4 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl(
|
||||
FirLazyBodiesCalculator.calculateLazyBodyForProperty(firDesignation)
|
||||
return super.transformProperty(property, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ internal class FirTowerDataContextAllElementsCollector : FirTowerDataContextColl
|
||||
elementsToContext[closestStatementInBlock] = context
|
||||
}
|
||||
|
||||
override fun addDeclarationContext(declaration: FirDeclaration, context: FirTowerDataContext) {
|
||||
override fun addDeclarationContext(declaration: FirDeclaration<*>, context: FirTowerDataContext) {
|
||||
val psi = declaration.psi as? KtElement ?: return
|
||||
elementsToContext[psi] = context
|
||||
}
|
||||
|
||||
+5
-8
@@ -12,16 +12,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.ThreadSafe
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.ThreadSafe
|
||||
import kotlin.concurrent.withLock
|
||||
|
||||
/**
|
||||
* Caches mapping [KtFile] -> [FirFile] of module [moduleInfo]
|
||||
@@ -48,13 +45,13 @@ internal abstract class ModuleFileCache {
|
||||
*/
|
||||
abstract fun fileCached(file: KtFile, createValue: () -> FirFile): FirFile
|
||||
|
||||
abstract fun getContainerFirFile(declaration: FirDeclaration): FirFile?
|
||||
abstract fun getContainerFirFile(declaration: FirDeclaration<*>): FirFile?
|
||||
|
||||
abstract fun getCachedFirFile(ktFile: KtFile): FirFile?
|
||||
|
||||
abstract val firFileLockProvider: LockProvider<FirFile>
|
||||
|
||||
inline fun <D : FirDeclaration, R> withReadLockOn(declaration: D, action: (D) -> R): R {
|
||||
inline fun <D : FirDeclaration<*>, R> withReadLockOn(declaration: D, action: (D) -> R): R {
|
||||
val file = getContainerFirFile(declaration)
|
||||
?: error("No fir file found for\n${declaration.render()}")
|
||||
return firFileLockProvider.withReadLock(file) { action(declaration) }
|
||||
@@ -72,7 +69,7 @@ internal class ModuleFileCacheImpl(override val session: FirSession) : ModuleFil
|
||||
|
||||
override fun getCachedFirFile(ktFile: KtFile): FirFile? = ktFileToFirFile[ktFile]
|
||||
|
||||
override fun getContainerFirFile(declaration: FirDeclaration): FirFile? {
|
||||
override fun getContainerFirFile(declaration: FirDeclaration<*>): FirFile? {
|
||||
val ktFile = declaration.psi?.containingFile as? KtFile ?: return null
|
||||
return getCachedFirFile(ktFile)
|
||||
}
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ internal object FileElementFactory {
|
||||
* should be consistent with [isReanalyzableContainer]
|
||||
*/
|
||||
fun createFileStructureElement(
|
||||
firDeclaration: FirDeclaration,
|
||||
firDeclaration: FirDeclaration<*>,
|
||||
ktDeclaration: KtDeclaration,
|
||||
firFile: FirFile,
|
||||
firFileLockProvider: LockProvider<FirFile>,
|
||||
@@ -68,4 +68,4 @@ private fun KtProperty.isReanalyzableContainer() =
|
||||
name != null && typeReference != null
|
||||
|
||||
private val KtNamedFunction.hasExplicitTypeOrUnit
|
||||
get() = hasBlockBody() || typeReference != null
|
||||
get() = hasBlockBody() || typeReference != null
|
||||
|
||||
+2
-2
@@ -222,7 +222,7 @@ internal class ReanalyzablePropertyStructureElement(
|
||||
|
||||
internal class NonReanalyzableDeclarationStructureElement(
|
||||
firFile: FirFile,
|
||||
val fir: FirDeclaration,
|
||||
val fir: FirDeclaration<*>,
|
||||
override val psi: KtDeclaration,
|
||||
lockProvider: LockProvider<FirFile>,
|
||||
) : FileStructureElement(firFile, lockProvider) {
|
||||
@@ -263,7 +263,7 @@ internal class RootStructureElement(
|
||||
companion object {
|
||||
private val recorder = object : FirElementsRecorder() {
|
||||
override fun visitElement(element: FirElement, data: MutableMap<KtElement, FirElement>) {
|
||||
if (element !is FirDeclaration || element is FirFile) {
|
||||
if (element !is FirDeclaration<*> || element is FirFile) {
|
||||
super.visitElement(element, data)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.declarationCanBeLazilyResolved
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -30,12 +29,12 @@ internal object FileStructureUtil {
|
||||
|
||||
fun replaceDeclaration(firFile: FirFile, from: FirCallableDeclaration<*>, to: FirCallableDeclaration<*>) {
|
||||
val declarations = if (from.symbol.callableId.className == null) {
|
||||
firFile.declarations as MutableList<FirDeclaration>
|
||||
firFile.declarations as MutableList<FirDeclaration<*>>
|
||||
} else {
|
||||
val classLikeLookupTag = from.containingClass()
|
||||
?: error("Class name should not be null for non-top-level & non-local declarations, but was null for\n${from.render()}")
|
||||
val containingClass = classLikeLookupTag.toSymbol(firFile.moduleData.session)?.fir as FirRegularClass
|
||||
containingClass.declarations as MutableList<FirDeclaration>
|
||||
containingClass.declarations as MutableList<FirDeclaration<*>>
|
||||
}
|
||||
declarations.replaceFirst(from, to)
|
||||
}
|
||||
|
||||
+10
-10
@@ -21,14 +21,14 @@ import org.jetbrains.kotlin.psi.KtSecondaryConstructor
|
||||
|
||||
internal object FirLazyBodiesCalculator {
|
||||
fun calculateLazyBodiesInside(designation: FirDeclarationDesignation) {
|
||||
designation.declaration.transform<FirElement, MutableList<FirDeclaration>>(
|
||||
designation.declaration.transform<FirElement, MutableList<FirDeclaration<*>>>(
|
||||
FirLazyBodiesCalculatorTransformer,
|
||||
designation.toSequence(includeTarget = true).toMutableList()
|
||||
)
|
||||
}
|
||||
|
||||
fun calculateLazyBodies(firFile: FirFile) {
|
||||
firFile.transform<FirElement, MutableList<FirDeclaration>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
||||
firFile.transform<FirElement, MutableList<FirDeclaration<*>>>(FirLazyBodiesCalculatorTransformer, mutableListOf())
|
||||
}
|
||||
|
||||
fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation) {
|
||||
@@ -104,16 +104,16 @@ internal object FirLazyBodiesCalculator {
|
||||
|| (firProperty.delegate as? FirWrappedDelegateExpression)?.expression is FirLazyExpression
|
||||
}
|
||||
|
||||
private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<FirDeclaration>>() {
|
||||
private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<FirDeclaration<*>>>() {
|
||||
|
||||
override fun transformFile(file: FirFile, data: MutableList<FirDeclaration>): FirDeclaration {
|
||||
override fun transformFile(file: FirFile, data: MutableList<FirDeclaration<*>>): FirFile {
|
||||
file.declarations.forEach {
|
||||
it.transformSingle(this, data)
|
||||
}
|
||||
return file
|
||||
}
|
||||
|
||||
override fun <E : FirElement> transformElement(element: E, data: MutableList<FirDeclaration>): E {
|
||||
override fun <E : FirElement> transformElement(element: E, data: MutableList<FirDeclaration<*>>): E {
|
||||
if (element is FirRegularClass) {
|
||||
data.add(element)
|
||||
element.declarations.forEach {
|
||||
@@ -127,8 +127,8 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<F
|
||||
|
||||
override fun transformSimpleFunction(
|
||||
simpleFunction: FirSimpleFunction,
|
||||
data: MutableList<FirDeclaration>
|
||||
): FirDeclaration {
|
||||
data: MutableList<FirDeclaration<*>>
|
||||
): FirSimpleFunction {
|
||||
if (simpleFunction.body is FirLazyBlock) {
|
||||
val designation = FirDeclarationDesignation(data, simpleFunction)
|
||||
FirLazyBodiesCalculator.calculateLazyBodiesForFunction(designation)
|
||||
@@ -138,8 +138,8 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<F
|
||||
|
||||
override fun transformConstructor(
|
||||
constructor: FirConstructor,
|
||||
data: MutableList<FirDeclaration>
|
||||
): FirDeclaration {
|
||||
data: MutableList<FirDeclaration<*>>
|
||||
): FirConstructor {
|
||||
if (constructor.body is FirLazyBlock) {
|
||||
val designation = FirDeclarationDesignation(data, constructor)
|
||||
FirLazyBodiesCalculator.calculateLazyBodyForSecondaryConstructor(designation)
|
||||
@@ -147,7 +147,7 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer<MutableList<F
|
||||
return constructor
|
||||
}
|
||||
|
||||
override fun transformProperty(property: FirProperty, data: MutableList<FirDeclaration>): FirDeclaration {
|
||||
override fun transformProperty(property: FirProperty, data: MutableList<FirDeclaration<*>>): FirProperty {
|
||||
if (FirLazyBodiesCalculator.needCalculatingLazyBodyForProperty(property)) {
|
||||
val designation = FirDeclarationDesignation(data, property)
|
||||
FirLazyBodiesCalculator.calculateLazyBodyForProperty(designation)
|
||||
|
||||
+2
-7
@@ -5,16 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
|
||||
|
||||
import org.jetbrains.kotlin.fir.containingClass
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
|
||||
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.runCustomResolveUnderLock
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.containingKtFileIfAny
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile
|
||||
|
||||
enum class ResolveType {
|
||||
@@ -34,7 +29,7 @@ enum class ResolveType {
|
||||
}
|
||||
|
||||
internal fun FirLazyDeclarationResolver.lazyResolveDeclaration(
|
||||
firDeclaration: FirDeclaration,
|
||||
firDeclaration: FirDeclaration<*>,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
toResolveType: ResolveType,
|
||||
scopeSession: ScopeSession,
|
||||
@@ -162,4 +157,4 @@ internal fun FirLazyDeclarationResolver.lazyResolveDeclaration(
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -84,7 +84,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui
|
||||
).transformDeclaration(firFileBuilder.firPhaseRunner)
|
||||
}
|
||||
|
||||
private fun FirDeclaration.isValidForResolve(): Boolean = when (origin) {
|
||||
private fun FirDeclaration<*>.isValidForResolve(): Boolean = when (origin) {
|
||||
is FirDeclarationOrigin.Source,
|
||||
is FirDeclarationOrigin.ImportedFromObject,
|
||||
is FirDeclarationOrigin.Delegated,
|
||||
@@ -190,7 +190,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui
|
||||
* @param firDeclarationToResolve target non-local declaration
|
||||
*/
|
||||
fun lazyResolveDeclaration(
|
||||
firDeclarationToResolve: FirDeclaration,
|
||||
firDeclarationToResolve: FirDeclaration<*>,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
scopeSession: ScopeSession,
|
||||
toPhase: FirResolvePhase,
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
|
||||
internal fun FirDeclaration.getKtDeclarationForFirElement(): KtDeclaration {
|
||||
internal fun FirDeclaration<*>.getKtDeclarationForFirElement(): KtDeclaration {
|
||||
require(this !is FirFile)
|
||||
|
||||
val ktDeclaration = (psi as? KtDeclaration) ?: run {
|
||||
|
||||
+4
-4
@@ -32,7 +32,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
designation: FirDeclarationDesignation,
|
||||
rootNonLocalDeclaration: KtDeclaration,
|
||||
replacement: RawFirReplacement?
|
||||
): FirDeclaration {
|
||||
): FirDeclaration<*> {
|
||||
val replacementApplier = replacement?.Applier()
|
||||
val builder = RawFirNonLocalDeclarationBuilder(
|
||||
session = session,
|
||||
@@ -51,7 +51,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
scopeProvider: FirScopeProvider,
|
||||
designation: FirDeclarationDesignation,
|
||||
rootNonLocalDeclaration: KtDeclaration,
|
||||
): FirDeclaration {
|
||||
): FirDeclaration<*> {
|
||||
val functionsToRebind = when (val originalDeclaration = designation.declaration) {
|
||||
is FirSimpleFunction -> setOf(originalDeclaration)
|
||||
is FirProperty -> setOfNotNull(originalDeclaration.getter, originalDeclaration.setter)
|
||||
@@ -102,7 +102,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun moveNext(iterator: Iterator<FirDeclaration>, containingClass: FirRegularClass?): FirDeclaration {
|
||||
private fun moveNext(iterator: Iterator<FirDeclaration<*>>, containingClass: FirRegularClass?): FirDeclaration<*> {
|
||||
if (!iterator.hasNext()) {
|
||||
val visitor = VisitorWithReplacement()
|
||||
return when (declarationToBuild) {
|
||||
@@ -112,7 +112,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
visitor.convertProperty(declarationToBuild, ownerSymbol, ownerTypeArgumentsCount)
|
||||
}
|
||||
else -> visitor.convertElement(declarationToBuild)
|
||||
} as FirDeclaration
|
||||
} as FirDeclaration<*>
|
||||
}
|
||||
|
||||
val parent = iterator.next()
|
||||
|
||||
+3
-3
@@ -25,12 +25,12 @@ internal class FirIdeBuiltinsAndCloneableSessionProvider(override val symbolProv
|
||||
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled()
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled()
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled()
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled()
|
||||
|
||||
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
|
||||
|
||||
private fun shouldNotBeCalled(): Nothing = error("Should not be called for FirIdeBuiltinsAndCloneableSession")
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -27,10 +27,10 @@ internal class FirIdeLibrariesSessionProvider(
|
||||
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled()
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled()
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled()
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled()
|
||||
|
||||
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
|
||||
|
||||
|
||||
+2
-2
@@ -92,12 +92,12 @@ internal class FirIdeProvider(
|
||||
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) {
|
||||
override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) {
|
||||
TODO()
|
||||
}
|
||||
|
||||
@FirProviderInternals
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) {
|
||||
override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) {
|
||||
TODO()
|
||||
}
|
||||
|
||||
|
||||
+7
-4
@@ -10,7 +10,10 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTypeCalculatorForIDE
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
||||
@@ -46,12 +49,12 @@ internal class FirDesignatedBodyResolveTransformerForIDE(
|
||||
) {
|
||||
private val ideDeclarationTransformer = IDEDeclarationTransformer(designation)
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration =
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> =
|
||||
ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean =
|
||||
ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration)
|
||||
|
||||
override fun transformDeclaration(phaseRunner: FirPhaseRunner) {
|
||||
@@ -73,7 +76,7 @@ internal class FirDesignatedBodyResolveTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
when (declaration) {
|
||||
is FirSimpleFunction, is FirConstructor, is FirTypeAlias, is FirField, is FirAnonymousInitializer ->
|
||||
declaration.ensurePhase(FirResolvePhase.BODY_RESOLVE)
|
||||
|
||||
+5
-4
@@ -16,8 +16,9 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyBodiesCalculator
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensureDesignation
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.isTargetCallableDeclarationAndInPhase
|
||||
|
||||
/**
|
||||
* Transform designation into CONTRACTS declaration. Affects only for target declaration and it's children
|
||||
@@ -40,13 +41,13 @@ internal class FirDesignatedContractsResolveTransformerForIDE(
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration =
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> =
|
||||
ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
designation.declaration.updateResolvedPhaseForDeclarationAndChildren(FirResolvePhase.CONTRACTS)
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean =
|
||||
ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration)
|
||||
|
||||
override fun transformDeclaration(phaseRunner: FirPhaseRunner) {
|
||||
@@ -65,7 +66,7 @@ internal class FirDesignatedContractsResolveTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
when (declaration) {
|
||||
is FirSimpleFunction, is FirConstructor, is FirAnonymousInitializer ->
|
||||
declaration.ensurePhase(FirResolvePhase.CONTRACTS)
|
||||
|
||||
+3
-3
@@ -49,12 +49,12 @@ internal class FirDesignatedImplicitTypesTransformerForIDE(
|
||||
) {
|
||||
private val ideDeclarationTransformer = IDEDeclarationTransformer(designation)
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration =
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> =
|
||||
ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean =
|
||||
ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration)
|
||||
|
||||
override fun transformDeclaration(phaseRunner: FirPhaseRunner) {
|
||||
@@ -78,7 +78,7 @@ internal class FirDesignatedImplicitTypesTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
when (declaration) {
|
||||
is FirSimpleFunction -> check(declaration.returnTypeRef is FirResolvedTypeRef)
|
||||
is FirField -> check(declaration.returnTypeRef is FirResolvedTypeRef)
|
||||
|
||||
+4
-4
@@ -32,10 +32,10 @@ internal class FirDesignatedStatusResolveTransformerForIDE(
|
||||
|
||||
val designationTransformer = IDEDeclarationTransformer(designation)
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean =
|
||||
firDeclaration !is FirFile && super.needReplacePhase(firDeclaration)
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: FirResolvedDeclarationStatus?): FirDeclaration =
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: FirResolvedDeclarationStatus?): FirDeclaration<*> =
|
||||
designationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
@@ -57,7 +57,7 @@ internal class FirDesignatedStatusResolveTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
if (declaration !is FirAnonymousInitializer) {
|
||||
declaration.ensurePhase(FirResolvePhase.STATUS)
|
||||
}
|
||||
@@ -77,4 +77,4 @@ internal class FirDesignatedStatusResolveTransformerForIDE(
|
||||
else -> error("Unexpected type: ${declaration::class.simpleName}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -53,7 +53,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
) {
|
||||
val declarationTransformer = IDEDeclarationTransformer(classDesignation)
|
||||
|
||||
override fun visitDeclarationContent(declaration: FirDeclaration, data: Any?) {
|
||||
override fun visitDeclarationContent(declaration: FirDeclaration<*>, data: Any?) {
|
||||
declarationTransformer.visitDeclarationContent(this, declaration, data) {
|
||||
super.visitDeclarationContent(declaration, data)
|
||||
declaration
|
||||
@@ -64,7 +64,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationDesignation) :
|
||||
FirApplySupertypesTransformer(supertypeComputationSession) {
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean =
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean =
|
||||
firDeclaration !is FirFile && super.needReplacePhase(firDeclaration)
|
||||
|
||||
override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): FirStatement {
|
||||
@@ -79,15 +79,15 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
else super.transformAnonymousObject(anonymousObject, data)
|
||||
}
|
||||
|
||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirDeclaration {
|
||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirStatement {
|
||||
return if (typeAlias.resolvePhase >= FirResolvePhase.SUPER_TYPES)
|
||||
transformDeclarationContent(typeAlias, data)
|
||||
transformDeclarationContent(typeAlias, data) as FirTypeAlias
|
||||
else super.transformTypeAlias(typeAlias, data)
|
||||
}
|
||||
|
||||
val declarationTransformer = IDEDeclarationTransformer(classDesignation)
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration {
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: Any?): FirDeclaration<*> {
|
||||
return declarationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
@@ -95,7 +95,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
}
|
||||
|
||||
private fun collect(designation: FirDeclarationDesignationWithFile): Collection<FirDeclarationDesignationWithFile> {
|
||||
val visited = mutableMapOf<FirDeclaration, FirDeclarationDesignationWithFile>()
|
||||
val visited = mutableMapOf<FirDeclaration<*>, FirDeclarationDesignationWithFile>()
|
||||
val toVisit = mutableListOf<FirDeclarationDesignationWithFile>()
|
||||
|
||||
toVisit.add(designation)
|
||||
@@ -178,7 +178,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
when (declaration) {
|
||||
is FirFunction<*>, is FirProperty, is FirEnumEntry, is FirField, is FirAnonymousInitializer -> Unit
|
||||
is FirRegularClass -> {
|
||||
|
||||
+5
-4
@@ -32,10 +32,11 @@ internal class FirDesignatedTypeResolverTransformerForIDE(
|
||||
private val declarationTransformer = IDEDeclarationTransformer(designation)
|
||||
|
||||
override fun <E : FirElement> transformElement(element: E, data: Any?): E {
|
||||
return if (element is FirDeclaration && (element is FirRegularClass || element is FirFile)) {
|
||||
return if (element is FirDeclaration<*> && (element is FirRegularClass || element is FirFile)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
declarationTransformer.transformDeclarationContent(this, element, data) {
|
||||
super.transformElement(element, data)
|
||||
}
|
||||
} as E
|
||||
} else {
|
||||
super.transformElement(element, data)
|
||||
}
|
||||
@@ -57,7 +58,7 @@ internal class FirDesignatedTypeResolverTransformerForIDE(
|
||||
ensureResolvedDeep(designation.declaration)
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) {
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) {
|
||||
if (declaration !is FirAnonymousInitializer) {
|
||||
declaration.ensurePhase(FirResolvePhase.TYPES)
|
||||
}
|
||||
@@ -81,4 +82,4 @@ internal class FirDesignatedTypeResolverTransformerForIDE(
|
||||
else -> error("Unexpected type: ${declaration::class.simpleName}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -36,7 +36,7 @@ internal class FirFileAnnotationsResolveTransformer(
|
||||
firTowerDataContextCollector = firTowerDataContextCollector
|
||||
), FirLazyTransformerForIDE {
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration {
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> {
|
||||
require(declaration is FirFile) { "Unexpected declaration ${declaration::class.simpleName}" }
|
||||
annotations.forEach {
|
||||
if (it.resolveStatus != FirAnnotationResolveStatus.Resolved) {
|
||||
@@ -54,7 +54,7 @@ internal class FirFileAnnotationsResolveTransformer(
|
||||
check(annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { "Annotation was not resolved" }
|
||||
}
|
||||
|
||||
override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented")
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) = error("Not implemented")
|
||||
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = false
|
||||
}
|
||||
override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = false
|
||||
}
|
||||
|
||||
+7
-7
@@ -12,8 +12,8 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
|
||||
internal interface FirLazyTransformerForIDE {
|
||||
fun transformDeclaration(phaseRunner: FirPhaseRunner)
|
||||
fun ensureResolved(declaration: FirDeclaration)
|
||||
fun ensureResolvedDeep(declaration: FirDeclaration) {
|
||||
fun ensureResolved(declaration: FirDeclaration<*>)
|
||||
fun ensureResolvedDeep(declaration: FirDeclaration<*>) {
|
||||
if (!enableDeepEnsure) return
|
||||
ensureResolved(declaration)
|
||||
if (declaration is FirRegularClass) {
|
||||
@@ -27,19 +27,19 @@ internal interface FirLazyTransformerForIDE {
|
||||
|
||||
private object ResolvePhaseWithForAllDeclarationsKey : FirDeclarationDataKey()
|
||||
|
||||
private var FirDeclaration.resolvePhaseForDeclarationAndChildrenAttr: FirResolvePhase?
|
||||
private var FirDeclaration<*>.resolvePhaseForDeclarationAndChildrenAttr: FirResolvePhase?
|
||||
by FirDeclarationDataRegistry.data(ResolvePhaseWithForAllDeclarationsKey)
|
||||
|
||||
/**
|
||||
* This resolve phase is used to check if current declaration and it's children were resolved for phase
|
||||
*/
|
||||
var FirDeclaration.resolvePhaseForDeclarationAndChildren: FirResolvePhase
|
||||
var FirDeclaration<*>.resolvePhaseForDeclarationAndChildren: FirResolvePhase
|
||||
get() = resolvePhaseForDeclarationAndChildrenAttr ?: FirResolvePhase.RAW_FIR
|
||||
set(value) {
|
||||
resolvePhaseForDeclarationAndChildrenAttr = value
|
||||
}
|
||||
|
||||
fun FirDeclaration.updateResolvedPhaseForDeclarationAndChildren(phase: FirResolvePhase) {
|
||||
fun FirDeclaration<*>.updateResolvedPhaseForDeclarationAndChildren(phase: FirResolvePhase) {
|
||||
val allDeclaration = resolvePhaseForDeclarationAndChildren
|
||||
if (allDeclaration < phase) {
|
||||
resolvePhaseForDeclarationAndChildren = phase
|
||||
@@ -67,7 +67,7 @@ internal interface FirLazyTransformerForIDE {
|
||||
|
||||
val DUMMY = object : FirLazyTransformerForIDE {
|
||||
override fun transformDeclaration(phaseRunner: FirPhaseRunner) = Unit
|
||||
override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented")
|
||||
override fun ensureResolved(declaration: FirDeclaration<*>) = error("Not implemented")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-16
@@ -8,9 +8,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirAbstractPhaseTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
|
||||
@@ -19,21 +17,21 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration
|
||||
private var isInsideTargetDeclaration: Boolean = false
|
||||
private var designationPassed: Boolean = false
|
||||
|
||||
inline fun <K : FirDeclaration, D> visitDeclarationContent(
|
||||
inline fun <D> visitDeclarationContent(
|
||||
visitor: FirVisitor<Unit, D>,
|
||||
declaration: K,
|
||||
declaration: FirDeclaration<*>,
|
||||
data: D,
|
||||
default: () -> K
|
||||
) = processDeclarationContent(declaration, default) {
|
||||
default: () -> FirDeclaration<*>
|
||||
): FirDeclaration<*> = processDeclarationContent(declaration, default) {
|
||||
it.accept(visitor, data)
|
||||
}
|
||||
|
||||
inline fun <K : FirDeclaration, D> transformDeclarationContent(
|
||||
inline fun <D> transformDeclarationContent(
|
||||
transformer: FirDefaultTransformer<D>,
|
||||
declaration: K,
|
||||
declaration: FirDeclaration<*>,
|
||||
data: D,
|
||||
default: () -> K
|
||||
): K = processDeclarationContent(declaration, default) { toTransform ->
|
||||
default: () -> FirDeclaration<*>
|
||||
): FirDeclaration<*> = processDeclarationContent(declaration, default) { toTransform ->
|
||||
toTransform.transform<FirElement, D>(transformer, data).also { transformed ->
|
||||
check(transformed === toTransform) {
|
||||
"become $transformed `${transformed.render()}`, was ${toTransform}: `${toTransform.render()}`"
|
||||
@@ -41,11 +39,11 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <K : FirDeclaration> processDeclarationContent(
|
||||
declaration: K,
|
||||
default: () -> K,
|
||||
applyToDesignated: (FirDeclaration) -> Unit,
|
||||
): K {
|
||||
private inline fun processDeclarationContent(
|
||||
declaration: FirDeclaration<*>,
|
||||
default: () -> FirDeclaration<*>,
|
||||
applyToDesignated: (FirDeclaration<*>) -> Unit,
|
||||
): FirDeclaration<*> {
|
||||
//It means that we are inside the target declaration
|
||||
if (isInsideTargetDeclaration) {
|
||||
return default()
|
||||
@@ -76,4 +74,4 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration
|
||||
fun ensureDesignationPassed() {
|
||||
check(designationPassed) { "Designation not passed for declaration ${designation.declaration::class.simpleName}" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -9,10 +9,9 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
|
||||
fun FirDeclaration.getContainingFile(): FirFile? {
|
||||
fun FirDeclaration<*>.getContainingFile(): FirFile? {
|
||||
val provider = moduleData.session.firProvider
|
||||
return when (this) {
|
||||
is FirFile -> this
|
||||
@@ -20,4 +19,4 @@ fun FirDeclaration.getContainingFile(): FirFile? {
|
||||
is FirClassLikeDeclaration<*> -> provider.getFirClassifierContainerFile(symbol)
|
||||
else -> error("Unsupported declaration ${this::class.java}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+13
-10
@@ -5,7 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.util
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||
@@ -24,7 +27,7 @@ internal fun KtDeclaration.findSourceNonLocalFirDeclaration(
|
||||
firSymbolProvider: FirSymbolProvider,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
containerFirFile: FirFile? = null
|
||||
): FirDeclaration {
|
||||
): FirDeclaration<*> {
|
||||
//TODO test what way faster
|
||||
findSourceNonLocalFirDeclarationByProvider(firFileBuilder, firSymbolProvider, moduleFileCache, containerFirFile)?.let { return it }
|
||||
findSourceOfNonLocalFirDeclarationByTraversingWholeTree(firFileBuilder, moduleFileCache, containerFirFile)?.let { return it }
|
||||
@@ -35,23 +38,23 @@ internal fun KtDeclaration.findFirDeclarationForAnyFirSourceDeclaration(
|
||||
firFileBuilder: FirFileBuilder,
|
||||
firSymbolProvider: FirSymbolProvider,
|
||||
moduleFileCache: ModuleFileCache
|
||||
): FirDeclaration {
|
||||
): FirDeclaration<*> {
|
||||
val nonLocalDeclaration = getNonLocalContainingOrThisDeclaration()
|
||||
?.findSourceNonLocalFirDeclaration(firFileBuilder, firSymbolProvider, moduleFileCache)
|
||||
?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, preferLazyBodies = true)
|
||||
val originalDeclaration = originalDeclaration
|
||||
val fir = FirElementFinder.findElementIn<FirDeclaration>(nonLocalDeclaration) { firDeclaration ->
|
||||
val fir = FirElementFinder.findElementIn<FirDeclaration<*>>(nonLocalDeclaration) { firDeclaration ->
|
||||
firDeclaration.psi == this || firDeclaration.psi == originalDeclaration
|
||||
}
|
||||
return fir
|
||||
?: error("FirDeclaration was not found for\n${getElementTextInContext()}")
|
||||
}
|
||||
|
||||
internal inline fun <reified F : FirDeclaration> KtDeclaration.findFirDeclarationForAnyFirSourceDeclarationOfType(
|
||||
internal inline fun <reified F : FirDeclaration<*>> KtDeclaration.findFirDeclarationForAnyFirSourceDeclarationOfType(
|
||||
firFileBuilder: FirFileBuilder,
|
||||
firSymbolProvider: FirSymbolProvider,
|
||||
moduleFileCache: ModuleFileCache
|
||||
): FirDeclaration {
|
||||
): FirDeclaration<*> {
|
||||
val fir = findFirDeclarationForAnyFirSourceDeclaration(firFileBuilder, firSymbolProvider, moduleFileCache)
|
||||
if (fir !is F) throw InvalidFirElementTypeException(this, F::class, fir::class)
|
||||
return fir
|
||||
@@ -61,7 +64,7 @@ private fun KtDeclaration.findSourceOfNonLocalFirDeclarationByTraversingWholeTre
|
||||
firFileBuilder: FirFileBuilder,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
containerFirFile: FirFile?,
|
||||
): FirDeclaration? {
|
||||
): FirDeclaration<*>? {
|
||||
val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, preferLazyBodies = true)
|
||||
val originalDeclaration = originalDeclaration
|
||||
return FirElementFinder.findElementIn(firFile, goInside = { it is FirRegularClass }) { firDeclaration ->
|
||||
@@ -74,7 +77,7 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider(
|
||||
firSymbolProvider: FirSymbolProvider,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
containerFirFile: FirFile?
|
||||
): FirDeclaration? {
|
||||
): FirDeclaration<*>? {
|
||||
val candidate = when {
|
||||
this is KtClassOrObject -> findFir(firSymbolProvider)
|
||||
this is KtNamedDeclaration && (this is KtProperty || this is KtNamedFunction) -> {
|
||||
@@ -122,5 +125,5 @@ private fun KtClassLikeDeclaration.findFir(firSymbolProvider: FirSymbolProvider)
|
||||
}
|
||||
|
||||
|
||||
val FirDeclaration.isGeneratedDeclaration
|
||||
get() = realPsi == null
|
||||
val FirDeclaration<*>.isGeneratedDeclaration
|
||||
get() = realPsi == null
|
||||
|
||||
+2
-4
@@ -6,11 +6,9 @@
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.util
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
|
||||
|
||||
internal fun FirDeclaration.ensurePhase(firResolvePhase: FirResolvePhase) =
|
||||
internal fun FirDeclaration<*>.ensurePhase(firResolvePhase: FirResolvePhase) =
|
||||
check(resolvePhase >= firResolvePhase) {
|
||||
"Element phase required to be $firResolvePhase but element resolved to $resolvePhase"
|
||||
}
|
||||
@@ -34,4 +32,4 @@ internal fun FirDeclarationDesignation.ensurePhaseForClasses(firResolvePhase: Fi
|
||||
internal fun FirDeclarationDesignation.isTargetCallableDeclarationAndInPhase(firResolvePhase: FirResolvePhase): Boolean =
|
||||
(declaration as? FirCallableDeclaration<*>)?.let { it.resolvePhase >= firResolvePhase } ?: false
|
||||
|
||||
internal fun FirDeclarationDesignation.targetContainingDeclaration(): FirDeclaration? = path.lastOrNull()
|
||||
internal fun FirDeclarationDesignation.targetContainingDeclaration(): FirDeclaration<*>? = path.lastOrNull()
|
||||
|
||||
+2
-2
@@ -67,7 +67,7 @@ internal inline fun checkCanceled() {
|
||||
internal val FirElement.isErrorElement
|
||||
get() = this is FirDiagnosticHolder
|
||||
|
||||
internal val FirDeclaration.ktDeclaration: KtDeclaration
|
||||
internal val FirDeclaration<*>.ktDeclaration: KtDeclaration
|
||||
get() {
|
||||
val psi = psi
|
||||
?: error("PSI element was not found for${render()}")
|
||||
@@ -85,7 +85,7 @@ internal val FirDeclaration.ktDeclaration: KtDeclaration
|
||||
}
|
||||
}
|
||||
|
||||
internal val FirDeclaration.containingKtFileIfAny: KtFile?
|
||||
internal val FirDeclaration<*>.containingKtFileIfAny: KtFile?
|
||||
get() = psi?.containingFile as? KtFile
|
||||
|
||||
|
||||
|
||||
+8
-5
@@ -5,8 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.withFirDeclaration
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType
|
||||
@@ -27,13 +30,13 @@ import org.junit.jupiter.api.parallel.ExecutionMode
|
||||
@Execution(ExecutionMode.SAME_THREAD)
|
||||
abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingleFileTest() {
|
||||
|
||||
private fun FirFile.findResolveMe(): FirDeclaration {
|
||||
private fun FirFile.findResolveMe(): FirDeclaration<*> {
|
||||
val visitor = object : FirVisitorVoid() {
|
||||
var result: FirDeclaration? = null
|
||||
var result: FirDeclaration<*>? = null
|
||||
override fun visitElement(element: FirElement) {
|
||||
if (result != null) return
|
||||
val declaration = element.realPsi as? KtDeclaration
|
||||
if (element is FirDeclaration && declaration != null && declaration.name == "resolveMe") {
|
||||
if (element is FirDeclaration<*> && declaration != null && declaration.name == "resolveMe") {
|
||||
result = element
|
||||
return
|
||||
}
|
||||
@@ -107,4 +110,4 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
|
||||
}
|
||||
|
||||
private class DesignationBuilder(private val elementToBuild: KtDeclaration) : FirVisitorVoid() {
|
||||
private val path = mutableListOf<FirDeclaration>()
|
||||
private val path = mutableListOf<FirDeclaration<*>>()
|
||||
var resultDesignation: FirDeclarationDesignation? = null
|
||||
private set
|
||||
|
||||
@@ -63,7 +63,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
|
||||
when (element) {
|
||||
is FirSimpleFunction, is FirProperty -> {
|
||||
if (element.psi == elementToBuild) {
|
||||
val originalDeclaration = element as FirDeclaration
|
||||
val originalDeclaration = element as FirDeclaration<*>
|
||||
resultDesignation = FirDeclarationDesignation(path, originalDeclaration)
|
||||
} else {
|
||||
element.acceptChildren(this)
|
||||
|
||||
+1
-1
@@ -107,7 +107,7 @@ abstract class AbstractDiagnosticTraversalCounterTest : AbstractLowLevelApiSing
|
||||
firFile: FirElement,
|
||||
): Set<FirElement> {
|
||||
val elementUsageCount = mutableMapOf<FirElement, Int>()
|
||||
val sessionHolder = SessionHolderImpl((firFile as FirDeclaration).moduleData.session, ScopeSession())
|
||||
val sessionHolder = SessionHolderImpl((firFile as FirDeclaration<*>).moduleData.session, ScopeSession())
|
||||
val visitor = object : AbstractDiagnosticCollectorVisitor(
|
||||
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder)
|
||||
) {
|
||||
|
||||
+6
-6
@@ -57,9 +57,9 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT
|
||||
}
|
||||
}
|
||||
|
||||
private fun FileStructureElement.getFirDeclaration(): FirDeclaration = when (this) {
|
||||
private fun FileStructureElement.getFirDeclaration(): FirDeclaration<*> = when (this) {
|
||||
is NonReanalyzableDeclarationStructureElement -> fir
|
||||
is ReanalyzableStructureElement<*, *> -> firSymbol.fir as FirDeclaration
|
||||
is ReanalyzableStructureElement<*, *> -> firSymbol.fir
|
||||
is RootStructureElement -> firFile
|
||||
}
|
||||
|
||||
@@ -68,10 +68,10 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT
|
||||
private val assertions: AssertionsService
|
||||
) :
|
||||
BeforeElementDiagnosticCollectionHandler() {
|
||||
lateinit var elementsToCheckContext: List<FirDeclaration>
|
||||
lateinit var elementsToCheckContext: List<FirDeclaration<*>>
|
||||
lateinit var firFile: FirFile
|
||||
|
||||
override fun beforeGoingNestedDeclaration(declaration: FirDeclaration, context: PersistentCheckerContext) {
|
||||
override fun beforeGoingNestedDeclaration(declaration: FirDeclaration<*>, context: PersistentCheckerContext) {
|
||||
if (declaration is FirFile) {
|
||||
return
|
||||
}
|
||||
@@ -93,8 +93,8 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT
|
||||
private fun PersistentImplicitReceiverStack.asString() =
|
||||
joinToString { it.boundSymbol.name() }
|
||||
|
||||
private fun PersistentList<FirDeclaration>.asString() =
|
||||
joinToString(transform = FirDeclaration::name)
|
||||
private fun PersistentList<FirDeclaration<*>>.asString() =
|
||||
joinToString(transform = FirDeclaration<*>::name)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-7
@@ -9,14 +9,13 @@ import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState
|
||||
@@ -34,14 +33,11 @@ internal fun FirBasedSymbol<*>.name(): String = when (this) {
|
||||
is FirCallableSymbol<*> -> callableId.callableName.asString()
|
||||
is FirClassLikeSymbol<*> -> classId.shortClassName.asString()
|
||||
is FirAnonymousInitializerSymbol -> "<init>"
|
||||
is FirFileSymbol -> "<FILE>"
|
||||
else -> error("unknown symbol ${this::class.simpleName}")
|
||||
}
|
||||
|
||||
internal fun FirDeclaration.name(): String = when (this) {
|
||||
is FirSymbolOwner<*> -> symbol.name()
|
||||
is FirFile -> "<FILE>"
|
||||
else -> error("unknown declaration ${this::class.simpleName}")
|
||||
}
|
||||
internal fun FirDeclaration<*>.name(): String = symbol.name()
|
||||
|
||||
internal inline fun <R> resolveWithClearCaches(
|
||||
context: KtElement,
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ private object FirToKtConversionCreator {
|
||||
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirRegularClass")
|
||||
),
|
||||
FirMemberDeclaration::class to HLFunctionCallConversion(
|
||||
"firSymbolBuilder.buildSymbol({0} as FirDeclaration)",
|
||||
"firSymbolBuilder.buildSymbol({0} as FirDeclaration<*>)",
|
||||
KtSymbol::class.createType(),
|
||||
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration")
|
||||
),
|
||||
|
||||
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.isPrimitiveType
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
@@ -36,7 +35,10 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtNonErrorClassType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtTypeWithNullability
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
@@ -194,7 +196,7 @@ internal val KtType.nullabilityType: NullabilityType
|
||||
} ?: NullabilityType.Unknown
|
||||
|
||||
|
||||
internal fun FirMemberDeclaration.computeSimpleModality(): Set<String> {
|
||||
internal fun FirMemberDeclaration<*>.computeSimpleModality(): Set<String> {
|
||||
require(this !is FirConstructor)
|
||||
|
||||
val modifier = when (modality) {
|
||||
|
||||
+2
-2
@@ -99,7 +99,7 @@ object FirIdeDeserializedDeclarationSourceProvider {
|
||||
return null
|
||||
}
|
||||
|
||||
private fun FirDeclaration.scope(project: Project): GlobalSearchScope {
|
||||
private fun FirDeclaration<*>.scope(project: Project): GlobalSearchScope {
|
||||
return GlobalSearchScope.allScope(project)
|
||||
/* TODO:
|
||||
val session = session as? FirLibrarySession
|
||||
@@ -150,5 +150,5 @@ fun FirElement.findPsi(session: FirSession): PsiElement? =
|
||||
* For data classes & enums generated members like `copy` `componentN`, `values` it will return corresponding enum/data class
|
||||
* Otherwise, behaves the same way as [findPsi] returns exact PSI declaration corresponding to passed [FirDeclaration]
|
||||
*/
|
||||
fun FirDeclaration.findReferencePsi(): PsiElement? =
|
||||
fun FirDeclaration<*>.findReferencePsi(): PsiElement? =
|
||||
psi ?: FirIdeDeserializedDeclarationSourceProvider.findPsi(this, (moduleData.session as FirIdeSession).project)
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
import org.jetbrains.kotlin.resolve.constants.evaluate.CompileTimeType
|
||||
@@ -204,7 +204,7 @@ internal class FirCompileTimeConstantEvaluator {
|
||||
buildConstExpression(source, this, value as T)
|
||||
|
||||
private fun FirFunctionCall.getOriginalFunction(): FirCallableDeclaration<*>? {
|
||||
val symbol: AbstractFirBasedSymbol<*>? = when (val reference = calleeReference) {
|
||||
val symbol: FirBasedSymbol<*>? = when (val reference = calleeReference) {
|
||||
is FirResolvedNamedReference -> reference.resolvedSymbol
|
||||
else -> null
|
||||
}
|
||||
|
||||
+10
-7
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
|
||||
import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag
|
||||
import org.jetbrains.kotlin.fir.resolve.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
|
||||
@@ -27,7 +27,10 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider
|
||||
import org.jetbrains.kotlin.idea.frontend.api.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtStarProjectionTypeArgument
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgument
|
||||
import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgumentWithVariance
|
||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.types.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||
@@ -50,7 +53,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
resolveState: FirModuleResolveState,
|
||||
override val token: ValidityToken,
|
||||
val withReadOnlyCaching: Boolean,
|
||||
private val symbolsCache: BuilderCache<FirDeclaration, KtSymbol>,
|
||||
private val symbolsCache: BuilderCache<FirDeclaration<*>, KtSymbol>,
|
||||
private val filesCache: BuilderCache<FirFile, KtFileSymbol>,
|
||||
private val backingFieldCache: BuilderCache<FirBackingFieldSymbol, KtBackingFieldSymbol>,
|
||||
private val typesCache: BuilderCache<ConeKotlinType, KtType>,
|
||||
@@ -97,7 +100,7 @@ internal class KtSymbolByFirBuilder private constructor(
|
||||
}
|
||||
|
||||
|
||||
fun buildSymbol(fir: FirDeclaration): KtSymbol {
|
||||
fun buildSymbol(fir: FirDeclaration<*>): KtSymbol {
|
||||
return when (fir) {
|
||||
is FirClassLikeDeclaration<*> -> classifierBuilder.buildClassLikeSymbol(fir)
|
||||
is FirTypeParameter -> classifierBuilder.buildTypeParameterSymbol(fir)
|
||||
@@ -397,7 +400,7 @@ private class BuilderCache<From, To: Any> private constructor(
|
||||
}
|
||||
|
||||
internal fun FirElement.buildSymbol(builder: KtSymbolByFirBuilder) =
|
||||
(this as? FirDeclaration)?.let(builder::buildSymbol)
|
||||
(this as? FirDeclaration<*>)?.let(builder::buildSymbol)
|
||||
|
||||
internal fun FirDeclaration.buildSymbol(builder: KtSymbolByFirBuilder) =
|
||||
internal fun FirDeclaration<*>.buildSymbol(builder: KtSymbolByFirBuilder) =
|
||||
builder.buildSymbol(this)
|
||||
|
||||
+1
-1
@@ -17,13 +17,13 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolutionMode
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolver
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtCompletionCandidateChecker
|
||||
import org.jetbrains.kotlin.idea.frontend.api.components.KtExtensionApplicabilityResult
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
+6
-7
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.components
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
@@ -49,14 +48,14 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
return overriddenElement.map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) }
|
||||
}
|
||||
|
||||
private fun FirTypeScope.processCallableByName(declaration: FirDeclaration) = when (declaration) {
|
||||
private fun FirTypeScope.processCallableByName(declaration: FirDeclaration<*>) = when (declaration) {
|
||||
is FirSimpleFunction -> processFunctionsByName(declaration.name) { }
|
||||
is FirProperty -> processPropertiesByName(declaration.name) { }
|
||||
else -> error { "Invalid FIR symbol to process: ${declaration::class}" }
|
||||
}
|
||||
|
||||
private fun FirTypeScope.processAllOverriddenDeclarations(
|
||||
declaration: FirDeclaration,
|
||||
declaration: FirDeclaration<*>,
|
||||
processor: (FirCallableDeclaration<*>) -> Unit
|
||||
) = when (declaration) {
|
||||
is FirSimpleFunction -> processOverriddenFunctions(declaration.symbol) { symbol ->
|
||||
@@ -71,7 +70,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
}
|
||||
|
||||
private fun FirTypeScope.processDirectOverriddenDeclarations(
|
||||
declaration: FirDeclaration,
|
||||
declaration: FirDeclaration<*>,
|
||||
processor: (FirCallableDeclaration<*>) -> Unit
|
||||
) = when (declaration) {
|
||||
is FirSimpleFunction -> processDirectOverriddenFunctionsWithBaseScope(declaration.symbol) { symbol, _ ->
|
||||
@@ -87,7 +86,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
|
||||
private inline fun <T : KtSymbol> processOverrides(
|
||||
callableSymbol: T,
|
||||
crossinline process: (FirTypeScope, FirDeclaration) -> Unit
|
||||
crossinline process: (FirTypeScope, FirDeclaration<*>) -> Unit
|
||||
) {
|
||||
require(callableSymbol is KtFirSymbol<*>)
|
||||
val containingDeclaration = with(analysisSession) {
|
||||
@@ -101,7 +100,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
private inline fun processOverrides(
|
||||
containingDeclaration: KtFirNamedClassOrObjectSymbol,
|
||||
callableSymbol: KtFirSymbol<*>,
|
||||
crossinline process: (FirTypeScope, FirDeclaration) -> Unit
|
||||
crossinline process: (FirTypeScope, FirDeclaration<*>) -> Unit
|
||||
) {
|
||||
containingDeclaration.firRef.withFir(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { firContainer ->
|
||||
callableSymbol.firRef.withFirUnsafe { firCallableDeclaration ->
|
||||
@@ -134,7 +133,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
|
||||
require(symbol is KtFirSymbol<*>)
|
||||
if (symbol.origin != KtSymbolOrigin.INTERSECTION_OVERRIDE) return emptyList()
|
||||
return symbol.firRef.withFir { fir ->
|
||||
val firSymbol = (fir as? FirSymbolOwner<*>)?.symbol ?: return@withFir emptyList()
|
||||
val firSymbol = fir.symbol
|
||||
firSymbol.getIntersectionOverriddenSymbols().map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) }
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.components
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
@@ -56,7 +55,7 @@ internal class KtFirVisibilityChecker(
|
||||
?.let { ExpressionReceiverValue(it) }
|
||||
|
||||
candidateSymbol.firRef.withFir { candidateFirSymbol ->
|
||||
require(candidateFirSymbol is FirMemberDeclaration && candidateFirSymbol is FirSymbolOwner<*>) {
|
||||
require(candidateFirSymbol is FirMemberDeclaration) {
|
||||
"$candidateFirSymbol must be a FirMemberDeclaration and FirSymbolOwner; it were ${candidateFirSymbol::class} instead"
|
||||
}
|
||||
|
||||
|
||||
+25
-25
@@ -841,7 +841,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE) { firDiagnostic ->
|
||||
ExposedTypealiasExpandedTypeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -850,7 +850,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_FUNCTION_RETURN_TYPE) { firDiagnostic ->
|
||||
ExposedFunctionReturnTypeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -859,7 +859,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_RECEIVER_TYPE) { firDiagnostic ->
|
||||
ExposedReceiverTypeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -868,7 +868,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_PROPERTY_TYPE) { firDiagnostic ->
|
||||
ExposedPropertyTypeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -877,7 +877,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR) { firDiagnostic ->
|
||||
ExposedPropertyTypeInConstructorImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -886,7 +886,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_PARAMETER_TYPE) { firDiagnostic ->
|
||||
ExposedParameterTypeImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -895,7 +895,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_SUPER_INTERFACE) { firDiagnostic ->
|
||||
ExposedSuperInterfaceImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -904,7 +904,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_SUPER_CLASS) { firDiagnostic ->
|
||||
ExposedSuperClassImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -913,7 +913,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.EXPOSED_TYPE_PARAMETER_BOUND) { firDiagnostic ->
|
||||
ExposedTypeParameterBoundImpl(
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic.c,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -1590,7 +1590,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.NOTHING_TO_OVERRIDE) { firDiagnostic ->
|
||||
NothingToOverrideImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
@@ -1687,32 +1687,32 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic ->
|
||||
ReturnTypeMismatchOnOverrideImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic ->
|
||||
PropertyTypeMismatchOnOverrideImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.VAR_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic ->
|
||||
VarTypeMismatchOnOverrideImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.VAR_OVERRIDDEN_BY_VAL) { firDiagnostic ->
|
||||
VarOverriddenByValImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
@@ -1731,7 +1731,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.VIRTUAL_MEMBER_HIDDEN) { firDiagnostic ->
|
||||
VirtualMemberHiddenImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b) as KtNamedClassOrObjectSymbol,
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -1783,7 +1783,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS) { firDiagnostic ->
|
||||
AbstractFunctionInNonAbstractClassImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
@@ -1791,28 +1791,28 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.ABSTRACT_FUNCTION_WITH_BODY) { firDiagnostic ->
|
||||
AbstractFunctionWithBodyImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.NON_ABSTRACT_FUNCTION_WITH_NO_BODY) { firDiagnostic ->
|
||||
NonAbstractFunctionWithNoBodyImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.PRIVATE_FUNCTION_WITH_NO_BODY) { firDiagnostic ->
|
||||
PrivateFunctionWithNoBodyImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.NON_MEMBER_FUNCTION_NO_BODY) { firDiagnostic ->
|
||||
NonMemberFunctionNoBodyImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
@@ -1904,7 +1904,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
}
|
||||
add(FirErrors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS) { firDiagnostic ->
|
||||
AbstractPropertyInNonAbstractClassImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b),
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
|
||||
+3
-8
@@ -189,7 +189,7 @@ internal class ConeTypeIdeRenderer(
|
||||
return designation
|
||||
}
|
||||
|
||||
private fun collectDesignationPathForLocal(declaration: FirDeclaration): List<FirDeclaration>? {
|
||||
private fun collectDesignationPathForLocal(declaration: FirDeclaration<*>): List<FirDeclaration<*>>? {
|
||||
val containingClass = when (declaration) {
|
||||
is FirCallableDeclaration<*> -> declaration.containingClass()?.toFirRegularClass(declaration.moduleData.session)
|
||||
is FirAnonymousObject -> return listOf(declaration)
|
||||
@@ -326,7 +326,6 @@ internal class ConeTypeIdeRenderer(
|
||||
|
||||
val notNullParametersType = type
|
||||
.valueParameterTypesIncludingReceiver(session)
|
||||
.filterNotNull()
|
||||
.applyIf(receiverType != null) { drop(1) }
|
||||
|
||||
notNullParametersType.forEachIndexed { index, typeProjection ->
|
||||
@@ -337,14 +336,10 @@ internal class ConeTypeIdeRenderer(
|
||||
append(") -> ")
|
||||
|
||||
val returnType = type.returnType(session)
|
||||
if (returnType != null) {
|
||||
append(renderType(returnType))
|
||||
} else {
|
||||
appendError()
|
||||
}
|
||||
append(renderType(returnType))
|
||||
|
||||
if (needParenthesis) append(")")
|
||||
|
||||
renderNullability(type)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
-16
@@ -28,14 +28,14 @@ import org.jetbrains.kotlin.renderer.render
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||
|
||||
internal class FirIdeRenderer private constructor(
|
||||
private var containingDeclaration: FirDeclaration?,
|
||||
private var containingDeclaration: FirDeclaration<*>?,
|
||||
private val options: KtDeclarationRendererOptions,
|
||||
private val session: FirSession
|
||||
) : FirVisitor<Unit, StringBuilder>() {
|
||||
|
||||
private val typeIdeRenderer: ConeTypeIdeRenderer = ConeTypeIdeRenderer(session, options.typeRendererOptions)
|
||||
|
||||
private fun StringBuilder.renderAnnotations(annotated: FirAnnotatedDeclaration) {
|
||||
private fun StringBuilder.renderAnnotations(annotated: FirAnnotatedDeclaration<*>) {
|
||||
if (RendererModifier.ANNOTATIONS in options.modifiers) {
|
||||
renderAnnotations(typeIdeRenderer, annotated.annotations, session)
|
||||
}
|
||||
@@ -58,7 +58,7 @@ internal class FirIdeRenderer private constructor(
|
||||
return renderType(approximatedIfNeeded, annotations)
|
||||
}
|
||||
|
||||
private fun StringBuilder.renderName(declaration: FirDeclaration) {
|
||||
private fun StringBuilder.renderName(declaration: FirDeclaration<*>) {
|
||||
if (declaration is FirAnonymousObject) {
|
||||
append("<no name provided>")
|
||||
return
|
||||
@@ -109,7 +109,7 @@ internal class FirIdeRenderer private constructor(
|
||||
renderModifier(RendererModifier.MODALITY in options.modifiers, modality.name.toLowerCaseAsciiOnly())
|
||||
}
|
||||
|
||||
private fun FirMemberDeclaration.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration?): Modality {
|
||||
private fun FirMemberDeclaration<*>.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration<*>?): Modality {
|
||||
if (this is FirRegularClass) {
|
||||
return if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
|
||||
}
|
||||
@@ -126,7 +126,7 @@ internal class FirIdeRenderer private constructor(
|
||||
|
||||
private fun StringBuilder.renderModalityForCallable(
|
||||
callable: FirCallableMemberDeclaration<*>,
|
||||
containingDeclaration: FirDeclaration?
|
||||
containingDeclaration: FirDeclaration<*>?
|
||||
) {
|
||||
val modality = callable.modality ?: return
|
||||
val isTopLevel = containingDeclaration == null
|
||||
@@ -148,13 +148,13 @@ internal class FirIdeRenderer private constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun StringBuilder.renderMemberModifiers(declaration: FirMemberDeclaration) {
|
||||
private fun StringBuilder.renderMemberModifiers(declaration: FirMemberDeclaration<*>) {
|
||||
renderModifier(declaration.isExternal, "external")
|
||||
renderModifier(RendererModifier.EXPECT in options.modifiers && declaration.isExpect, "expect")
|
||||
renderModifier(RendererModifier.ACTUAL in options.modifiers && declaration.isActual, "actual")
|
||||
}
|
||||
|
||||
private fun StringBuilder.renderAdditionalModifiers(firMember: FirMemberDeclaration) {
|
||||
private fun StringBuilder.renderAdditionalModifiers(firMember: FirMemberDeclaration<*>) {
|
||||
val isOperator =
|
||||
firMember.isOperator//TODO make similar to functionDescriptor.overriddenDescriptors.none { it.isOperator }
|
||||
val isInfix =
|
||||
@@ -167,7 +167,7 @@ internal class FirIdeRenderer private constructor(
|
||||
renderModifier(RendererModifier.OPERATOR in options.modifiers && isOperator, "operator")
|
||||
}
|
||||
|
||||
private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirMemberDeclaration) {
|
||||
private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirMemberDeclaration<*>) {
|
||||
renderModifier(functionDescriptor.isSuspend, "suspend")
|
||||
}
|
||||
|
||||
@@ -377,14 +377,14 @@ internal class FirIdeRenderer private constructor(
|
||||
renderWhereSuffix(typeParameters)
|
||||
}
|
||||
|
||||
fun FirDeclaration.isDefaultPrimaryConstructor() =
|
||||
fun FirDeclaration<*>.isDefaultPrimaryConstructor() =
|
||||
this is FirConstructor &&
|
||||
isPrimary &&
|
||||
valueParameters.isEmpty() &&
|
||||
!hasBody &&
|
||||
(visibility == Visibilities.DEFAULT_VISIBILITY || regularClass.classKind == ClassKind.OBJECT)
|
||||
|
||||
fun FirDeclaration.skipDeclarationForEnumClass(): Boolean {
|
||||
fun FirDeclaration<*>.skipDeclarationForEnumClass(): Boolean {
|
||||
if (this is FirConstructor) return isPrimary && valueParameters.isEmpty()
|
||||
if (this !is FirSimpleFunction) return false
|
||||
|
||||
@@ -440,14 +440,14 @@ internal class FirIdeRenderer private constructor(
|
||||
tabbedString = oldTabbedString
|
||||
}
|
||||
|
||||
private inline fun underContainingDeclaration(firDeclaration: FirDeclaration, body: () -> Unit) {
|
||||
private inline fun underContainingDeclaration(firDeclaration: FirDeclaration<*>, body: () -> Unit) {
|
||||
val oldContainingDeclaration = containingDeclaration
|
||||
containingDeclaration = firDeclaration
|
||||
body()
|
||||
containingDeclaration = oldContainingDeclaration
|
||||
}
|
||||
|
||||
private inline fun StringBuilder.underBlockDeclaration(firDeclaration: FirDeclaration, withBrackets: Boolean = true, body: () -> Unit) {
|
||||
private inline fun StringBuilder.underBlockDeclaration(firDeclaration: FirDeclaration<*>, withBrackets: Boolean = true, body: () -> Unit) {
|
||||
val oldLength = length
|
||||
if (withBrackets) append(" {")
|
||||
val unchangedLength = length
|
||||
@@ -469,7 +469,7 @@ internal class FirIdeRenderer private constructor(
|
||||
|
||||
private fun StringBuilder.appendTabs() = append(tabbedString)
|
||||
|
||||
private fun underBlockDeclaration(firDeclaration: FirDeclaration, firBlock: FirBlock, data: StringBuilder) {
|
||||
private fun underBlockDeclaration(firDeclaration: FirDeclaration<*>, firBlock: FirBlock, data: StringBuilder) {
|
||||
data.underBlockDeclaration(firDeclaration) {
|
||||
firBlock.accept(this, data)
|
||||
}
|
||||
@@ -502,8 +502,8 @@ internal class FirIdeRenderer private constructor(
|
||||
|
||||
companion object {
|
||||
fun render(
|
||||
firDeclaration: FirDeclaration,
|
||||
containingDeclaration: FirDeclaration?,
|
||||
firDeclaration: FirDeclaration<*>,
|
||||
containingDeclaration: FirDeclaration<*>?,
|
||||
options: KtDeclarationRendererOptions,
|
||||
session: FirSession
|
||||
): String {
|
||||
@@ -679,7 +679,7 @@ internal class FirIdeRenderer private constructor(
|
||||
}
|
||||
|
||||
|
||||
private fun getClassifierKindPrefix(classifier: FirDeclaration): String = when (classifier) {
|
||||
private fun getClassifierKindPrefix(classifier: FirDeclaration<*>): String = when (classifier) {
|
||||
is FirTypeAlias -> "typealias"
|
||||
is FirRegularClass ->
|
||||
if (classifier.isCompanion) {
|
||||
|
||||
+6
-4
@@ -6,7 +6,9 @@
|
||||
package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.originalIfFakeOverride
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
@@ -16,14 +18,14 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin
|
||||
|
||||
internal interface KtFirSymbol<out F : FirDeclaration> : KtSymbol, ValidityTokenOwner {
|
||||
internal interface KtFirSymbol<out F : FirDeclaration<*>> : KtSymbol, ValidityTokenOwner {
|
||||
val firRef: FirRefWithValidityCheck<F>
|
||||
|
||||
override val origin: KtSymbolOrigin get() = firRef.withFir { it.ktSymbolOrigin() }
|
||||
}
|
||||
|
||||
|
||||
private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (origin) {
|
||||
private tailrec fun FirDeclaration<*>.ktSymbolOrigin(): KtSymbolOrigin = when (origin) {
|
||||
FirDeclarationOrigin.Source -> {
|
||||
if (source?.kind == FirFakeSourceElementKind.DataClassGeneratedMembers
|
||||
|| source?.kind == FirFakeSourceElementKind.EnumGeneratedDeclaration
|
||||
@@ -58,5 +60,5 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig
|
||||
}
|
||||
|
||||
|
||||
class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) :
|
||||
class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration<*>) :
|
||||
IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}")
|
||||
|
||||
+7
-5
@@ -7,9 +7,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.resolveSupertypesInTheAir
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.KtFirAnnotationCall
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||
@@ -17,9 +18,10 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||
|
||||
internal class KtFirTypeAndAnnotations<T : FirDeclaration>(
|
||||
internal class KtFirTypeAndAnnotations<T : FirDeclaration<*>>(
|
||||
private val containingDeclaration: FirRefWithValidityCheck<T>,
|
||||
typeResolvePhase: FirResolvePhase,
|
||||
_builder: KtSymbolByFirBuilder,
|
||||
@@ -82,7 +84,7 @@ private fun List<FirTypeRef>.mapToTypeAndAnnotations(
|
||||
KtSimpleFirTypeAndAnnotations(typeRef.coneType, annotations, builder, containingDeclaration.token)
|
||||
}
|
||||
|
||||
internal fun FirRefWithValidityCheck<FirTypedDeclaration>.returnTypeAndAnnotations(
|
||||
internal fun FirRefWithValidityCheck<FirTypedDeclaration<*>>.returnTypeAndAnnotations(
|
||||
typeResolvePhase: FirResolvePhase,
|
||||
builder: KtSymbolByFirBuilder
|
||||
) = KtFirTypeAndAnnotations(this, typeResolvePhase, builder) { it.returnTypeRef }
|
||||
@@ -100,4 +102,4 @@ internal fun FirRefWithValidityCheck<FirCallableMemberDeclaration<*>>.dispatchRe
|
||||
fir.dispatchReceiverType?.let {
|
||||
builder.typeBuilder.buildKtType(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-6
@@ -7,15 +7,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.idea.fir.findPsi
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.mapAnnotationParameters
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedConstantValue
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
@@ -23,7 +18,7 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtCallElement
|
||||
|
||||
internal class KtFirAnnotationCall(
|
||||
private val containingDeclaration: FirRefWithValidityCheck<FirDeclaration>,
|
||||
private val containingDeclaration: FirRefWithValidityCheck<FirDeclaration<*>>,
|
||||
annotationCall: FirAnnotationCall
|
||||
) : KtAnnotationCall() {
|
||||
|
||||
|
||||
+4
-7
@@ -7,12 +7,9 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.expandedConeType
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.coneClassLikeType
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved
|
||||
import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck
|
||||
@@ -22,16 +19,16 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
internal fun FirAnnotationCall.getClassId(session: FirSession): ClassId? =
|
||||
coneClassLikeType?.fullyExpandedType(session)?.classId
|
||||
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration>.toAnnotationsList() = withFir { fir ->
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration<*>>.toAnnotationsList() = withFir { fir ->
|
||||
fir.annotations.map { KtFirAnnotationCall(this, it) }
|
||||
}
|
||||
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration>.containsAnnotation(classId: ClassId): Boolean =
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration<*>>.containsAnnotation(classId: ClassId): Boolean =
|
||||
withFir(ResolveType.AnnotationType) { fir ->
|
||||
fir.annotations.any { it.getClassId(fir.moduleData.session) == classId }
|
||||
}
|
||||
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration>.getAnnotationClassIds(): Collection<ClassId> =
|
||||
internal fun FirRefWithValidityCheck<FirAnnotatedDeclaration<*>>.getAnnotationClassIds(): Collection<ClassId> =
|
||||
withFir(ResolveType.AnnotationType) { fir ->
|
||||
fir.annotations.mapNotNull { it.getClassId(fir.moduleData.session) }
|
||||
}
|
||||
}
|
||||
|
||||
+3
-12
@@ -8,23 +8,14 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.renderWithType
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
|
||||
internal fun KtFirSymbol<FirMemberDeclaration>.getModality(
|
||||
internal fun KtFirSymbol<FirMemberDeclaration<*>>.getModality(
|
||||
phase: FirResolvePhase = FirResolvePhase.STATUS,
|
||||
defaultModality: Modality? = null
|
||||
) =
|
||||
@@ -35,7 +26,7 @@ internal fun KtFirSymbol<FirMemberDeclaration>.getModality(
|
||||
}
|
||||
|
||||
|
||||
private fun FirDeclaration.invalidModalityError(): Nothing {
|
||||
private fun FirDeclaration<*>.invalidModalityError(): Nothing {
|
||||
error(
|
||||
"""|Symbol modality should not be null, looks like the FIR symbol was not properly resolved
|
||||
|
|
||||
@@ -46,7 +37,7 @@ private fun FirDeclaration.invalidModalityError(): Nothing {
|
||||
}
|
||||
|
||||
|
||||
internal fun <F : FirMemberDeclaration> KtFirSymbol<F>.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility =
|
||||
internal fun <F : FirMemberDeclaration<F>> KtFirSymbol<F>.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility =
|
||||
firRef.withFir(phase) { fir -> fir.visibility }
|
||||
|
||||
internal fun KtFirSymbol<FirCallableDeclaration<*>>.getCallableIdIfNonLocal(): CallableId? =
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.ideSessionComponents
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
|
||||
internal inline fun <reified D : FirDeclaration> FirScope.findDeclarationWithSignature(
|
||||
internal inline fun <reified D : FirDeclaration<*>> FirScope.findDeclarationWithSignature(
|
||||
signature: IdSignature,
|
||||
firSession: FirSession,
|
||||
processor: FirScope.((FirBasedSymbol<*>) -> Unit) -> Unit
|
||||
@@ -31,7 +31,7 @@ internal inline fun <reified D : FirDeclaration> FirScope.findDeclarationWithSig
|
||||
return foundSymbol
|
||||
}
|
||||
|
||||
internal inline fun <reified D : FirDeclaration> Collection<FirCallableSymbol<*>>.findDeclarationWithSignatureBySymbols(
|
||||
internal inline fun <reified D : FirDeclaration<*>> Collection<FirCallableSymbol<*>>.findDeclarationWithSignatureBySymbols(
|
||||
signature: IdSignature,
|
||||
firSession: FirSession
|
||||
): D? {
|
||||
@@ -45,7 +45,7 @@ internal inline fun <reified D : FirDeclaration> Collection<FirCallableSymbol<*>
|
||||
return null
|
||||
}
|
||||
|
||||
internal fun FirDeclaration.createSignature(): IdSignature {
|
||||
internal fun FirDeclaration<*>.createSignature(): IdSignature {
|
||||
val signatureComposer = moduleData.session.ideSessionComponents.signatureComposer
|
||||
return signatureComposer.composeSignature(this)
|
||||
?: error("Could not compose signature for ${this.renderWithType(FirRenderer.RenderMode.WithResolvePhases)}, looks like it is private or local")
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.idea.frontend.api.tokens.assertIsValidAndAccessible
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
internal class FirRefWithValidityCheck<out D : FirDeclaration>(fir: D, resolveState: FirModuleResolveState, val token: ValidityToken) {
|
||||
internal class FirRefWithValidityCheck<out D : FirDeclaration<*>>(fir: D, resolveState: FirModuleResolveState, val token: ValidityToken) {
|
||||
private val firWeakRef = WeakReference(fir)
|
||||
private val resolveStateWeakRef = WeakReference(resolveState)
|
||||
|
||||
@@ -138,5 +138,5 @@ internal class FirRefWithValidityCheck<out D : FirDeclaration>(fir: D, resolveSt
|
||||
}
|
||||
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
internal inline fun <D : FirDeclaration> ValidityTokenOwner.firRef(fir: D, resolveState: FirModuleResolveState) =
|
||||
FirRefWithValidityCheck(fir, resolveState, token)
|
||||
internal inline fun <D : FirDeclaration<*>> ValidityTokenOwner.firRef(fir: D, resolveState: FirModuleResolveState) =
|
||||
FirRefWithValidityCheck(fir, resolveState, token)
|
||||
|
||||
+2
-2
@@ -40,7 +40,7 @@ class KtAnalysisSessionFe10BindingHolder private constructor(
|
||||
fun buildSymbol(firElement: FirElement): KtSymbol? = firElement.buildSymbol(firAnalysisSession.firSymbolBuilder)
|
||||
|
||||
@Suppress("UNCHECKED_CAST", "NON_PUBLIC_CALL_FROM_PUBLIC_INLINE")
|
||||
inline fun <T : FirDeclaration, R> withFir(ktSymbol: KtSymbol, crossinline action: (T) -> R) =
|
||||
inline fun <T : FirDeclaration<*>, R> withFir(ktSymbol: KtSymbol, crossinline action: (T) -> R) =
|
||||
(ktSymbol as KtFirSymbol<T>).firRef.withFir(action = action)
|
||||
|
||||
fun toSignature(ktSymbol: KtSymbol): IdSignature = (ktSymbol as KtFirSymbol<*>).firRef.withFir { it.createSignature() }
|
||||
@@ -52,4 +52,4 @@ class KtAnalysisSessionFe10BindingHolder private constructor(
|
||||
return KtAnalysisSessionFe10BindingHolder(firAnalysisSession)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user