FIR: resolve constructor delegated calls (types are all error yet)

This commit is contained in:
Mikhail Glukhikh
2018-04-03 21:59:08 +03:00
parent ea86c3d2b3
commit 78d45f3f90
3 changed files with 22 additions and 6 deletions
@@ -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)
}
}
@@ -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
@@ -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
}
} }