FIR resolution: introduce FirResolvePhase & FirAbstractPhaseTransformer

The phase determines which transformers were already applied to declaration.
The transformer controls current resolve phase in phasedFir and
performs additional resolve if necessary.
This commit is contained in:
Mikhail Glukhikh
2019-07-26 20:06:38 +03:00
parent a38b4756b5
commit 7529d557fe
41 changed files with 264 additions and 82 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
@@ -39,6 +40,7 @@ class FirJavaClass internal constructor(
status.isCompanion = false
status.isData = false
status.isInline = false
resolvePhase = FirResolvePhase.DECLARATIONS
}
override val superTypeRefs = mutableListOf<FirTypeRef>()
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME
@@ -38,6 +39,7 @@ class FirJavaConstructor(
init {
symbol.bind(this)
resolvePhase = FirResolvePhase.DECLARATIONS
}
override val delegatedConstructor: FirDelegatedConstructorCall?
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirField
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
@@ -34,6 +35,7 @@ class FirJavaField(
), FirField {
init {
symbol.bind(this)
resolvePhase = FirResolvePhase.DECLARATIONS
}
override val delegate: FirExpression?
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
@@ -32,5 +33,6 @@ class FirJavaMethod(
) {
init {
status.isStatic = isStatic
resolvePhase = FirResolvePhase.DECLARATIONS
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.name.Name
@@ -18,4 +19,8 @@ class FirJavaValueParameter(
) : FirValueParameterImpl(
session, psi = null, name = name, returnTypeRef = returnTypeRef,
defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = isVararg
)
) {
init {
resolvePhase = FirResolvePhase.DECLARATIONS
}
}
@@ -175,6 +175,7 @@ class JavaClassEnhancementScope(
this.name, newTypeRef,
defaultValue ?: newDefaultValue, isCrossinline, isNoinline, isVararg
).apply {
resolvePhase = FirResolvePhase.DECLARATIONS
annotations += valueParameter.annotations
}
}
@@ -197,6 +198,7 @@ class JavaClassEnhancementScope(
newReceiverTypeRef, newReturnTypeRef
)
}.apply {
resolvePhase = FirResolvePhase.DECLARATIONS
this.valueParameters += newValueParameters
this.typeParameters += firMethod.typeParameters
}
@@ -207,6 +209,7 @@ class JavaClassEnhancementScope(
else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId),
name, newReceiverTypeRef, newReturnTypeRef
).apply {
resolvePhase = FirResolvePhase.DECLARATIONS
this.valueParameters += newValueParameters
this.typeParameters += firMethod.typeParameters
}