diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt index 09a73cdefe7..4e47a5ca104 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt @@ -38,13 +38,12 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess simpleFunction: FirSimpleFunction, data: ResolutionMode ): CompositeTransformResult { + simpleFunction.updatePhase() if (!simpleFunction.hasContractToResolve) { - simpleFunction.updatePhase() return simpleFunction.compose() } val containingDeclaration = context.containerIfAny if (containingDeclaration != null && containingDeclaration !is FirClass<*>) { - simpleFunction.updatePhase() simpleFunction.replaceReturnTypeRef( simpleFunction.returnTypeRef.errorTypeFromPrototype( ConeContractDescriptionError("Local function can not be used in contract description") @@ -66,11 +65,11 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess } override fun transformProperty(property: FirProperty, data: ResolutionMode): CompositeTransformResult { + property.updatePhase() if ( property.getter?.hasContractToResolve != true && property.setter?.hasContractToResolve != true || property.isLocal || property.delegate != null ) { - property.updatePhase() return property.compose() } if (property is FirSyntheticProperty) { @@ -85,7 +84,6 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess } } } - property.updatePhase() return property.compose() } @@ -93,8 +91,8 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess propertyAccessor: FirPropertyAccessor, owner: FirProperty ): CompositeTransformResult { + propertyAccessor.updatePhase() if (!propertyAccessor.hasContractToResolve) { - propertyAccessor.updatePhase() return propertyAccessor.compose() } val receiverTypeRef = owner.receiverTypeRef @@ -154,6 +152,42 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess return owner.compose() } + override fun transformSealedClass(sealedClass: FirSealedClass, data: ResolutionMode): CompositeTransformResult { + return transformRegularClass(sealedClass, data) + } + + override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): CompositeTransformResult { + regularClass.updatePhase() + context.storeClass(regularClass) + regularClass.transformCompanionObject(this, data) + withTypeParametersOf(regularClass) { + regularClass.transformDeclarations(this, data) + } + return regularClass.compose() + } + + override fun transformAnonymousObject( + anonymousObject: FirAnonymousObject, + data: ResolutionMode + ): CompositeTransformResult { + return anonymousObject.compose() + } + + override fun transformAnonymousInitializer( + anonymousInitializer: FirAnonymousInitializer, + data: ResolutionMode + ): CompositeTransformResult { + return anonymousInitializer.compose() + } + + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): CompositeTransformResult { + return constructor.compose() + } + + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): CompositeTransformResult { + return enumEntry.compose() + } + private fun transformOwnerOfErrorContract(owner: T): CompositeTransformResult { // TODO dataFlowAnalyzer.exitContractDescription()