diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index 8a34d6fedd8..95023707239 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -278,7 +278,7 @@ abstract class AbstractDiagnosticCollectorVisitor( val existingContext = context context = context.addQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall) try { - return whileAnalysing(qualifiedAccessOrAnnotationCall) { + return whileAnalysing(context.session, qualifiedAccessOrAnnotationCall) { block() } } finally { @@ -293,7 +293,7 @@ abstract class AbstractDiagnosticCollectorVisitor( val existingContext = context context = context.addGetClassCall(getClassCall) try { - return whileAnalysing(getClassCall) { + return whileAnalysing(context.session, getClassCall) { block() } } finally { @@ -308,7 +308,7 @@ abstract class AbstractDiagnosticCollectorVisitor( val existingContext = context context = context.addDeclaration(declaration) try { - return whileAnalysing(declaration) { + return whileAnalysing(context.session, declaration) { block() } } finally { diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index cdcbcbbeb62..703b2e46472 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -87,7 +87,7 @@ class FirElementSerializer private constructor( return builder } - fun classProto(klass: FirClass): ProtoBuf.Class.Builder = whileAnalysing(klass) { + fun classProto(klass: FirClass): ProtoBuf.Class.Builder = whileAnalysing(session, klass) { val builder = ProtoBuf.Class.newBuilder() val regularClass = klass as? FirRegularClass @@ -248,7 +248,7 @@ class FirElementSerializer private constructor( useSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER && isSetter } - fun propertyProto(property: FirProperty): ProtoBuf.Property.Builder? = whileAnalysing(property) { + fun propertyProto(property: FirProperty): ProtoBuf.Property.Builder? = whileAnalysing(session, property) { if (!extension.shouldSerializeProperty(property)) return null val builder = ProtoBuf.Property.newBuilder() @@ -356,7 +356,7 @@ class FirElementSerializer private constructor( return builder } - fun functionProto(function: FirFunction): ProtoBuf.Function.Builder? = whileAnalysing(function) { + fun functionProto(function: FirFunction): ProtoBuf.Function.Builder? = whileAnalysing(session, function) { if (!extension.shouldSerializeFunction(function)) return null val builder = ProtoBuf.Function.newBuilder() @@ -450,7 +450,7 @@ class FirElementSerializer private constructor( return builder } - private fun typeAliasProto(typeAlias: FirTypeAlias): ProtoBuf.TypeAlias.Builder? = whileAnalysing(typeAlias) { + private fun typeAliasProto(typeAlias: FirTypeAlias): ProtoBuf.TypeAlias.Builder? = whileAnalysing(session, typeAlias) { if (!extension.shouldSerializeTypeAlias(typeAlias)) return null val builder = ProtoBuf.TypeAlias.newBuilder() @@ -497,14 +497,14 @@ class FirElementSerializer private constructor( return builder } - private fun enumEntryProto(enumEntry: FirEnumEntry): ProtoBuf.EnumEntry.Builder = whileAnalysing(enumEntry) { + private fun enumEntryProto(enumEntry: FirEnumEntry): ProtoBuf.EnumEntry.Builder = whileAnalysing(session, enumEntry) { val builder = ProtoBuf.EnumEntry.newBuilder() builder.name = getSimpleNameIndex(enumEntry.name) extension.serializeEnumEntry(enumEntry, builder) return builder } - private fun constructorProto(constructor: FirConstructor): ProtoBuf.Constructor.Builder = whileAnalysing(constructor) { + private fun constructorProto(constructor: FirConstructor): ProtoBuf.Constructor.Builder = whileAnalysing(session, constructor) { val builder = ProtoBuf.Constructor.newBuilder() val local = createChildSerializer(constructor) @@ -543,7 +543,7 @@ class FirElementSerializer private constructor( private fun valueParameterProto( parameter: FirValueParameter, additionalAnnotations: List = emptyList() - ): ProtoBuf.ValueParameter.Builder = whileAnalysing(parameter) { + ): ProtoBuf.ValueParameter.Builder = whileAnalysing(session, parameter) { val builder = ProtoBuf.ValueParameter.newBuilder() val declaresDefaultValue = parameter.defaultValue != null // TODO: || parameter.isActualParameterWithAnyExpectedDefault @@ -580,7 +580,7 @@ class FirElementSerializer private constructor( return builder } - private fun typeParameterProto(typeParameter: FirTypeParameter): ProtoBuf.TypeParameter.Builder = whileAnalysing(typeParameter) { + private fun typeParameterProto(typeParameter: FirTypeParameter): ProtoBuf.TypeParameter.Builder = whileAnalysing(session, typeParameter) { val builder = ProtoBuf.TypeParameter.newBuilder() builder.id = getTypeParameterId(typeParameter) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index ead41b279a8..5fe46848cae 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -76,7 +76,7 @@ class Fir2IrVisitor( TODO("Should not be here: ${element::class} ${element.render()}") } - override fun visitField(field: FirField, data: Any?): IrField = whileAnalysing(field) { + override fun visitField(field: FirField, data: Any?): IrField = whileAnalysing(session, field) { if (field.isSynthetic) { return declarationStorage.getCachedIrDelegateOrBackingField(field)!!.apply { // If this is a property backing field, then it has no separate initializer, @@ -105,13 +105,13 @@ class Fir2IrVisitor( // ================================================================================== - override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Any?): IrElement = whileAnalysing(typeAlias) { + override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Any?): IrElement = whileAnalysing(session, typeAlias) { val irTypeAlias = classifierStorage.getCachedTypeAlias(typeAlias)!! annotationGenerator.generate(irTypeAlias, typeAlias) return irTypeAlias } - override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Any?): IrElement = whileAnalysing(enumEntry) { + override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Any?): IrElement = whileAnalysing(session, enumEntry) { val irEnumEntry = classifierStorage.getCachedIrEnumEntry(enumEntry)!! annotationGenerator.generate(irEnumEntry, enumEntry) val correspondingClass = irEnumEntry.correspondingClass @@ -168,7 +168,7 @@ class Fir2IrVisitor( return irEnumEntry } - override fun visitRegularClass(regularClass: FirRegularClass, data: Any?): IrElement = whileAnalysing(regularClass) { + override fun visitRegularClass(regularClass: FirRegularClass, data: Any?): IrElement = whileAnalysing(session, regularClass) { if (regularClass.visibility == Visibilities.Local) { val irParent = conversionScope.parentFromStack() // NB: for implicit types it is possible that local class is already cached @@ -217,7 +217,7 @@ class Fir2IrVisitor( return visitAnonymousObject(anonymousObjectExpression.anonymousObject, data) } - override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: Any?): IrElement = whileAnalysing(anonymousObject) { + override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: Any?): IrElement = whileAnalysing(session, anonymousObject) { val irParent = conversionScope.parentFromStack() // NB: for implicit types it is possible that anonymous object is already cached val irAnonymousObject = classifierStorage.getCachedIrClass(anonymousObject)?.apply { this.parent = irParent } @@ -250,7 +250,7 @@ class Fir2IrVisitor( // ================================================================================== - override fun visitConstructor(constructor: FirConstructor, data: Any?): IrElement = whileAnalysing(constructor) { + override fun visitConstructor(constructor: FirConstructor, data: Any?): IrElement = whileAnalysing(session, constructor) { val irConstructor = declarationStorage.getCachedIrConstructor(constructor)!! return conversionScope.withFunction(irConstructor) { memberGenerator.convertFunctionContent(irConstructor, constructor, containingClass = conversionScope.containerFirClass()) @@ -260,7 +260,7 @@ class Fir2IrVisitor( override fun visitAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: Any? - ): IrElement = whileAnalysing(anonymousInitializer) { + ): IrElement = whileAnalysing(session, anonymousInitializer) { val irAnonymousInitializer = declarationStorage.getCachedIrAnonymousInitializer(anonymousInitializer)!! declarationStorage.enterScope(irAnonymousInitializer) irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!) @@ -268,7 +268,7 @@ class Fir2IrVisitor( return irAnonymousInitializer } - override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): IrElement = whileAnalysing(simpleFunction) { + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): IrElement = whileAnalysing(session, simpleFunction) { val irFunction = if (simpleFunction.visibility == Visibilities.Local) { declarationStorage.createIrFunction( simpleFunction, irParent = conversionScope.parent(), predefinedOrigin = IrDeclarationOrigin.LOCAL_FUNCTION, isLocal = true @@ -290,7 +290,7 @@ class Fir2IrVisitor( override fun visitAnonymousFunction( anonymousFunction: FirAnonymousFunction, data: Any? - ): IrElement = whileAnalysing(anonymousFunction) { + ): IrElement = whileAnalysing(session, anonymousFunction) { return anonymousFunction.convertWithOffsets { startOffset, endOffset -> val irFunction = declarationStorage.createIrFunction( anonymousFunction, @@ -312,7 +312,7 @@ class Fir2IrVisitor( } } - private fun visitLocalVariable(variable: FirProperty): IrElement = whileAnalysing(variable) { + private fun visitLocalVariable(variable: FirProperty): IrElement = whileAnalysing(session, variable) { assert(variable.isLocal) val delegate = variable.delegate if (delegate != null) { @@ -362,7 +362,7 @@ class Fir2IrVisitor( this@insertImplicitCast.cast(baseExpression, valueType, expectedType) } - override fun visitProperty(property: FirProperty, data: Any?): IrElement = whileAnalysing(property) { + override fun visitProperty(property: FirProperty, data: Any?): IrElement = whileAnalysing(session, property) { if (property.isLocal) return visitLocalVariable(property) val irProperty = declarationStorage.getCachedIrProperty(property) ?: return IrErrorExpressionImpl( @@ -470,14 +470,14 @@ class Fir2IrVisitor( return result } - override fun visitFunctionCall(functionCall: FirFunctionCall, data: Any?): IrExpression = whileAnalysing(functionCall) { + override fun visitFunctionCall(functionCall: FirFunctionCall, data: Any?): IrExpression = whileAnalysing(session, functionCall) { return convertToIrCall(functionCall = functionCall, annotationMode = false) } override fun visitSafeCallExpression( safeCallExpression: FirSafeCallExpression, data: Any? - ): IrElement = whileAnalysing(safeCallExpression) { + ): IrElement = whileAnalysing(session, safeCallExpression) { val explicitReceiverExpression = convertToIrExpression(safeCallExpression.receiver) val (receiverVariable, variableSymbol) = components.createTemporaryVariableForSafeCallConstruction( @@ -504,7 +504,7 @@ class Fir2IrVisitor( return callGenerator.convertToIrConstructorCall(annotation) } - override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement = whileAnalysing(annotationCall) { + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement = whileAnalysing(session, annotationCall) { return callGenerator.convertToIrConstructorCall(annotationCall) } @@ -519,7 +519,7 @@ class Fir2IrVisitor( private fun convertQualifiedAccessExpression( qualifiedAccessExpression: FirQualifiedAccessExpression, annotationMode: Boolean = false - ): IrExpression = whileAnalysing(qualifiedAccessExpression) { + ): IrExpression = whileAnalysing(session, qualifiedAccessExpression) { val explicitReceiverExpression = convertToIrReceiverExpression( qualifiedAccessExpression.explicitReceiver, qualifiedAccessExpression.calleeReference ) @@ -542,7 +542,7 @@ class Fir2IrVisitor( override fun visitThisReceiverExpression( thisReceiverExpression: FirThisReceiverExpression, data: Any? - ): IrElement = whileAnalysing(thisReceiverExpression) { + ): IrElement = whileAnalysing(session, thisReceiverExpression) { val calleeReference = thisReceiverExpression.calleeReference val boundSymbol = calleeReference.boundSymbol if (boundSymbol is FirClassSymbol) { @@ -625,7 +625,7 @@ class Fir2IrVisitor( } override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Any?): IrElement { - return whileAnalysing(callableReferenceAccess) { + return whileAnalysing(session, callableReferenceAccess) { convertCallableReferenceAccess(callableReferenceAccess, false) } } @@ -644,7 +644,7 @@ class Fir2IrVisitor( override fun visitVariableAssignment( variableAssignment: FirVariableAssignment, data: Any? - ): IrElement = whileAnalysing(variableAssignment) { + ): IrElement = whileAnalysing(session, variableAssignment) { val explicitReceiverExpression = convertToIrReceiverExpression( variableAssignment.explicitReceiver, variableAssignment.calleeReference ) @@ -1234,7 +1234,7 @@ class Fir2IrVisitor( override fun visitStringConcatenationCall( stringConcatenationCall: FirStringConcatenationCall, data: Any? - ): IrElement = whileAnalysing(stringConcatenationCall) { + ): IrElement = whileAnalysing(session, stringConcatenationCall) { return stringConcatenationCall.convertWithOffsets { startOffset, endOffset -> val arguments = mutableListOf() val sb = StringBuilder() @@ -1282,12 +1282,12 @@ class Fir2IrVisitor( } override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: Any?): IrElement { - return whileAnalysing(equalityOperatorCall) { + return whileAnalysing(session, equalityOperatorCall) { operatorGenerator.convertEqualityOperatorCall(equalityOperatorCall) } } - override fun visitCheckNotNullCall(checkNotNullCall: FirCheckNotNullCall, data: Any?): IrElement = whileAnalysing(checkNotNullCall) { + override fun visitCheckNotNullCall(checkNotNullCall: FirCheckNotNullCall, data: Any?): IrElement = whileAnalysing(session, checkNotNullCall) { return checkNotNullCall.convertWithOffsets { startOffset, endOffset -> IrCallImpl( startOffset, endOffset, @@ -1303,7 +1303,7 @@ class Fir2IrVisitor( } } - override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Any?): IrElement = whileAnalysing(getClassCall) { + override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Any?): IrElement = whileAnalysing(session, getClassCall) { val argument = getClassCall.argument val irType = getClassCall.typeRef.toIrType() val irClassType = @@ -1368,14 +1368,14 @@ class Fir2IrVisitor( } } - override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Any?): IrElement = whileAnalysing(arrayOfCall) { + override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Any?): IrElement = whileAnalysing(session, arrayOfCall) { return convertToArrayOfCall(arrayOfCall, annotationMode = false) } override fun visitAugmentedArraySetCall( augmentedArraySetCall: FirAugmentedArraySetCall, data: Any? - ): IrElement = whileAnalysing(augmentedArraySetCall) { + ): IrElement = whileAnalysing(session, augmentedArraySetCall) { return augmentedArraySetCall.convertWithOffsets { startOffset, endOffset -> IrErrorCallExpressionImpl( startOffset, endOffset, irBuiltIns.unitType, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 0b6f310f8cd..830696f0ec8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -143,7 +143,7 @@ open class FirDesignatedStatusResolveTransformer( override fun transformClassContent( firClass: FirClass, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(firClass) { + ): FirStatement = whileAnalysing(session, firClass) { if (designation.shouldSkipClass(firClass)) return firClass firClass.symbol.lazyResolveToPhase(FirResolvePhase.TYPES) val classLocated = designation.classLocated @@ -238,7 +238,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformDeclaration( declaration: FirDeclaration, data: FirResolvedDeclarationStatus? - ): FirDeclaration = whileAnalysing(declaration) { + ): FirDeclaration = whileAnalysing(session, declaration) { return when (declaration) { is FirCallableDeclaration -> { if (declaration is FirFunction) { @@ -257,7 +257,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformTypeAlias( typeAlias: FirTypeAlias, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(typeAlias) { + ): FirStatement = whileAnalysing(session, typeAlias) { typeAlias.typeParameters.forEach { transformDeclaration(it, data) } typeAlias.transformStatus(this, statusResolver.resolveStatus(typeAlias, containingClass, isLocal = false)) return transformDeclaration(typeAlias, data) as FirTypeAlias @@ -266,7 +266,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformRegularClass( regularClass: FirRegularClass, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(regularClass) { + ): FirStatement = whileAnalysing(session, regularClass) { transformClassContent(regularClass, data) } @@ -278,7 +278,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformAnonymousObject( anonymousObject: FirAnonymousObject, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(anonymousObject) { + ): FirStatement = whileAnalysing(session, anonymousObject) { transformClassContent(anonymousObject, data) } @@ -314,7 +314,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformClass( klass: FirClass, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(klass) { + ): FirStatement = whileAnalysing(session, klass) { return storeClass(klass) { klass.typeParameters.forEach { it.transformSingle(this, data) } transformDeclarationContent(klass, data) @@ -379,7 +379,7 @@ abstract class AbstractFirStatusResolveTransformer( propertyAccessor: FirPropertyAccessor, containingProperty: FirProperty, overriddenStatuses: List = emptyList(), - ): Unit = whileAnalysing(propertyAccessor) { + ): Unit = whileAnalysing(session, propertyAccessor) { propertyAccessor.transformStatus( this, statusResolver.resolveStatus( @@ -397,7 +397,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformConstructor( constructor: FirConstructor, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(constructor) { + ): FirStatement = whileAnalysing(session, constructor) { constructor.transformStatus(this, statusResolver.resolveStatus(constructor, containingClass, isLocal = false)) calculateDeprecations(constructor) return transformDeclaration(constructor, data) as FirStatement @@ -406,7 +406,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(simpleFunction) { + ): FirStatement = whileAnalysing(session, simpleFunction) { val resolvedStatus = statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false) simpleFunction.transformStatus(this, resolvedStatus) calculateDeprecations(simpleFunction) @@ -416,7 +416,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformProperty( property: FirProperty, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(property) { + ): FirStatement = whileAnalysing(session, property) { val overridden = statusResolver.getOverriddenProperties(property, containingClass) val overriddenProperties = overridden.map { it.status as FirResolvedDeclarationStatus } @@ -448,7 +448,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformField( field: FirField, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(field) { + ): FirStatement = whileAnalysing(session, field) { field.transformStatus(this, statusResolver.resolveStatus(field, containingClass, isLocal = false)) calculateDeprecations(field) return transformDeclaration(field, data) as FirField @@ -461,7 +461,7 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformEnumEntry( enumEntry: FirEnumEntry, data: FirResolvedDeclarationStatus? - ): FirStatement = whileAnalysing(enumEntry) { + ): FirStatement = whileAnalysing(session, enumEntry) { enumEntry.transformStatus(this, statusResolver.resolveStatus(enumEntry, containingClass, isLocal = false)) calculateDeprecations(enumEntry) return transformDeclaration(enumEntry, data) as FirEnumEntry diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index 90600c44214..c3e58231275 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -78,7 +78,7 @@ open class FirTypeResolveTransformer( } override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): FirStatement { - whileAnalysing(regularClass) { + whileAnalysing(session, regularClass) { withClassDeclarationCleanup(classDeclarationsStack, regularClass) { withScopeCleanup { regularClass.addTypeParametersScope() @@ -99,21 +99,21 @@ open class FirTypeResolveTransformer( } } - override fun transformConstructor(constructor: FirConstructor, data: Any?): FirConstructor = whileAnalysing(constructor) { + override fun transformConstructor(constructor: FirConstructor, data: Any?): FirConstructor = whileAnalysing(session, constructor) { return withScopeCleanup { constructor.addTypeParametersScope() transformDeclaration(constructor, data) } as FirConstructor } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirTypeAlias = whileAnalysing(typeAlias) { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirTypeAlias = whileAnalysing(session, typeAlias) { return withScopeCleanup { typeAlias.addTypeParametersScope() transformDeclaration(typeAlias, data) } as FirTypeAlias } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Any?): FirEnumEntry = whileAnalysing(enumEntry) { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Any?): FirEnumEntry = whileAnalysing(session, enumEntry) { enumEntry.transformReturnTypeRef(this, data) enumEntry.transformTypeParameters(this, data) enumEntry.transformAnnotations(this, data) @@ -124,7 +124,7 @@ open class FirTypeResolveTransformer( return receiverParameter.transformAnnotations(this, data).transformTypeRef(this, data) } - override fun transformProperty(property: FirProperty, data: Any?): FirProperty = whileAnalysing(property) { + override fun transformProperty(property: FirProperty, data: Any?): FirProperty = whileAnalysing(session, property) { return withScopeCleanup { property.addTypeParametersScope() property.transformTypeParameters(this, data) @@ -156,7 +156,7 @@ open class FirTypeResolveTransformer( property.setter?.valueParameters?.map { it.replaceReturnTypeRef(property.returnTypeRef) } } - override fun transformField(field: FirField, data: Any?): FirField = whileAnalysing(field) { + override fun transformField(field: FirField, data: Any?): FirField = whileAnalysing(session, field) { return withScopeCleanup { field.transformReturnTypeRef(this, data).transformAnnotations(this, data) field @@ -166,7 +166,7 @@ open class FirTypeResolveTransformer( override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: Any? - ): FirSimpleFunction = whileAnalysing(simpleFunction) { + ): FirSimpleFunction = whileAnalysing(session, simpleFunction) { return withScopeCleanup { simpleFunction.addTypeParametersScope() transformDeclaration(simpleFunction, data).also { @@ -217,7 +217,7 @@ open class FirTypeResolveTransformer( } } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): FirStatement = whileAnalysing(valueParameter) { + override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): FirStatement = whileAnalysing(session, valueParameter) { valueParameter.transformReturnTypeRef(this, data) valueParameter.transformAnnotations(this, data) valueParameter.transformVarargTypeToArrayType() @@ -232,7 +232,7 @@ open class FirTypeResolveTransformer( shouldNotBeCalled() } - override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): FirStatement = whileAnalysing(annotationCall) { + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): FirStatement = whileAnalysing(session, annotationCall) { when (val originalTypeRef = annotationCall.annotationTypeRef) { is FirResolvedTypeRef -> { when (annotationCall.annotationResolvePhase) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 6ba600c15d6..fe1b19daf23 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -38,7 +38,10 @@ import org.jetbrains.kotlin.fir.resolve.inference.ResolvedLambdaAtom import org.jetbrains.kotlin.fir.resolve.inference.extractLambdaInfoFromFunctionalType import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.createTypeSubstitutorByTypeConstructor -import org.jetbrains.kotlin.fir.resolve.transformers.* +import org.jetbrains.kotlin.fir.resolve.transformers.FirCallCompletionResultsWriterTransformer +import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolver +import org.jetbrains.kotlin.fir.resolve.transformers.toExpectedType +import org.jetbrains.kotlin.fir.resolve.transformers.transformVarargTypeToArrayType import org.jetbrains.kotlin.fir.scopes.impl.FirMemberTypeParameterScope import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol @@ -111,7 +114,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve } } - override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty = whileAnalysing(property) { + override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty = whileAnalysing(session, property) { require(property !is FirSyntheticProperty) { "Synthetic properties should not be processed by body transformers" } if (property.isLocal) { @@ -207,7 +210,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve } } - override fun transformField(field: FirField, data: ResolutionMode): FirField = whileAnalysing(field) { + override fun transformField(field: FirField, data: ResolutionMode): FirField = whileAnalysing(session, field) { val returnTypeRef = field.returnTypeRef if (implicitTypeOnly) return field if (field.initializerResolved) return field @@ -374,7 +377,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve return delegateExpression } - private fun transformLocalVariable(variable: FirProperty): FirProperty = whileAnalysing(variable) { + private fun transformLocalVariable(variable: FirProperty): FirProperty = whileAnalysing(session, variable) { assert(variable.isLocal) val delegate = variable.delegate @@ -456,7 +459,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve accessor: FirPropertyAccessor, enhancedTypeRef: FirTypeRef, owner: FirProperty - ): Unit = whileAnalysing(accessor) { + ): Unit = whileAnalysing(session, accessor) { context.withPropertyAccessor(owner, accessor, components) { if (accessor is FirDefaultPropertyAccessor || accessor.body == null) { transformFunction(accessor, withExpectedType(enhancedTypeRef)) @@ -491,7 +494,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve ) } - override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement = whileAnalysing(regularClass) { + override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement = whileAnalysing(session, regularClass) { return context.withContainingClass(regularClass) { if (regularClass.isLocal && regularClass !in context.targetedLocalClasses) { return regularClass.runAllPhasesForLocalClass( @@ -520,7 +523,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve return result } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias = whileAnalysing(typeAlias) { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias = whileAnalysing(session, typeAlias) { if (typeAlias.isLocal && typeAlias !in context.targetedLocalClasses) { return typeAlias.runAllPhasesForLocalClass( transformer, @@ -560,7 +563,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformAnonymousObject( anonymousObject: FirAnonymousObject, data: ResolutionMode - ): FirStatement = whileAnalysing(anonymousObject) { + ): FirStatement = whileAnalysing(session, anonymousObject) { if (anonymousObject !in context.targetedLocalClasses) { return anonymousObject.runAllPhasesForLocalClass( transformer, @@ -618,7 +621,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: ResolutionMode - ): FirSimpleFunction = whileAnalysing(simpleFunction) { + ): FirSimpleFunction = whileAnalysing(session, simpleFunction) { if (simpleFunction.bodyResolved) { return simpleFunction } @@ -682,7 +685,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformFunction( function: FirFunction, data: ResolutionMode - ): FirStatement = whileAnalysing(function) { + ): FirStatement = whileAnalysing(session, function) { val functionIsNotAnalyzed = !function.bodyResolved if (functionIsNotAnalyzed) { dataFlowAnalyzer.enterFunction(function) @@ -697,7 +700,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve } as FirStatement } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor = whileAnalysing(constructor) { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor = whileAnalysing(session, constructor) { if (implicitTypeOnly) return constructor val container = context.containerIfAny as? FirRegularClass if (constructor.isPrimary && container?.classKind == ClassKind.ANNOTATION_CLASS) { @@ -738,7 +741,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode - ): FirAnonymousInitializer = whileAnalysing(anonymousInitializer) { + ): FirAnonymousInitializer = whileAnalysing(session, anonymousInitializer) { if (implicitTypeOnly) return anonymousInitializer dataFlowAnalyzer.enterInitBlock(anonymousInitializer) return context.withAnonymousInitializer(anonymousInitializer, session) { @@ -753,7 +756,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformValueParameter( valueParameter: FirValueParameter, data: ResolutionMode - ): FirStatement = whileAnalysing(valueParameter) { + ): FirStatement = whileAnalysing(session, valueParameter) { dataFlowAnalyzer.enterValueParameter(valueParameter) val result = context.withValueParameter(valueParameter, session) { transformDeclarationContent( @@ -772,7 +775,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformAnonymousFunction( anonymousFunction: FirAnonymousFunction, data: ResolutionMode - ): FirStatement = whileAnalysing(anonymousFunction) { + ): FirStatement = whileAnalysing(session, anonymousFunction) { // Either ContextDependent, ContextIndependent or WithExpectedType could be here if (data !is ResolutionMode.LambdaResolution) { anonymousFunction.transformReturnTypeRef(transformer, ResolutionMode.ContextIndependent) @@ -1023,7 +1026,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve override fun transformBackingField( backingField: FirBackingField, data: ResolutionMode, - ): FirStatement = whileAnalysing(backingField) { + ): FirStatement = whileAnalysing(session, backingField) { val propertyType = data.expectedType val initializerData = if (backingField.returnTypeRef is FirResolvedTypeRef) { withExpectedType(backingField.returnTypeRef) @@ -1127,7 +1130,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve return element } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): FirStatement = whileAnalysing(valueParameter) { + override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): FirStatement = whileAnalysing(valueParameter.moduleData.session, valueParameter) { if (valueParameter.returnTypeRef is FirImplicitTypeRef) { valueParameter.replaceReturnTypeRef( valueParameter.returnTypeRef.resolvedTypeFromPrototype( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 80911be900c..6ae5e1797f4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -84,7 +84,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformQualifiedAccessExpression( qualifiedAccessExpression: FirQualifiedAccessExpression, data: ResolutionMode, - ): FirStatement = whileAnalysing(qualifiedAccessExpression) { + ): FirStatement = whileAnalysing(session, qualifiedAccessExpression) { transformQualifiedAccessExpression(qualifiedAccessExpression, data, isUsedAsReceiver = false) } @@ -338,7 +338,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT safeCallExpression: FirSafeCallExpression, data: ResolutionMode ): FirStatement { - whileAnalysing(safeCallExpression) { + whileAnalysing(session, safeCallExpression) { withContainingSafeCallExpression(safeCallExpression) { safeCallExpression.transformAnnotations(this, ResolutionMode.ContextIndependent) safeCallExpression.transformReceiver(this, ResolutionMode.ContextIndependent) @@ -377,7 +377,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT return checkedSafeCallSubject } - override fun transformFunctionCall(functionCall: FirFunctionCall, data: ResolutionMode): FirStatement = whileAnalysing(functionCall) { + override fun transformFunctionCall(functionCall: FirFunctionCall, data: ResolutionMode): FirStatement = whileAnalysing(session, functionCall) { val calleeReference = functionCall.calleeReference if ( (calleeReference is FirResolvedNamedReference || calleeReference is FirErrorNamedReference) && @@ -542,7 +542,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformComparisonExpression( comparisonExpression: FirComparisonExpression, data: ResolutionMode - ): FirStatement = whileAnalysing(comparisonExpression) { + ): FirStatement = whileAnalysing(session, comparisonExpression) { return (comparisonExpression.transformChildren(transformer, ResolutionMode.ContextIndependent) as FirComparisonExpression).also { it.resultType = comparisonExpression.typeRef.resolvedTypeFromPrototype(builtinTypes.booleanType.type) dataFlowAnalyzer.exitComparisonExpressionCall(it) @@ -552,7 +552,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformAssignmentOperatorStatement( assignmentOperatorStatement: FirAssignmentOperatorStatement, data: ResolutionMode - ): FirStatement = whileAnalysing(assignmentOperatorStatement) { + ): FirStatement = whileAnalysing(session, assignmentOperatorStatement) { val operation = assignmentOperatorStatement.operation require(operation != FirOperation.ASSIGN) @@ -679,7 +679,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformEqualityOperatorCall( equalityOperatorCall: FirEqualityOperatorCall, data: ResolutionMode - ): FirStatement = whileAnalysing(equalityOperatorCall) { + ): FirStatement = whileAnalysing(session, equalityOperatorCall) { // Currently, we use expectedType=Any? for both operands // In FE1.0, it's only used for the right // But it seems a bit inconsistent (see KT-47409) @@ -852,7 +852,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformBinaryLogicExpression( binaryLogicExpression: FirBinaryLogicExpression, data: ResolutionMode, - ): FirStatement = whileAnalysing(binaryLogicExpression) { + ): FirStatement = whileAnalysing(session, binaryLogicExpression) { val booleanType = binaryLogicExpression.typeRef.resolvedTypeFromPrototype(builtinTypes.booleanType.type) return binaryLogicExpression.also(dataFlowAnalyzer::enterBinaryLogicExpression) .transformLeftOperand(this, ResolutionMode.WithExpectedType(booleanType)) @@ -866,7 +866,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformVariableAssignment( variableAssignment: FirVariableAssignment, data: ResolutionMode, - ): FirStatement = whileAnalysing(variableAssignment) { + ): FirStatement = whileAnalysing(session, variableAssignment) { // val resolvedAssignment = transformCallee(variableAssignment) variableAssignment.transformAnnotations(transformer, ResolutionMode.ContextIndependent) val resolvedAssignment = callResolver.resolveVariableAccessAndSelectCandidate(variableAssignment, isUsedAsReceiver = false) @@ -912,7 +912,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformCallableReferenceAccess( callableReferenceAccess: FirCallableReferenceAccess, data: ResolutionMode, - ): FirStatement = whileAnalysing(callableReferenceAccess) { + ): FirStatement = whileAnalysing(session, callableReferenceAccess) { if (callableReferenceAccess.calleeReference is FirResolvedNamedReference) { return callableReferenceAccess } @@ -953,7 +953,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformGetClassCall( getClassCall: FirGetClassCall, data: ResolutionMode - ): FirStatement = whileAnalysing(getClassCall) { + ): FirStatement = whileAnalysing(session, getClassCall) { getClassCall.transformAnnotations(transformer, ResolutionMode.ContextIndependent) val arg = getClassCall.argument val dataForLhs = if (arg is FirConstExpression<*>) { @@ -1096,7 +1096,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformAnnotationCall( annotationCall: FirAnnotationCall, data: ResolutionMode - ): FirStatement = whileAnalysing(annotationCall) { + ): FirStatement = whileAnalysing(session, annotationCall) { if (annotationCall.resolved) return annotationCall annotationCall.transformAnnotationTypeRef(transformer, ResolutionMode.ContextIndependent) annotationCall.replaceAnnotationResolvePhase(FirAnnotationResolvePhase.Types) @@ -1129,7 +1129,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformDelegatedConstructorCall( delegatedConstructorCall: FirDelegatedConstructorCall, data: ResolutionMode, - ): FirStatement = whileAnalysing(delegatedConstructorCall) { + ): FirStatement = whileAnalysing(session, delegatedConstructorCall) { if (transformer.implicitTypeOnly) return delegatedConstructorCall when (delegatedConstructorCall.calleeReference) { is FirResolvedNamedReference, is FirErrorNamedReference -> return delegatedConstructorCall @@ -1239,7 +1239,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformAugmentedArraySetCall( augmentedArraySetCall: FirAugmentedArraySetCall, data: ResolutionMode - ): FirStatement = whileAnalysing(augmentedArraySetCall) { + ): FirStatement = whileAnalysing(session, augmentedArraySetCall) { /* * a[b] += c can be desugared to: * @@ -1470,7 +1470,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT ) } - override fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: ResolutionMode): FirStatement = whileAnalysing(arrayOfCall) { + override fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: ResolutionMode): FirStatement = whileAnalysing(session, arrayOfCall) { if (data is ResolutionMode.ContextDependent) { arrayOfCall.transformChildren(transformer, data) return arrayOfCall @@ -1484,7 +1484,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT override fun transformStringConcatenationCall( stringConcatenationCall: FirStringConcatenationCall, data: ResolutionMode - ): FirStatement = whileAnalysing(stringConcatenationCall) { + ): FirStatement = whileAnalysing(session, stringConcatenationCall) { dataFlowAnalyzer.enterStringConcatenationCall() stringConcatenationCall.transformChildren(transformer, ResolutionMode.ContextIndependent) dataFlowAnalyzer.exitStringConcatenationCall(stringConcatenationCall) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt index 9a51416d962..f3cb36625cd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt @@ -6,10 +6,16 @@ package org.jetbrains.kotlin.fir import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.* +import org.jetbrains.kotlin.KtFakeSourceElementKind +import org.jetbrains.kotlin.KtPsiSourceElement +import org.jetbrains.kotlin.KtRealPsiSourceElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fakeElement +import org.jetbrains.kotlin.fir.declarations.FirContextReceiver +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.expressions.FirBlock @@ -20,8 +26,6 @@ import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import java.util.* -import kotlin.collections.ArrayList // TODO: rewrite fun FirBlock.returnExpressions(): List = listOfNotNull(statements.lastOrNull() as? FirExpression) @@ -133,7 +137,8 @@ fun FirDeclarationStatus.copy( } } -inline fun whileAnalysing(element: FirElement, block: () -> R) = org.jetbrains.kotlin.util.whileAnalysing(element.source, block) +inline fun whileAnalysing(@Suppress("UNUSED_PARAMETER") session: FirSession, element: FirElement, block: () -> R) = + org.jetbrains.kotlin.util.whileAnalysing(element.source, block) inline fun withFileAnalysisExceptionWrapping(file: FirFile, block: () -> R): R { return org.jetbrains.kotlin.util.withFileAnalysisExceptionWrapping(