Implement FIR loading for libraries (classes, supertypes, parameters)

Members aren't implemented yet
Related to KT-28788, KT-28918
This commit is contained in:
Mikhail Glukhikh
2019-02-11 11:04:59 +03:00
parent 0bef9f2afe
commit 4ea3df53cc
14 changed files with 137 additions and 139 deletions
@@ -8,7 +8,9 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContainer {
@@ -28,4 +30,6 @@ interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContain
declaration.accept(visitor, data)
}
}
}
}
val FirClass.superConeTypes get() = superTypes.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
@@ -6,7 +6,9 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypeAlias : FirMemberDeclaration, FirSymbolOwner<FirTypeAlias> {
@@ -19,4 +21,7 @@ interface FirTypeAlias : FirMemberDeclaration, FirSymbolOwner<FirTypeAlias> {
super.acceptChildren(visitor, data)
expandedType.accept(visitor, data)
}
}
}
val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedType.coneTypeSafe()
@@ -6,27 +6,16 @@
package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
class FictitiousFunctionSymbol(className: Name, arity: Int) : ConeClassSymbol {
override val classId = ClassId(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, className)
override val typeParameters: List<ConeTypeParameterSymbol> = (0..arity).map {
TypeParameterSymbol(it)
}
class TypeParameterSymbol(index: Int) : ConeTypeParameterSymbol {
override val name: Name = Name.identifier("T$index")
}
override val kind: ClassKind
get() = ClassKind.INTERFACE
override val superTypes: List<ConeClassLikeType>
get() = emptyList() // TODO: kotlin.Function ???
}
@@ -5,22 +5,9 @@
package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.name.ClassId
class FirClassSymbol(override val classId: ClassId) : ConeClassSymbol, AbstractFirBasedSymbol<FirRegularClass>() {
override val kind: ClassKind
get() = fir.classKind
override val superTypes: List<ConeClassLikeType>
get() = fir.superTypes.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
override val typeParameters: List<ConeTypeParameterSymbol>
get() = fir.typeParameters.map { it.symbol }
}
class FirClassSymbol(override val classId: ClassId) : ConeClassSymbol, AbstractFirBasedSymbol<FirRegularClass>()
@@ -8,15 +8,6 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.name.ClassId
class FirTypeAliasSymbol(override val classId: ClassId) : ConeTypeAliasSymbol, AbstractFirBasedSymbol<FirTypeAlias>() {
override val typeParameters: List<ConeTypeParameterSymbol>
get() = fir.typeParameters.map { it.symbol }
override val expansionType: ConeClassLikeType?
get() = fir.expandedType.coneTypeSafe()
}
class FirTypeAliasSymbol(override val classId: ClassId) : ConeTypeAliasSymbol, AbstractFirBasedSymbol<FirTypeAlias>()