FIR IDE: fix unresolved file annotations arguments
This commit is contained in:
+2
-2
@@ -123,10 +123,10 @@ internal class FileStructure(
|
|||||||
val firFile = firFileBuilder.getFirFileResolvedToPhaseWithCaching(
|
val firFile = firFileBuilder.getFirFileResolvedToPhaseWithCaching(
|
||||||
container,
|
container,
|
||||||
moduleFileCache,
|
moduleFileCache,
|
||||||
//TODO: Make resolve whole file into TYPES only for top level declarations or annotations with `file` site
|
FirResolvePhase.IMPORTS,
|
||||||
FirResolvePhase.TYPES,
|
|
||||||
checkPCE = true
|
checkPCE = true
|
||||||
)
|
)
|
||||||
|
firLazyDeclarationResolver.resolveFileAnnotations(firFile, moduleFileCache)
|
||||||
RootStructureElement(
|
RootStructureElement(
|
||||||
firFile,
|
firFile,
|
||||||
container,
|
container,
|
||||||
|
|||||||
+14
-3
@@ -18,16 +18,27 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalCo
|
|||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
|
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedBodyResolveTransformerForIDE
|
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.*
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedContractsResolveTransformerForIDE
|
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedContractsResolveTransformerForIDE
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedImplicitTypesTransformerForIDE
|
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignatedImplicitTypesTransformerForIDE
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirDesignation
|
import org.jetbrains.kotlin.idea.fir.low.level.api.trasformers.FirFileAnnotationsResolveTransformer
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
internal class FirLazyDeclarationResolver(
|
internal class FirLazyDeclarationResolver(
|
||||||
private val firFileBuilder: FirFileBuilder
|
private val firFileBuilder: FirFileBuilder
|
||||||
) {
|
) {
|
||||||
|
fun resolveFileAnnotations(
|
||||||
|
firFile: FirFile,
|
||||||
|
moduleFileCache: ModuleFileCache,
|
||||||
|
scopeSession: ScopeSession = ScopeSession()
|
||||||
|
) {
|
||||||
|
firFileBuilder.runCustomResolveUnderLock(firFile, moduleFileCache) {
|
||||||
|
val transformer = FirFileAnnotationsResolveTransformer(firFile.session, scopeSession)
|
||||||
|
firFile.accept(transformer, ResolutionMode.ContextDependent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun lazyResolveDeclaration(
|
fun lazyResolveDeclaration(
|
||||||
declaration: FirDeclaration,
|
declaration: FirDeclaration,
|
||||||
moduleFileCache: ModuleFileCache,
|
moduleFileCache: ModuleFileCache,
|
||||||
@@ -116,7 +127,7 @@ internal class FirLazyDeclarationResolver(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (toPhase <= nonLazyPhase) return
|
if (toPhase <= nonLazyPhase) return
|
||||||
|
resolveFileAnnotations(containerFirFile, moduleFileCache)
|
||||||
|
|
||||||
val nonLocalDeclarationToResolve = firDeclarationToResolve.getNonLocalDeclarationToResolve(provider, moduleFileCache)
|
val nonLocalDeclarationToResolve = firDeclarationToResolve.getNonLocalDeclarationToResolve(provider, moduleFileCache)
|
||||||
val designation = nonLocalDeclarationToResolve.getDesignation(containerFirFile, provider, moduleFileCache)
|
val designation = nonLocalDeclarationToResolve.getDesignation(containerFirFile, provider, moduleFileCache)
|
||||||
|
|||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
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.resolve.ResolutionMode
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTypeCalculatorForIDE
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
||||||
|
|
||||||
|
internal class FirFileAnnotationsResolveTransformer(
|
||||||
|
session: FirSession,
|
||||||
|
scopeSession: ScopeSession,
|
||||||
|
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(),
|
||||||
|
) : FirBodyResolveTransformer(
|
||||||
|
session,
|
||||||
|
FirResolvePhase.BODY_RESOLVE,
|
||||||
|
implicitTypeOnly = false,
|
||||||
|
scopeSession,
|
||||||
|
createReturnTypeCalculatorForIDE(
|
||||||
|
session,
|
||||||
|
scopeSession,
|
||||||
|
implicitBodyResolveComputationSession,
|
||||||
|
::FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
|
||||||
|
),
|
||||||
|
) {
|
||||||
|
override fun transformFile(file: FirFile, data: ResolutionMode): CompositeTransformResult<FirFile> {
|
||||||
|
return context.withFile(file, components) {
|
||||||
|
file.transformAnnotations(this, data)
|
||||||
|
file.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = false
|
||||||
|
}
|
||||||
+3
-3
@@ -1,13 +1,13 @@
|
|||||||
@file:kotlin.Deprecated("message")
|
@file:kotlin.Deprecated("message")
|
||||||
@file:Suppress(BAR)
|
@file:Suppress(<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: BAR">BAR</error>)
|
||||||
@file:Suppress(BAZ)
|
@file:Suppress(BAZ)
|
||||||
|
|
||||||
@<error descr="Expecting \"file:\" prefix for file annotations">k</error>otlin.Deprecated("message")
|
@<error descr="Expecting \"file:\" prefix for file annotations">k</error>otlin.Deprecated("message")
|
||||||
@<error descr="Expecting \"file:\" prefix for file annotations">S</error>uppress(BAR)
|
@<error descr="Expecting \"file:\" prefix for file annotations">S</error>uppress(<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: BAR">BAR</error>)
|
||||||
@<error descr="Expecting \"file:\" prefix for file annotations">S</error>uppress(BAZ)
|
@<error descr="Expecting \"file:\" prefix for file annotations">S</error>uppress(BAZ)
|
||||||
|
|
||||||
@file:myAnnotation(1, "string")
|
@file:myAnnotation(1, "string")
|
||||||
@file:boo.myAnnotation(1, BAR)
|
@file:boo.myAnnotation(1, <error descr="[UNRESOLVED_REFERENCE] Unresolved reference: BAR">BAR</error>)
|
||||||
@file:myAnnotation(N, BAZ)
|
@file:myAnnotation(N, BAZ)
|
||||||
|
|
||||||
@<error descr="Expecting \"file:\" prefix for file annotations">m</error>yAnnotation(1, "string")
|
@<error descr="Expecting \"file:\" prefix for file annotations">m</error>yAnnotation(1, "string")
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
@file:<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: suppress">suppress</error>(return a)
|
@file:<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: suppress">suppress</error>(return <error descr="[UNRESOLVED_REFERENCE] Unresolved reference: a">a</error>)
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
FILE: main.kt
|
FILE: main.kt
|
||||||
public? final? [TYPES] fun foofoo(): R|kotlin/Int| {
|
public? final? [RAW_FIR] fun foofoo(): Int {
|
||||||
^foofoo barbar#()
|
^foofoo barbar#()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user