Get rid of descriptors, resolved classifiers, + some cleanup
This commit is contained in:
-19
@@ -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>()
|
||||
-18
@@ -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>()
|
||||
-15
@@ -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>()
|
||||
-125
@@ -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()
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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("!")
|
||||
|
||||
-2
@@ -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
|
||||
|
||||
+2
-7
@@ -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(
|
||||
|
||||
+1
-2
@@ -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
|
||||
+2
-3
@@ -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) {
|
||||
+5
-2
@@ -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 {
|
||||
Reference in New Issue
Block a user