Resolve converter errors after merge (light tree to FIR)

This commit is contained in:
Ivan Cilcic
2019-07-23 14:19:49 +03:00
committed by Mikhail Glukhikh
parent 86097bdcce
commit ef535a2d85
7 changed files with 19 additions and 18 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
@@ -229,7 +230,7 @@ object DataClassUtil {
if (!property.isVal && !property.isVar) continue if (!property.isVal && !property.isVar) continue
val name = Name.identifier("component$componentIndex") val name = Name.identifier("component$componentIndex")
componentIndex++ componentIndex++
val symbol = FirFunctionSymbol( val symbol = FirNamedFunctionSymbol(
CallableId( CallableId(
ClassNameUtil.packageFqName, ClassNameUtil.packageFqName,
ClassNameUtil.className, ClassNameUtil.className,
@@ -276,7 +277,7 @@ object DataClassUtil {
firPrimaryConstructor: FirConstructor, firPrimaryConstructor: FirConstructor,
properties: List<FirProperty> properties: List<FirProperty>
) { ) {
val symbol = FirFunctionSymbol( val symbol = FirNamedFunctionSymbol(
CallableId( CallableId(
ClassNameUtil.packageFqName, ClassNameUtil.packageFqName,
ClassNameUtil.className, ClassNameUtil.className,
@@ -591,7 +591,7 @@ class DeclarationsConverter(
return FirPrimaryConstructorImpl( return FirPrimaryConstructorImpl(
session, session,
null, null,
FirFunctionSymbol(ClassNameUtil.callableIdForClassConstructor()), FirConstructorSymbol(ClassNameUtil.callableIdForClassConstructor()),
if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility, if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility,
modifiers.hasExpect(), modifiers.hasExpect(),
modifiers.hasActual(), modifiers.hasActual(),
@@ -644,7 +644,7 @@ class DeclarationsConverter(
val firConstructor = FirConstructorImpl( val firConstructor = FirConstructorImpl(
session, session,
null, null,
FirFunctionSymbol(ClassNameUtil.callableIdForClassConstructor()), FirConstructorSymbol(ClassNameUtil.callableIdForClassConstructor()),
modifiers.getVisibility(), modifiers.getVisibility(),
modifiers.hasExpect(), modifiers.hasExpect(),
modifiers.hasActual(), modifiers.hasActual(),
@@ -811,7 +811,7 @@ class DeclarationsConverter(
*/ */
private fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration { private fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration {
var isVar = false var isVar = false
val entries = mutableListOf<FirVariable>() val entries = mutableListOf<FirVariable<*>>()
var firExpression: FirExpression? = null var firExpression: FirExpression? = null
destructingDeclaration.forEachChildren { destructingDeclaration.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -827,7 +827,7 @@ class DeclarationsConverter(
/** /**
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMultiDeclarationName * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMultiDeclarationName
*/ */
private fun convertDestructingDeclarationEntry(entry: LighterASTNode): FirVariable { private fun convertDestructingDeclarationEntry(entry: LighterASTNode): FirVariable<*> {
var modifiers = Modifier(session) var modifiers = Modifier(session)
lateinit var identifier: String lateinit var identifier: String
var firType: FirTypeRef? = null var firType: FirTypeRef? = null
@@ -960,7 +960,7 @@ class DeclarationsConverter(
FirMemberFunctionImpl( FirMemberFunctionImpl(
session, session,
null, null,
FirFunctionSymbol(ClassNameUtil.callableIdForName(functionName, isLocal)), FirNamedFunctionSymbol(ClassNameUtil.callableIdForName(functionName, isLocal)),
functionName, functionName,
if (isLocal) Visibilities.LOCAL else modifiers.getVisibility(), if (isLocal) Visibilities.LOCAL else modifiers.getVisibility(),
modifiers.getModality(), modifiers.getModality(),
@@ -567,11 +567,11 @@ class ExpressionsConverter(
*/ */
private fun convertWhenExpression(whenExpression: LighterASTNode): FirExpression { private fun convertWhenExpression(whenExpression: LighterASTNode): FirExpression {
var subjectExpression: FirExpression? = null var subjectExpression: FirExpression? = null
var subjectVariable: FirVariable? = null var subjectVariable: FirVariable<*>? = null
val whenEntries = mutableListOf<WhenEntry>() val whenEntries = mutableListOf<WhenEntry>()
whenExpression.forEachChildren { whenExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
PROPERTY -> subjectVariable = declarationsConverter.convertPropertyDeclaration(it) as FirVariable PROPERTY -> subjectVariable = declarationsConverter.convertPropertyDeclaration(it) as FirVariable<*>
DESTRUCTURING_DECLARATION -> subjectExpression = getAsFirExpression(it) DESTRUCTURING_DECLARATION -> subjectExpression = getAsFirExpression(it)
WHEN_ENTRY -> whenEntries += convertWhenEntry(it) WHEN_ENTRY -> whenEntries += convertWhenEntry(it)
else -> if (it.isExpression()) subjectExpression = getAsFirExpression(it) else -> if (it.isExpression()) subjectExpression = getAsFirExpression(it)
@@ -153,7 +153,7 @@ fun ExpressionsConverter.generateIncrementOrDecrementBlock(
fun generateDestructuringBlock( fun generateDestructuringBlock(
session: FirSession, session: FirSession,
multiDeclaration: DestructuringDeclaration, multiDeclaration: DestructuringDeclaration,
container: FirVariable, container: FirVariable<*>,
tmpVariable: Boolean tmpVariable: Boolean
): FirExpression { ): FirExpression {
return FirBlockImpl(session, null).apply { return FirBlockImpl(session, null).apply {
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.lightTree.converter.utils.generateDestructuringB
data class DestructuringDeclaration( data class DestructuringDeclaration(
val isVar: Boolean, val isVar: Boolean,
val entries: List<FirVariable>, val entries: List<FirVariable<*>>,
val initializer: FirExpression? val initializer: FirExpression?
) { ) {
fun toFirDestructingDeclaration(session: FirSession): FirExpression { fun toFirDestructingDeclaration(session: FirSession): FirExpression {
@@ -33,7 +33,7 @@ class DummyFirStatement(
session: FirSession = object : FirSessionBase(null) {} session: FirSession = object : FirSessionBase(null) {}
) : FirUnknownTypeExpression(session, psi), DummyElement ) : FirUnknownTypeExpression(session, psi), DummyElement
class DummyFirVariable( class DummyFirVariable<F: FirVariable<F>>(
override val psi: PsiElement? = null, override val psi: PsiElement? = null,
override val session: FirSession = object : FirSessionBase(null) {}, override val session: FirSession = object : FirSessionBase(null) {},
override val annotations: List<FirAnnotationCall> = mutableListOf(), override val annotations: List<FirAnnotationCall> = mutableListOf(),
@@ -42,9 +42,9 @@ class DummyFirVariable(
override var returnTypeRef: FirTypeRef = FirImplicitTypeRefImpl(session, psi), override var returnTypeRef: FirTypeRef = FirImplicitTypeRefImpl(session, psi),
override val isVar: Boolean = false, override val isVar: Boolean = false,
override var initializer: FirExpression? = null, override var initializer: FirExpression? = null,
override val symbol: FirVariableSymbol = FirVariableSymbol(name), override val symbol: FirVariableSymbol<F> = FirVariableSymbol(name),
override var delegate: FirExpression? = null override var delegate: FirExpression? = null
) : FirVariable, DummyElement { ) : FirVariable<F>, DummyElement {
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) { override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
} }
@@ -52,7 +52,7 @@ class FirPartialTransformer(
} }
override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult<FirDeclaration> { override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult<FirDeclaration> {
return if (!visitLocalMembers && namedFunction is FirAbstractCallableMember && namedFunction.visibility == Visibilities.LOCAL) { return if (!visitLocalMembers && namedFunction is FirAbstractCallableMember<*> && namedFunction.visibility == Visibilities.LOCAL) {
DummyFirDeclaration().compose() DummyFirDeclaration().compose()
} else { } else {
(namedFunction.transformChildren(this, data) as FirNamedFunction).compose() (namedFunction.transformChildren(this, data) as FirNamedFunction).compose()
@@ -70,11 +70,11 @@ class FirPartialTransformer(
} }
} }
override fun transformVariable(variable: FirVariable, data: Nothing?): CompositeTransformResult<FirDeclaration> { override fun <F : FirVariable<F>> transformVariable(variable: FirVariable<F>, data: Nothing?): CompositeTransformResult<FirDeclaration> {
return if (visitVariable) { return if (visitVariable) {
(variable.transformChildren(this, data) as FirVariable).compose() (variable.transformChildren(this, data) as FirVariable<*>).compose()
} else { } else {
DummyFirVariable().compose() DummyFirVariable<F>().compose()
} }
} }