FIR: resolve constructor delegated calls (types are all error yet)
This commit is contained in:
+12
-2
@@ -7,15 +7,25 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
|
||||||
open class FirConstructorImpl(
|
open class FirConstructorImpl(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
final override val visibility: Visibility,
|
final override val visibility: Visibility,
|
||||||
final override val delegatedConstructor: FirDelegatedConstructorCall?,
|
final override var delegatedConstructor: FirDelegatedConstructorCall?,
|
||||||
body: FirBody?
|
body: FirBody?
|
||||||
) : FirAbstractFunction(session, psi, body), FirConstructor
|
) : FirAbstractFunction(session, psi, body), FirConstructor {
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
|
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
|
||||||
|
|
||||||
|
return super<FirAbstractFunction>.transformChildren(transformer, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.types.FirType
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer
|
import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirDelegatedConstructorCall : FirCall, FirTypeProjectionContainer {
|
interface FirDelegatedConstructorCall : FirCall {
|
||||||
// Do we need 'constructedType: FirType' here?
|
// Do we need 'constructedType: FirType' here?
|
||||||
val constructedType: FirType
|
val constructedType: FirType
|
||||||
|
|
||||||
|
|||||||
+9
-3
@@ -6,16 +6,22 @@
|
|||||||
package org.jetbrains.kotlin.fir.expressions.impl
|
package org.jetbrains.kotlin.fir.expressions.impl
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||||
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirType
|
import org.jetbrains.kotlin.fir.types.FirType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
|
||||||
class FirDelegatedConstructorCallImpl(
|
class FirDelegatedConstructorCallImpl(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override val constructedType: FirType,
|
override var constructedType: FirType,
|
||||||
override val isThis: Boolean
|
override val isThis: Boolean
|
||||||
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
|
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
|
||||||
override val typeArguments = mutableListOf<FirTypeProjection>()
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
|
constructedType = constructedType.transformSingle(transformer, data)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user