[FIR] Update resolve phase for all declaration in contracts stage
This commit is contained in:
+39
-5
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user