[FIR] drop ARGUMENTS_OF_ANNOTATIONS phase
^KT-62679 Fixed
This commit is contained in:
committed by
Space Team
parent
31128deaff
commit
a86bae2c32
@@ -247,16 +247,6 @@ class FirCallResolver(
|
||||
|
||||
@Suppress("NAME_SHADOWING")
|
||||
val qualifiedAccess = qualifiedAccess.let(transformer::transformExplicitReceiver)
|
||||
|
||||
// In red code, annotations can call arbitrary non-const declarations.
|
||||
// During annotation arguments phase, we exit out if the receiver has unresolved type so that we don't throw exceptions.
|
||||
// During body resolve, we will report something like ANNOTATION_ARGUMENT_MUST_BE_CONST.
|
||||
if (transformer.baseTransformerPhase == FirResolvePhase.ARGUMENTS_OF_ANNOTATIONS &&
|
||||
qualifiedAccess.explicitReceiver?.isResolved == false
|
||||
) {
|
||||
return qualifiedAccess
|
||||
}
|
||||
|
||||
val nonFatalDiagnosticFromExpression = (qualifiedAccess as? FirPropertyAccessExpression)?.nonFatalDiagnostics
|
||||
|
||||
val basicResult by lazy(LazyThreadSafetyMode.NONE) {
|
||||
|
||||
-1
@@ -82,7 +82,6 @@ fun FirResolvePhase.createCompilerProcessorByPhase(
|
||||
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsProcessor(session, scopeSession)
|
||||
TYPES -> FirTypeResolveProcessor(session, scopeSession)
|
||||
STATUS -> FirStatusResolveProcessor(session, scopeSession)
|
||||
ARGUMENTS_OF_ANNOTATIONS -> FirAnnotationArgumentsResolveProcessor(session, scopeSession)
|
||||
CONTRACTS -> FirContractResolveProcessor(session, scopeSession)
|
||||
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveProcessor(session, scopeSession)
|
||||
ANNOTATIONS_ARGUMENTS_MAPPING -> FirAnnotationArgumentsMappingProcessor(session, scopeSession)
|
||||
|
||||
-40
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.transformers.plugin
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
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.AdapterForResolveProcessor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.withFileAnalysisExceptionWrapping
|
||||
|
||||
@OptIn(AdapterForResolveProcessor::class)
|
||||
class FirAnnotationArgumentsResolveProcessor(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession
|
||||
) : FirTransformerBasedResolveProcessor(session, scopeSession, FirResolvePhase.ARGUMENTS_OF_ANNOTATIONS) {
|
||||
override val transformer: FirTransformer<Any?> = FirAnnotationArgumentsResolveTransformerAdapter(session, scopeSession)
|
||||
}
|
||||
|
||||
@AdapterForResolveProcessor
|
||||
class FirAnnotationArgumentsResolveTransformerAdapter(session: FirSession, scopeSession: ScopeSession) : FirTransformer<Any?>() {
|
||||
private val transformer = FirAnnotationArgumentsResolveTransformer(session, scopeSession, FirResolvePhase.ARGUMENTS_OF_ANNOTATIONS)
|
||||
|
||||
override fun <E : FirElement> transformElement(element: E, data: Any?): E {
|
||||
return element
|
||||
}
|
||||
|
||||
override fun transformFile(file: FirFile, data: Any?): FirFile {
|
||||
return withFileAnalysisExceptionWrapping(file) {
|
||||
file.transform(transformer, ResolutionMode.ContextIndependent)
|
||||
}
|
||||
}
|
||||
}
|
||||
-328
@@ -1,328 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.transformers.plugin
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedBaseSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguouslyResolvedAnnotationArgument
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
|
||||
open class FirAnnotationArgumentsResolveTransformer(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
resolvePhase: FirResolvePhase,
|
||||
outerBodyResolveContext: BodyResolveContext? = null,
|
||||
returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve.Default,
|
||||
firResolveContextCollector: FirResolveContextCollector? = null,
|
||||
) : FirAbstractBodyResolveTransformerDispatcher(
|
||||
session,
|
||||
resolvePhase,
|
||||
implicitTypeOnly = false,
|
||||
scopeSession,
|
||||
outerBodyResolveContext = outerBodyResolveContext,
|
||||
returnTypeCalculator = returnTypeCalculator,
|
||||
firResolveContextCollector = firResolveContextCollector,
|
||||
) {
|
||||
final override val expressionsTransformer: FirExpressionsResolveTransformer =
|
||||
FirExpressionsResolveTransformerForSpecificAnnotations(this)
|
||||
|
||||
final override val declarationsTransformer: FirDeclarationsResolveTransformer =
|
||||
FirDeclarationsResolveTransformerForArgumentAnnotations(this)
|
||||
}
|
||||
|
||||
private class FirDeclarationsResolveTransformerForArgumentAnnotations(
|
||||
transformer: FirAbstractBodyResolveTransformerDispatcher
|
||||
) : FirDeclarationsResolveTransformer(transformer) {
|
||||
override fun withFile(file: FirFile, action: () -> FirFile): FirFile {
|
||||
return context.withFile(file, components) {
|
||||
action()
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirRegularClass {
|
||||
regularClass.transformAnnotations(this, data)
|
||||
.transformTypeParameters(transformer, data)
|
||||
.transformSuperTypeRefs(transformer, data)
|
||||
|
||||
withRegularClass(regularClass) {
|
||||
regularClass.transformDeclarations(transformer, data)
|
||||
}
|
||||
|
||||
return regularClass
|
||||
}
|
||||
|
||||
override fun withRegularClass(regularClass: FirRegularClass, action: () -> FirRegularClass): FirRegularClass {
|
||||
return context.withContainingClass(regularClass) {
|
||||
context.withRegularClass(regularClass, components) {
|
||||
action()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformAnonymousInitializer(
|
||||
anonymousInitializer: FirAnonymousInitializer,
|
||||
data: ResolutionMode
|
||||
): FirAnonymousInitializer {
|
||||
return anonymousInitializer
|
||||
}
|
||||
|
||||
override fun transformSimpleFunction(
|
||||
simpleFunction: FirSimpleFunction,
|
||||
data: ResolutionMode
|
||||
): FirSimpleFunction {
|
||||
simpleFunction
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformReceiverParameter(transformer, data)
|
||||
.transformValueParameters(transformer, data)
|
||||
.transformAnnotations(transformer, data)
|
||||
.transformTypeParameters(transformer, data)
|
||||
return simpleFunction
|
||||
}
|
||||
|
||||
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
|
||||
constructor
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformReceiverParameter(transformer, data)
|
||||
.transformValueParameters(transformer, data)
|
||||
.transformAnnotations(transformer, data)
|
||||
return constructor
|
||||
}
|
||||
|
||||
override fun transformErrorPrimaryConstructor(
|
||||
errorPrimaryConstructor: FirErrorPrimaryConstructor,
|
||||
data: ResolutionMode,
|
||||
): FirErrorPrimaryConstructor = transformConstructor(errorPrimaryConstructor, data) as FirErrorPrimaryConstructor
|
||||
|
||||
override fun transformValueParameter(valueParameter: FirValueParameter, data: ResolutionMode): FirValueParameter {
|
||||
valueParameter
|
||||
.transformAnnotations(transformer, data)
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
return valueParameter
|
||||
}
|
||||
|
||||
override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty {
|
||||
property
|
||||
.transformAnnotations(transformer, data)
|
||||
.transformReceiverParameter(transformer, data)
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformGetter(transformer, data)
|
||||
.transformSetter(transformer, data)
|
||||
.transformTypeParameters(transformer, data)
|
||||
.transformBackingField(transformer, data)
|
||||
|
||||
return property
|
||||
}
|
||||
|
||||
override fun transformBackingField(backingField: FirBackingField, data: ResolutionMode): FirBackingField {
|
||||
backingField.transformAnnotations(transformer, data)
|
||||
return backingField
|
||||
}
|
||||
|
||||
override fun transformPropertyAccessor(
|
||||
propertyAccessor: FirPropertyAccessor,
|
||||
data: ResolutionMode
|
||||
): FirPropertyAccessor {
|
||||
propertyAccessor
|
||||
.transformValueParameters(transformer, data)
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformReceiverParameter(transformer, data)
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformAnnotations(transformer, data)
|
||||
return propertyAccessor
|
||||
}
|
||||
|
||||
override fun transformDeclarationStatus(declarationStatus: FirDeclarationStatus, data: ResolutionMode): FirDeclarationStatus {
|
||||
return declarationStatus
|
||||
}
|
||||
|
||||
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry {
|
||||
context.forEnumEntry {
|
||||
enumEntry
|
||||
.transformAnnotations(transformer, data)
|
||||
.transformReceiverParameter(transformer, data)
|
||||
.transformReturnTypeRef(transformer, data)
|
||||
.transformTypeParameters(transformer, data)
|
||||
}
|
||||
return enumEntry
|
||||
}
|
||||
|
||||
override fun transformReceiverParameter(receiverParameter: FirReceiverParameter, data: ResolutionMode): FirReceiverParameter {
|
||||
return receiverParameter.transformAnnotations(transformer, data).transformTypeRef(transformer, data)
|
||||
}
|
||||
|
||||
override fun transformField(field: FirField, data: ResolutionMode): FirField {
|
||||
return field.transformAnnotations(transformer, data)
|
||||
}
|
||||
|
||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias {
|
||||
typeAlias.transformAnnotations(transformer, data)
|
||||
typeAlias.expandedTypeRef.transformSingle(transformer, data)
|
||||
return typeAlias
|
||||
}
|
||||
|
||||
override fun transformScript(script: FirScript, data: ResolutionMode): FirScript {
|
||||
return script
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AbstractFirExpressionsResolveTransformerForAnnotations(transformer: FirAbstractBodyResolveTransformerDispatcher) :
|
||||
FirExpressionsResolveTransformer(transformer) {
|
||||
|
||||
override fun transformAnnotation(annotation: FirAnnotation, data: ResolutionMode): FirStatement {
|
||||
dataFlowAnalyzer.enterAnnotation()
|
||||
annotation.transformChildren(transformer, ResolutionMode.ContextDependent)
|
||||
dataFlowAnalyzer.exitAnnotation()
|
||||
return annotation
|
||||
}
|
||||
|
||||
override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement {
|
||||
return transformAnnotation(annotationCall, data)
|
||||
}
|
||||
|
||||
override fun transformErrorAnnotationCall(errorAnnotationCall: FirErrorAnnotationCall, data: ResolutionMode): FirStatement {
|
||||
return transformAnnotation(errorAnnotationCall, data)
|
||||
}
|
||||
|
||||
override fun transformExpression(expression: FirExpression, data: ResolutionMode): FirStatement {
|
||||
return expression.transformChildren(transformer, data) as FirStatement
|
||||
}
|
||||
|
||||
override fun FirQualifiedAccessExpression.isAcceptableResolvedQualifiedAccess(): Boolean {
|
||||
return calleeReference !is FirErrorNamedReference
|
||||
}
|
||||
|
||||
abstract override fun resolveQualifiedAccessAndSelectCandidate(
|
||||
qualifiedAccessExpression: FirQualifiedAccessExpression,
|
||||
isUsedAsReceiver: Boolean,
|
||||
callSite: FirElement,
|
||||
): FirStatement
|
||||
|
||||
override fun transformFunctionCall(functionCall: FirFunctionCall, data: ResolutionMode): FirStatement {
|
||||
return functionCall
|
||||
}
|
||||
|
||||
override fun transformBlock(block: FirBlock, data: ResolutionMode): FirStatement {
|
||||
return block
|
||||
}
|
||||
|
||||
override fun transformThisReceiverExpression(
|
||||
thisReceiverExpression: FirThisReceiverExpression,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return thisReceiverExpression
|
||||
}
|
||||
|
||||
override fun transformComparisonExpression(
|
||||
comparisonExpression: FirComparisonExpression,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return comparisonExpression
|
||||
}
|
||||
|
||||
override fun transformTypeOperatorCall(
|
||||
typeOperatorCall: FirTypeOperatorCall,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return typeOperatorCall
|
||||
}
|
||||
|
||||
override fun transformCheckNotNullCall(
|
||||
checkNotNullCall: FirCheckNotNullCall,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return checkNotNullCall
|
||||
}
|
||||
|
||||
override fun transformBinaryLogicExpression(
|
||||
binaryLogicExpression: FirBinaryLogicExpression,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return binaryLogicExpression
|
||||
}
|
||||
|
||||
override fun transformVariableAssignment(
|
||||
variableAssignment: FirVariableAssignment,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return variableAssignment
|
||||
}
|
||||
|
||||
override fun transformCallableReferenceAccess(
|
||||
callableReferenceAccess: FirCallableReferenceAccess,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return callableReferenceAccess
|
||||
}
|
||||
|
||||
override fun transformDelegatedConstructorCall(
|
||||
delegatedConstructorCall: FirDelegatedConstructorCall,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return delegatedConstructorCall
|
||||
}
|
||||
|
||||
override fun transformAugmentedArraySetCall(
|
||||
augmentedArraySetCall: FirAugmentedArraySetCall,
|
||||
data: ResolutionMode
|
||||
): FirStatement {
|
||||
return augmentedArraySetCall
|
||||
}
|
||||
|
||||
override fun transformArrayLiteral(arrayLiteral: FirArrayLiteral, data: ResolutionMode): FirStatement {
|
||||
arrayLiteral.transformChildren(transformer, data)
|
||||
return arrayLiteral
|
||||
}
|
||||
|
||||
override fun transformAnonymousObjectExpression(
|
||||
anonymousObjectExpression: FirAnonymousObjectExpression,
|
||||
data: ResolutionMode,
|
||||
): FirStatement {
|
||||
return anonymousObjectExpression
|
||||
}
|
||||
|
||||
override fun transformAnonymousFunctionExpression(
|
||||
anonymousFunctionExpression: FirAnonymousFunctionExpression,
|
||||
data: ResolutionMode,
|
||||
): FirStatement {
|
||||
return anonymousFunctionExpression
|
||||
}
|
||||
|
||||
override fun shouldComputeTypeOfGetClassCallWithNotQualifierInLhs(getClassCall: FirGetClassCall): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private class FirExpressionsResolveTransformerForSpecificAnnotations(transformer: FirAbstractBodyResolveTransformerDispatcher) :
|
||||
AbstractFirExpressionsResolveTransformerForAnnotations(transformer) {
|
||||
|
||||
override fun resolveQualifiedAccessAndSelectCandidate(
|
||||
qualifiedAccessExpression: FirQualifiedAccessExpression,
|
||||
isUsedAsReceiver: Boolean,
|
||||
callSite: FirElement,
|
||||
): FirStatement {
|
||||
return callResolver.resolveOnlyEnumOrQualifierAccessAndSelectCandidate(qualifiedAccessExpression, isUsedAsReceiver)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user