[FIR] Resolve delegating constructor calls
This commit is contained in:
+4
-4
@@ -16,18 +16,18 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirCall {
|
||||
abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolvable, FirCall {
|
||||
abstract override val source: FirSourceElement?
|
||||
abstract override val calleeReference: FirReference
|
||||
abstract override val annotations: List<FirAnnotationCall>
|
||||
abstract override val arguments: List<FirExpression>
|
||||
abstract val constructedTypeRef: FirTypeRef
|
||||
abstract val isThis: Boolean
|
||||
abstract val isSuper: Boolean
|
||||
abstract val calleeReference: FirReference
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegatedConstructorCall(this, data)
|
||||
|
||||
abstract override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
|
||||
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
|
||||
|
||||
abstract fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
|
||||
abstract override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
|
||||
}
|
||||
|
||||
+8
-8
@@ -26,28 +26,23 @@ class FirDelegatedConstructorCallImpl(
|
||||
override var constructedTypeRef: FirTypeRef,
|
||||
override val isThis: Boolean
|
||||
) : FirDelegatedConstructorCall(), FirCallWithArgumentList, FirAbstractAnnotatedElement {
|
||||
override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, constructedTypeRef)
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
override val arguments: MutableList<FirExpression> = mutableListOf()
|
||||
override val isSuper: Boolean get() = !isThis
|
||||
override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, constructedTypeRef)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
calleeReference.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
arguments.forEach { it.accept(visitor, data) }
|
||||
constructedTypeRef.accept(visitor, data)
|
||||
calleeReference.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCallImpl {
|
||||
transformCalleeReference(transformer, data)
|
||||
annotations.transformInplace(transformer, data)
|
||||
transformArguments(transformer, data)
|
||||
constructedTypeRef = constructedTypeRef.transformSingle(transformer, data)
|
||||
transformCalleeReference(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCallImpl {
|
||||
arguments.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -55,4 +50,9 @@ class FirDelegatedConstructorCallImpl(
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformArguments(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCallImpl {
|
||||
arguments.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall
|
||||
@@ -81,6 +80,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
|
||||
@@ -388,10 +388,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformElement(whenBranch, data)
|
||||
}
|
||||
|
||||
open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
open fun transformQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(qualifiedAccessWithoutCallee, data)
|
||||
}
|
||||
@@ -428,6 +424,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformElement(functionCall, data)
|
||||
}
|
||||
|
||||
open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(componentCall, data)
|
||||
}
|
||||
@@ -836,10 +836,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformWhenBranch(whenBranch, data)
|
||||
}
|
||||
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
final override fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee, data)
|
||||
}
|
||||
@@ -876,6 +872,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformFunctionCall(functionCall, data)
|
||||
}
|
||||
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformDelegatedConstructorCall(delegatedConstructorCall, data)
|
||||
}
|
||||
|
||||
final override fun visitComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformComponentCall(componentCall, data)
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall
|
||||
@@ -81,6 +80,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
|
||||
@@ -256,8 +256,6 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R = visitElement(whenBranch, data)
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R = visitElement(delegatedConstructorCall, data)
|
||||
|
||||
open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): R = visitElement(qualifiedAccessWithoutCallee, data)
|
||||
|
||||
open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): R = visitElement(qualifiedAccess, data)
|
||||
@@ -276,6 +274,8 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R = visitElement(functionCall, data)
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R = visitElement(delegatedConstructorCall, data)
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall, data: D): R = visitElement(componentCall, data)
|
||||
|
||||
open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R = visitElement(callableReferenceAccess, data)
|
||||
|
||||
@@ -71,7 +71,6 @@ import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall
|
||||
@@ -81,6 +80,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
|
||||
@@ -386,10 +386,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(whenBranch)
|
||||
}
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
visitElement(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee) {
|
||||
visitElement(qualifiedAccessWithoutCallee)
|
||||
}
|
||||
@@ -426,6 +422,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(functionCall)
|
||||
}
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
|
||||
visitElement(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
open fun visitComponentCall(componentCall: FirComponentCall) {
|
||||
visitElement(componentCall)
|
||||
}
|
||||
@@ -834,10 +834,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitWhenBranch(whenBranch)
|
||||
}
|
||||
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) {
|
||||
visitDelegatedConstructorCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
final override fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: Nothing?) {
|
||||
visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee)
|
||||
}
|
||||
@@ -874,6 +870,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFunctionCall(functionCall)
|
||||
}
|
||||
|
||||
final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) {
|
||||
visitDelegatedConstructorCall(delegatedConstructorCall)
|
||||
}
|
||||
|
||||
final override fun visitComponentCall(componentCall: FirComponentCall, data: Nothing?) {
|
||||
visitComponentCall(componentCall)
|
||||
}
|
||||
|
||||
+1
-1
@@ -84,7 +84,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call)
|
||||
val whenExpression = element("WhenExpression", Expression, expression, resolvable)
|
||||
val whenBranch = element("WhenBranch", Expression)
|
||||
val delegatedConstructorCall = element("DelegatedConstructorCall", Expression, call)
|
||||
val qualifiedAccessWithoutCallee = element("QualifiedAccessWithoutCallee", Expression, statement)
|
||||
val qualifiedAccess = element("QualifiedAccess", Expression, qualifiedAccessWithoutCallee, resolvable)
|
||||
|
||||
@@ -95,6 +94,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder)
|
||||
val qualifiedAccessExpression = element("QualifiedAccessExpression", Expression, expression, qualifiedAccess)
|
||||
val functionCall = element("FunctionCall", Expression, qualifiedAccessExpression, call)
|
||||
val delegatedConstructorCall = element("DelegatedConstructorCall", Expression, resolvable, call)
|
||||
val componentCall = element("ComponentCall", Expression, functionCall)
|
||||
val callableReferenceAccess = element("CallableReferenceAccess", Expression, qualifiedAccessExpression)
|
||||
val thisReceiverExpression = element("ThisReceiverExpression", Expression, qualifiedAccessExpression)
|
||||
|
||||
+10
@@ -575,6 +575,16 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
}
|
||||
|
||||
noImpl(userTypeRef)
|
||||
|
||||
// impl(delegatedConstructorCall) {
|
||||
// defaultTrue("safe", withGetter = true)
|
||||
// listOf("dispatchReceiver", "extensionReceiver", "explicitReceiver").forEach {
|
||||
// default(it) {
|
||||
// value = "FirNoReceiverExpression"
|
||||
// withGetter = true
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun findImplementationsWithAnnotations(implementationPredicate: (Implementation) -> Boolean): Collection<Implementation> {
|
||||
|
||||
-1
@@ -324,7 +324,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
delegatedConstructorCall.configure {
|
||||
+field("constructedTypeRef", typeRef)
|
||||
generateBooleanFields("this", "super")
|
||||
+calleeReference.withTransform()
|
||||
}
|
||||
|
||||
valueParameter.configure {
|
||||
|
||||
Reference in New Issue
Block a user