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(
|
||||
container,
|
||||
moduleFileCache,
|
||||
//TODO: Make resolve whole file into TYPES only for top level declarations or annotations with `file` site
|
||||
FirResolvePhase.TYPES,
|
||||
FirResolvePhase.IMPORTS,
|
||||
checkPCE = true
|
||||
)
|
||||
firLazyDeclarationResolver.resolveFileAnnotations(firFile, moduleFileCache)
|
||||
RootStructureElement(
|
||||
firFile,
|
||||
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.ModuleFileCache
|
||||
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.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.psi.*
|
||||
|
||||
internal class FirLazyDeclarationResolver(
|
||||
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(
|
||||
declaration: FirDeclaration,
|
||||
moduleFileCache: ModuleFileCache,
|
||||
@@ -116,7 +127,7 @@ internal class FirLazyDeclarationResolver(
|
||||
)
|
||||
}
|
||||
if (toPhase <= nonLazyPhase) return
|
||||
|
||||
resolveFileAnnotations(containerFirFile, moduleFileCache)
|
||||
|
||||
val nonLocalDeclarationToResolve = firDeclarationToResolve.getNonLocalDeclarationToResolve(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:Suppress(BAR)
|
||||
@file:Suppress(<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: BAR">BAR</error>)
|
||||
@file:Suppress(BAZ)
|
||||
|
||||
@<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)
|
||||
|
||||
@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)
|
||||
|
||||
@<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
|
||||
public? final? [TYPES] fun foofoo(): R|kotlin/Int| {
|
||||
public? final? [RAW_FIR] fun foofoo(): Int {
|
||||
^foofoo barbar#()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user