Get rid of descriptors, resolved classifiers, + some cleanup

This commit is contained in:
Mikhail Glukhikh
2018-03-23 10:59:07 +03:00
parent 8035be07e2
commit 284b21b2a6
72 changed files with 126 additions and 702 deletions
@@ -1,19 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.fir.FirBasedDescriptor
import org.jetbrains.kotlin.fir.FirDescriptorOwner
import org.jetbrains.kotlin.fir.FirElement
abstract class AbstractFirBasedDescriptor<E> : FirBasedDescriptor<E> where E : FirElement, E : FirDescriptorOwner<E> {
override lateinit var fir: E
override fun bind(e: E) {
fir = e
}
}
@@ -1,28 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
import org.jetbrains.kotlin.fir.declarations.FirResolvedEnumEntry
import org.jetbrains.kotlin.fir.descriptors.ConeClassDescriptor
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.ClassId
class ConeClassDescriptorImpl(
override val typeParameters: List<ConeTypeParameterDescriptor>,
override val classId: ClassId,
override val superTypes: List<ConeKotlinType>,
override val nestedClassifiers: List<ConeClassifierDescriptor>
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedClass>()
class ConeEnumEntryDescriptorImpl(
override val typeParameters: List<ConeTypeParameterDescriptor>,
override val classId: ClassId,
override val superTypes: List<ConeKotlinType>,
override val nestedClassifiers: List<ConeClassifierDescriptor>
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedEnumEntry>()
@@ -1,18 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.fir.declarations.FirResolvedTypeAlias
import org.jetbrains.kotlin.fir.descriptors.ConeTypeAliasDescriptor
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.ClassId
class ConeTypeAliasDescriptorImpl(
override val typeParameters: List<ConeTypeParameterDescriptor>,
override val classId: ClassId,
override val expandedType: ConeKotlinType
) : ConeTypeAliasDescriptor, AbstractFirBasedDescriptor<FirResolvedTypeAlias>()
@@ -1,15 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.fir.declarations.FirResolvedTypeParameter
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.name.Name
class ConeTypeParameterDescriptorImpl(
override val symbol: ConeTypeParameterSymbol
) : ConeTypeParameterDescriptor, AbstractFirBasedDescriptor<FirResolvedTypeParameter>()
@@ -1,125 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
import org.jetbrains.kotlin.fir.FirDescriptorOwner
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedClassImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedEnumEntryImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeAliasImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedTypeParameterImpl
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
import org.jetbrains.kotlin.fir.types.FirResolvedType
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.compose
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
class FirClassifierResolveTransformer : FirTransformer<Nothing?>() {
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
return element.compose()
}
lateinit var packageFqName: FqName
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
packageFqName = file.packageFqName
return file.also { it.transformChildren(this, null) }.compose()
}
private var classLikeName: FqName = FqName.ROOT
override fun transformClass(klass: FirClass, data: Nothing?): CompositeTransformResult<FirDeclaration> {
val actualClassName = classLikeName.child(klass.name)
classLikeName = actualClassName
klass.transformChildren(this, data)
val superTypes = klass.superTypes.map {
(it as FirResolvedType).type
}
classLikeName = classLikeName.parent()
val typeParameters =
klass.typeParameters.filterIsInstance<FirDescriptorOwner<*>>().mapNotNull { it.descriptor as? ConeTypeParameterDescriptor }
val nestedClassifiers =
klass.declarations.filterIsInstance<FirDescriptorOwner<*>>().mapNotNull { it.descriptor as? ConeClassifierDescriptor }
val classId = ClassId(packageFqName, actualClassName, false)
return when (klass) {
is FirEnumEntry -> {
val descriptor = ConeEnumEntryDescriptorImpl(typeParameters, classId, superTypes, nestedClassifiers)
FirResolvedEnumEntryImpl(klass, descriptor).compose()
}
else -> {
val descriptor = ConeClassDescriptorImpl(typeParameters, classId, superTypes, nestedClassifiers)
FirResolvedClassImpl(klass, descriptor).compose()
}
}
}
override fun transformResolvedClass(resolvedClass: FirResolvedClass, data: Nothing?): CompositeTransformResult<FirDeclaration> {
return resolvedClass.compose()
}
var memberName: Name? = null
override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult<FirDeclaration> {
memberName = namedFunction.name
return super.transformNamedFunction(namedFunction, data).also {
memberName = null
}
}
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult<FirDeclaration> {
val actualClassName = classLikeName.child(typeAlias.name)
classLikeName = actualClassName
typeAlias.transformChildren(this, data)
classLikeName = classLikeName.parent()
val expandedType = (typeAlias.expandedType as FirResolvedType).type
val typeParameters =
typeAlias.typeParameters.filterIsInstance<FirDescriptorOwner<*>>().mapNotNull { it.descriptor as? ConeTypeParameterDescriptor }
val descriptor = ConeTypeAliasDescriptorImpl(
typeParameters,
ClassId(packageFqName, classLikeName.child(typeAlias.name), false),
expandedType
)
return FirResolvedTypeAliasImpl(typeAlias, descriptor).compose()
}
override fun transformResolvedTypeAlias(
resolvedTypeAlias: FirResolvedTypeAlias,
data: Nothing?
): CompositeTransformResult<FirDeclaration> {
return resolvedTypeAlias.compose()
}
override fun transformResolvedTypeParameter(
resolvedTypeParameter: FirResolvedTypeParameter,
data: Nothing?
): CompositeTransformResult<FirDeclaration> {
return resolvedTypeParameter.compose()
}
override fun transformTypeParameter(typeParameter: FirTypeParameter, data: Nothing?): CompositeTransformResult<FirDeclaration> {
typeParameter.transformChildren(this, data)
val descriptor = ConeTypeParameterDescriptorImpl(typeParameter.symbol)
return FirResolvedTypeParameterImpl(typeParameter, descriptor).compose()
}
}
@@ -44,7 +44,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
ProtoBuf.PackageFragment.parseFrom(stream, BuiltInSerializerProtocol.extensionRegistry)
}
protected val nameResolver = NameResolverImpl(packageProto.strings, packageProto.qualifiedNames)
private val nameResolver = NameResolverImpl(packageProto.strings, packageProto.qualifiedNames)
val classDataFinder = ProtoBasedClassDataFinder(packageProto, nameResolver, version) { SourceElement.NO_SOURCE }
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.FqName
class FirProviderImpl(val session: FirSession) : FirProvider {
override fun getFirClassifierBySymbol(symbol: ConeSymbol): FirNamedDeclaration? {
return when(symbol) {
return when (symbol) {
is FirBasedSymbol<*> -> symbol.fir as? FirNamedDeclaration
is ConeClassLikeSymbol -> getFirClassifierByFqName(symbol.classId)
else -> error("!")
@@ -6,11 +6,9 @@
package org.jetbrains.kotlin.fir.resolve.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
import org.jetbrains.kotlin.fir.types.FirQualifierPart
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -5,11 +5,6 @@
package org.jetbrains.kotlin.fir.resolve.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
import org.jetbrains.kotlin.fir.scopes.FirPosition
@@ -39,7 +34,7 @@ class FirTypeResolverImpl : FirTypeResolver {
}
}
private fun ConeSymbol.toConeKotlinType(parts: List<FirQualifierPart>, session: FirSession): ConeKotlinType? {
private fun ConeSymbol.toConeKotlinType(parts: List<FirQualifierPart>): ConeKotlinType? {
return when (this) {
is ConeTypeParameterSymbol -> {
@@ -94,7 +89,7 @@ class FirTypeResolverImpl : FirTypeResolver {
override fun resolveUserType(type: FirUserType, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType {
symbol ?: return ConeKotlinErrorType("Symbol not found")
return symbol.toConeKotlinType(type.qualifier, type.session) ?: ConeKotlinErrorType("Failed to resolve qualified type")
return symbol.toConeKotlinType(type.qualifier) ?: ConeKotlinErrorType("Failed to resolve qualified type")
}
override fun resolveType(
@@ -3,14 +3,13 @@
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedPackageStarImport
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -3,7 +3,7 @@
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -12,8 +12,7 @@ class FirTotalResolveTransformer {
private val transformers: List<FirTransformer<Nothing?>> = listOf(
FirImportResolveTransformer(),
FirTypeResolveTransformer(),
FirClassifierResolveTransformer()
FirTypeResolveTransformer()
)
fun processFile(firFile: FirFile) {
@@ -3,8 +3,9 @@
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.descriptors
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.render
@@ -161,7 +162,9 @@ open class FirTypeResolveTransformer : FirTransformer<Nothing?>() {
firProvider.getFirClassifierByFqName(it)!!
}
val transformer = SuperTypeResolveTransformer(firElementsToVisit.iterator())
val transformer = SuperTypeResolveTransformer(
firElementsToVisit.iterator()
)
file.transformSingle(transformer, null)
} else {