[FIR] Update resolve phase for all declaration in contracts stage

This commit is contained in:
Dmitriy Novozhilov
2020-04-13 11:57:35 +03:00
parent d718b596bc
commit 67c8030706
@@ -38,13 +38,12 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess
simpleFunction: FirSimpleFunction,
data: ResolutionMode
): CompositeTransformResult<FirSimpleFunction> {
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<FirProperty> {
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<FirStatement> {
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<FirStatement> {
return transformRegularClass(sealedClass, data)
}
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): CompositeTransformResult<FirStatement> {
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<FirStatement> {
return anonymousObject.compose()
}
override fun transformAnonymousInitializer(
anonymousInitializer: FirAnonymousInitializer,
data: ResolutionMode
): CompositeTransformResult<FirDeclaration> {
return anonymousInitializer.compose()
}
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): CompositeTransformResult<FirDeclaration> {
return constructor.compose()
}
override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): CompositeTransformResult<FirDeclaration> {
return enumEntry.compose()
}
private fun <T : FirContractDescriptionOwner> transformOwnerOfErrorContract(owner: T): CompositeTransformResult<T> {
// TODO
dataFlowAnalyzer.exitContractDescription()