[FIR] Record & use type arguments of FirQualifiedAccessExpression

This commit is contained in:
Mikhail Glukhikh
2020-02-25 19:30:40 +03:00
parent f53b059410
commit 50abb07245
26 changed files with 108 additions and 61 deletions
@@ -25,6 +25,8 @@ interface FirQualifiedAccessWithoutCallee : FirStatement {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccessWithoutCallee(this, data)
fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirQualifiedAccessWithoutCallee
fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirQualifiedAccessWithoutCallee
@@ -33,5 +33,7 @@ abstract class FirResolvedQualifier : FirExpression() {
abstract fun replaceSafe(newSafe: Boolean)
abstract fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
abstract fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirResolvedQualifier
}
@@ -109,4 +109,9 @@ internal class FirArraySetCallImpl(
indexes.transformInplace(transformer, data)
return this
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -88,4 +88,9 @@ internal class FirCallableReferenceAccessImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -95,4 +95,9 @@ internal class FirComponentCallImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -97,4 +97,9 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -35,4 +35,6 @@ interface FirModifiableQualifiedAccess : FirQualifiedAccessWithoutCallee {
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirModifiableQualifiedAccess
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
}
@@ -88,4 +88,9 @@ internal class FirQualifiedAccessExpressionImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -59,4 +59,9 @@ internal class FirResolvedQualifierImpl(
override fun replaceSafe(newSafe: Boolean) {
safe = newSafe
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -90,4 +90,9 @@ internal class FirThisReceiverExpressionImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -94,4 +94,9 @@ internal class FirVariableAssignmentImpl(
rValue = rValue.transformSingle(transformer, data)
return this
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
typeArguments.clear()
typeArguments.addAll(newTypeArguments)
}
}
@@ -67,5 +67,9 @@ internal class FirExpressionWithSmartcastImpl(
throw IllegalStateException()
}
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
throw IllegalStateException()
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {}
}
@@ -29,7 +29,7 @@ object FieldSets {
)
val typeArguments =
fieldList("typeArguments", typeProjection)
fieldList("typeArguments", typeProjection, withReplace = true)
val arguments =
fieldList("arguments", expression)