[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, simpleFunction: FirSimpleFunction,
data: ResolutionMode data: ResolutionMode
): CompositeTransformResult<FirSimpleFunction> { ): CompositeTransformResult<FirSimpleFunction> {
simpleFunction.updatePhase()
if (!simpleFunction.hasContractToResolve) { if (!simpleFunction.hasContractToResolve) {
simpleFunction.updatePhase()
return simpleFunction.compose() return simpleFunction.compose()
} }
val containingDeclaration = context.containerIfAny val containingDeclaration = context.containerIfAny
if (containingDeclaration != null && containingDeclaration !is FirClass<*>) { if (containingDeclaration != null && containingDeclaration !is FirClass<*>) {
simpleFunction.updatePhase()
simpleFunction.replaceReturnTypeRef( simpleFunction.replaceReturnTypeRef(
simpleFunction.returnTypeRef.errorTypeFromPrototype( simpleFunction.returnTypeRef.errorTypeFromPrototype(
ConeContractDescriptionError("Local function can not be used in contract description") 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> { override fun transformProperty(property: FirProperty, data: ResolutionMode): CompositeTransformResult<FirProperty> {
property.updatePhase()
if ( if (
property.getter?.hasContractToResolve != true && property.setter?.hasContractToResolve != true || property.getter?.hasContractToResolve != true && property.setter?.hasContractToResolve != true ||
property.isLocal || property.delegate != null property.isLocal || property.delegate != null
) { ) {
property.updatePhase()
return property.compose() return property.compose()
} }
if (property is FirSyntheticProperty) { if (property is FirSyntheticProperty) {
@@ -85,7 +84,6 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess
} }
} }
} }
property.updatePhase()
return property.compose() return property.compose()
} }
@@ -93,8 +91,8 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess
propertyAccessor: FirPropertyAccessor, propertyAccessor: FirPropertyAccessor,
owner: FirProperty owner: FirProperty
): CompositeTransformResult<FirStatement> { ): CompositeTransformResult<FirStatement> {
propertyAccessor.updatePhase()
if (!propertyAccessor.hasContractToResolve) { if (!propertyAccessor.hasContractToResolve) {
propertyAccessor.updatePhase()
return propertyAccessor.compose() return propertyAccessor.compose()
} }
val receiverTypeRef = owner.receiverTypeRef val receiverTypeRef = owner.receiverTypeRef
@@ -154,6 +152,42 @@ class FirContractResolveTransformer(session: FirSession, scopeSession: ScopeSess
return owner.compose() 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> { private fun <T : FirContractDescriptionOwner> transformOwnerOfErrorContract(owner: T): CompositeTransformResult<T> {
// TODO // TODO
dataFlowAnalyzer.exitContractDescription() dataFlowAnalyzer.exitContractDescription()