Extract supertypes resolution into a separate FIR phase
This commit is contained in:
@@ -28,8 +28,9 @@ interface FirElement {
|
||||
fun acceptChildren(visitor: FirVisitorVoid) =
|
||||
acceptChildren(visitor, null)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <E : FirElement, D> transform(visitor: FirTransformer<D>, data: D): CompositeTransformResult<E> =
|
||||
CompositeTransformResult(accept(visitor, data))
|
||||
accept(visitor, data) as CompositeTransformResult<E>
|
||||
|
||||
fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement = this
|
||||
}
|
||||
}
|
||||
|
||||
+11
-1
@@ -5,8 +5,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
|
||||
interface FirClassLikeDeclaration : FirMemberDeclaration {
|
||||
val symbol: ConeClassifierSymbol
|
||||
val symbol: ConeClassLikeSymbol
|
||||
}
|
||||
|
||||
fun ConeClassifierSymbol.toFirClassLike(): FirClassLikeDeclaration? =
|
||||
when (this) {
|
||||
is FirClassSymbol -> this.fir
|
||||
is FirTypeAliasSymbol -> this.fir
|
||||
else -> null
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
// May be all containers should be properties and not base classes
|
||||
@@ -32,4 +33,8 @@ interface FirRegularClass : FirClass, @VisitedSupertype FirClassLikeDeclaration,
|
||||
super<FirClassLikeDeclaration>.acceptChildren(visitor, data)
|
||||
super<FirClass>.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
fun replaceSupertypes(newSupertypes: List<FirTypeRef>): FirRegularClass
|
||||
}
|
||||
|
||||
val FirRegularClass.classId get() = symbol.classId
|
||||
|
||||
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirTypeAlias : FirClassLikeDeclaration, FirSymbolOwner<FirTypeAlias> {
|
||||
fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias
|
||||
|
||||
val expandedTypeRef: FirTypeRef
|
||||
|
||||
override val symbol: FirTypeAliasSymbol
|
||||
|
||||
@@ -10,13 +10,13 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
open class FirClassImpl(
|
||||
session: FirSession,
|
||||
@@ -46,6 +46,11 @@ open class FirClassImpl(
|
||||
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
override fun replaceSupertypes(newSupertypes: List<FirTypeRef>): FirRegularClass {
|
||||
superTypeRefs.clear()
|
||||
superTypeRefs.addAll(newSupertypes)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRegularClass {
|
||||
superTypeRefs.transformInplace(transformer, data)
|
||||
@@ -55,4 +60,4 @@ open class FirClassImpl(
|
||||
declarations.transformInplace(transformer, data)
|
||||
return result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-1
@@ -32,9 +32,14 @@ class FirTypeAliasImpl(
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias {
|
||||
expandedTypeRef = typeRef
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expandedTypeRef = expandedTypeRef.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-3
@@ -7,8 +7,7 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
|
||||
@Suppress("UNSUPPORTED_FEATURE")
|
||||
inline class CompositeTransformResult<out T : Any>(val a: Any) {
|
||||
class CompositeTransformResult<out T : Any>(val a: Any) {
|
||||
|
||||
companion object {
|
||||
fun <T : Any> empty() = CompositeTransformResult<T>(emptyList<T>())
|
||||
@@ -33,4 +32,4 @@ inline class CompositeTransformResult<out T : Any>(val a: Any) {
|
||||
}
|
||||
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun <T : FirElement> T.compose() = CompositeTransformResult.single(this)
|
||||
inline fun <T : FirElement> T.compose() = CompositeTransformResult.single(this)
|
||||
|
||||
Reference in New Issue
Block a user