FIR: replace UnambiguousFqName with ClassId
This commit is contained in:
@@ -1,22 +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.fir
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
data class UnambiguousFqName(val packageFqName: FqNameUnsafe, val classFqName: FqName) {
|
|
||||||
|
|
||||||
override fun toString(): String {
|
|
||||||
return packageFqName.asString() + "/" + classFqName.asString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.descriptors
|
package org.jetbrains.kotlin.fir.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
|
|
||||||
interface ConeDescriptor
|
interface ConeDescriptor
|
||||||
@@ -16,7 +16,7 @@ interface ConeClassifierDescriptor : ConeDescriptor
|
|||||||
interface ConeClassifierDescriptorWithTypeParameters : ConeClassifierDescriptor {
|
interface ConeClassifierDescriptorWithTypeParameters : ConeClassifierDescriptor {
|
||||||
val typeParameters: List<ConeTypeParameterDescriptor>
|
val typeParameters: List<ConeTypeParameterDescriptor>
|
||||||
|
|
||||||
val fqName: UnambiguousFqName
|
val fqName: ClassId
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ConeTypeParameterDescriptor : ConeClassifierDescriptor
|
interface ConeTypeParameterDescriptor : ConeClassifierDescriptor
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.types
|
package org.jetbrains.kotlin.fir.types
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
sealed class ConeKotlinTypeProjection(val kind: ProjectionKind)
|
sealed class ConeKotlinTypeProjection(val kind: ProjectionKind)
|
||||||
|
|
||||||
@@ -29,5 +29,5 @@ abstract class ConeKotlinType : ConeKotlinTypeProjection(ProjectionKind.INVARIAN
|
|||||||
}
|
}
|
||||||
|
|
||||||
abstract class ConeClassType : ConeKotlinType() {
|
abstract class ConeClassType : ConeKotlinType() {
|
||||||
abstract val fqName: UnambiguousFqName
|
abstract val fqName: ClassId
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.types.impl
|
package org.jetbrains.kotlin.fir.types.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class ConeClassTypeImpl(
|
class ConeClassTypeImpl(
|
||||||
override val fqName: UnambiguousFqName,
|
override val fqName: ClassId,
|
||||||
override val typeArguments: List<ConeKotlinTypeProjection>
|
override val typeArguments: List<ConeKotlinTypeProjection>
|
||||||
) : ConeClassType()
|
) : ConeClassType()
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -5,16 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors
|
package org.jetbrains.kotlin.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassDescriptor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class ConeClassDescriptorImpl(
|
class ConeClassDescriptorImpl(
|
||||||
override val typeParameters: List<ConeTypeParameterDescriptor>,
|
override val typeParameters: List<ConeTypeParameterDescriptor>,
|
||||||
override val fqName: UnambiguousFqName,
|
override val fqName: ClassId,
|
||||||
override val superTypes: List<ConeKotlinType>,
|
override val superTypes: List<ConeKotlinType>,
|
||||||
override val nestedClassifiers: List<ConeClassifierDescriptor>
|
override val nestedClassifiers: List<ConeClassifierDescriptor>
|
||||||
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedClass>() {
|
) : ConeClassDescriptor, AbstractFirBasedDescriptor<FirResolvedClass>() {
|
||||||
|
|||||||
+8
-13
@@ -7,34 +7,29 @@ package org.jetbrains.kotlin.descriptors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirDescriptorOwner
|
import org.jetbrains.kotlin.fir.FirDescriptorOwner
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedClassImpl
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.ConeTypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeImportingScope
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitImportingScope
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirSelfImportingScope
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedType
|
import org.jetbrains.kotlin.fir.types.FirResolvedType
|
||||||
import org.jetbrains.kotlin.fir.types.FirType
|
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.compose
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
|
|
||||||
class FirClassifierResolveTransformer : FirTransformer<Nothing?>() {
|
class FirClassifierResolveTransformer : FirTransformer<Nothing?>() {
|
||||||
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
||||||
return element.compose()
|
return element.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
lateinit var packageFqName: FqNameUnsafe
|
lateinit var packageFqName: FqName
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
packageFqName = file.packageFqName.toUnsafe()
|
packageFqName = file.packageFqName
|
||||||
return file.also { it.transformChildren(this, null) }.compose()
|
return file.also { it.transformChildren(this, null) }.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +55,7 @@ class FirClassifierResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
|
|
||||||
val descriptor = ConeClassDescriptorImpl(
|
val descriptor = ConeClassDescriptorImpl(
|
||||||
typeParameters,
|
typeParameters,
|
||||||
UnambiguousFqName(packageFqName, actualClassName),
|
ClassId(packageFqName, actualClassName, false),
|
||||||
superTypes,
|
superTypes,
|
||||||
nestedClassifiers
|
nestedClassifiers
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.descriptors
|
package org.jetbrains.kotlin.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
@@ -14,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.FirProvider
|
|||||||
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.compose
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
class FirImportResolveTransformer : FirTransformer<Nothing?>() {
|
class FirImportResolveTransformer : FirTransformer<Nothing?>() {
|
||||||
@@ -37,7 +37,7 @@ class FirImportResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
lastPart.add(0, firstPart.shortName().asString())
|
lastPart.add(0, firstPart.shortName().asString())
|
||||||
firstPart = firstPart.parent()
|
firstPart = firstPart.parent()
|
||||||
|
|
||||||
val resolvedFqName = UnambiguousFqName(firstPart.toUnsafe(), FqName.fromSegments(lastPart))
|
val resolvedFqName = ClassId(firstPart, FqName.fromSegments(lastPart), false)
|
||||||
val foundClassifier = firProvider.getFirClassifierByFqName(resolvedFqName)
|
val foundClassifier = firProvider.getFirClassifierByFqName(resolvedFqName)
|
||||||
|
|
||||||
if (foundClassifier != null) {
|
if (foundClassifier != null) {
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ class FirTypeResolveTransformer : FirTransformer<Nothing?>() {
|
|||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
importingScope = FirCompositeImportingScope(
|
importingScope = FirCompositeImportingScope(
|
||||||
FirExplicitImportingScope(file.imports),
|
FirExplicitImportingScope(file.imports),
|
||||||
FirSelfImportingScope(file.packageFqName.toUnsafe(), file.session)
|
FirSelfImportingScope(file.packageFqName, file.session)
|
||||||
)
|
)
|
||||||
return file.also { it.transformChildren(this, null) }.compose()
|
return file.also { it.transformChildren(this, null) }.compose()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,23 +6,23 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface FirProvider {
|
interface FirProvider {
|
||||||
fun getFirFilesByPackage(fqName: FqNameUnsafe): List<FirFile>
|
fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration?
|
||||||
|
|
||||||
fun getFirClassifierByFqName(fqName: UnambiguousFqName): FirMemberDeclaration?
|
fun getFirTypeParameterByFqName(fqName: ClassId, parameterName: Name): FirTypeParameter?
|
||||||
|
|
||||||
fun getFirTypeParameterByFqName(fqName: UnambiguousFqName, parameterName: Name): FirTypeParameter?
|
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(session: FirSession): FirProvider = session.service()
|
fun getInstance(session: FirSession): FirProvider = session.service()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getFirFilesByPackage(fqName: FqName): List<FirFile>
|
||||||
}
|
}
|
||||||
@@ -6,14 +6,14 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve
|
package org.jetbrains.kotlin.fir.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
import org.jetbrains.kotlin.fir.types.FirQualifierPart
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
interface FirQualifierResolver {
|
interface FirQualifierResolver {
|
||||||
fun resolveTypeWithPrefix(parts: List<FirQualifierPart>, prefix: UnambiguousFqName): ConeKotlinType?
|
fun resolveTypeWithPrefix(parts: List<FirQualifierPart>, prefix: ClassId): ConeKotlinType?
|
||||||
|
|
||||||
fun resolveType(parts: List<FirQualifierPart>): ConeKotlinType?
|
fun resolveType(parts: List<FirQualifierPart>): ConeKotlinType?
|
||||||
|
|
||||||
|
|||||||
@@ -7,18 +7,17 @@ package org.jetbrains.kotlin.fir.resolve.impl
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirProviderImpl(val session: FirSession) : FirProvider {
|
class FirProviderImpl(val session: FirSession) : FirProvider {
|
||||||
|
|
||||||
fun recordFile(file: FirFile) {
|
fun recordFile(file: FirFile) {
|
||||||
val packageName = file.packageFqName.toUnsafe()
|
val packageName = file.packageFqName
|
||||||
fileMap.merge(packageName, listOf(file)) { a, b -> a + b }
|
fileMap.merge(packageName, listOf(file)) { a, b -> a + b }
|
||||||
|
|
||||||
file.acceptChildren(object : FirVisitorVoid() {
|
file.acceptChildren(object : FirVisitorVoid() {
|
||||||
@@ -28,7 +27,7 @@ class FirProviderImpl(val session: FirSession) : FirProvider {
|
|||||||
|
|
||||||
override fun visitClass(klass: FirClass) {
|
override fun visitClass(klass: FirClass) {
|
||||||
val fqName = containerFqName.child(klass.name)
|
val fqName = containerFqName.child(klass.name)
|
||||||
classifierMap[UnambiguousFqName(packageName, fqName)] = klass
|
classifierMap[ClassId(packageName, fqName, false)] = klass
|
||||||
|
|
||||||
containerFqName = fqName
|
containerFqName = fqName
|
||||||
klass.acceptChildren(this)
|
klass.acceptChildren(this)
|
||||||
@@ -37,25 +36,23 @@ class FirProviderImpl(val session: FirSession) : FirProvider {
|
|||||||
|
|
||||||
override fun visitTypeAlias(typeAlias: FirTypeAlias) {
|
override fun visitTypeAlias(typeAlias: FirTypeAlias) {
|
||||||
val fqName = containerFqName.child(typeAlias.name)
|
val fqName = containerFqName.child(typeAlias.name)
|
||||||
classifierMap[UnambiguousFqName(packageName, fqName)] = typeAlias
|
classifierMap[ClassId(packageName, fqName, false)] = typeAlias
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private val fileMap = mutableMapOf<FqNameUnsafe, List<FirFile>>()
|
private val fileMap = mutableMapOf<FqName, List<FirFile>>()
|
||||||
private val classifierMap = mutableMapOf<UnambiguousFqName, FirMemberDeclaration>()
|
private val classifierMap = mutableMapOf<ClassId, FirMemberDeclaration>()
|
||||||
|
|
||||||
override fun getFirFilesByPackage(fqName: FqNameUnsafe): List<FirFile> {
|
|
||||||
|
|
||||||
|
|
||||||
|
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> {
|
||||||
return fileMap[fqName].orEmpty()
|
return fileMap[fqName].orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirClassifierByFqName(fqName: UnambiguousFqName): FirMemberDeclaration? {
|
override fun getFirClassifierByFqName(fqName: ClassId): FirMemberDeclaration? {
|
||||||
return classifierMap[fqName]
|
return classifierMap[fqName]
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirTypeParameterByFqName(fqName: UnambiguousFqName, parameterName: Name): FirTypeParameter? {
|
override fun getFirTypeParameterByFqName(fqName: ClassId, parameterName: Name): FirTypeParameter? {
|
||||||
val typeParameterContainer = (getFirClassifierByFqName(fqName) as? FirTypeParameterContainer) ?: return null
|
val typeParameterContainer = (getFirClassifierByFqName(fqName) as? FirTypeParameterContainer) ?: return null
|
||||||
// TODO: Optimize search here
|
// TODO: Optimize search here
|
||||||
return typeParameterContainer.typeParameters.find { it.name == parameterName }
|
return typeParameterContainer.typeParameters.find { it.name == parameterName }
|
||||||
|
|||||||
+9
-5
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.impl
|
package org.jetbrains.kotlin.fir.resolve.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
||||||
@@ -14,12 +13,13 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeKotlinTypeProjectionInImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeKotlinTypeProjectionInImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeKotlinTypeProjectionOutImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeKotlinTypeProjectionOutImpl
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver {
|
class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver {
|
||||||
|
|
||||||
private fun FirMemberDeclaration.toConeKotlinType(fqName: UnambiguousFqName, parts: List<FirQualifierPart>): ConeKotlinType? {
|
private fun FirMemberDeclaration.toConeKotlinType(fqName: ClassId, parts: List<FirQualifierPart>): ConeKotlinType? {
|
||||||
return ConeClassTypeImpl(fqName, parts.flatMap {
|
return ConeClassTypeImpl(fqName, parts.flatMap {
|
||||||
it.typeArguments.map {
|
it.typeArguments.map {
|
||||||
when (it) {
|
when (it) {
|
||||||
@@ -38,10 +38,14 @@ class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveTypeWithPrefix(parts: List<FirQualifierPart>, prefix: UnambiguousFqName): ConeKotlinType? {
|
override fun resolveTypeWithPrefix(parts: List<FirQualifierPart>, prefix: ClassId): ConeKotlinType? {
|
||||||
val firProvider = FirProvider.getInstance(session)
|
val firProvider = FirProvider.getInstance(session)
|
||||||
|
|
||||||
val fqName = UnambiguousFqName(prefix.packageFqName, parts.fold(prefix.classFqName) { prefix, suffix -> prefix.child(suffix.name) })
|
val fqName = ClassId(
|
||||||
|
prefix.packageFqName,
|
||||||
|
parts.fold(prefix.relativeClassName) { prefix, suffix -> prefix.child(suffix.name) },
|
||||||
|
false
|
||||||
|
)
|
||||||
val foundClassifier = firProvider.getFirClassifierByFqName(fqName)
|
val foundClassifier = firProvider.getFirClassifierByFqName(fqName)
|
||||||
|
|
||||||
return foundClassifier?.toConeKotlinType(fqName, parts)
|
return foundClassifier?.toConeKotlinType(fqName, parts)
|
||||||
@@ -58,7 +62,7 @@ class FirQualifierResolverImpl(val session: FirSession) : FirQualifierResolver {
|
|||||||
lastPart.add(0, firstPart.last())
|
lastPart.add(0, firstPart.last())
|
||||||
firstPart.removeAt(firstPart.lastIndex)
|
firstPart.removeAt(firstPart.lastIndex)
|
||||||
|
|
||||||
val fqName = UnambiguousFqName(firstPart.toFqNameUnsafe(), lastPart.toFqName())
|
val fqName = ClassId(firstPart.toFqName(), lastPart.toFqName(), false)
|
||||||
val foundClassifier = firProvider.getFirClassifierByFqName(fqName)
|
val foundClassifier = firProvider.getFirClassifierByFqName(fqName)
|
||||||
|
|
||||||
if (foundClassifier != null) {
|
if (foundClassifier != null) {
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.scopes
|
package org.jetbrains.kotlin.fir.scopes
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface FirImportingScope {
|
interface FirImportingScope {
|
||||||
fun processClassifiersByName(name: Name, processor: (UnambiguousFqName) -> Boolean): Boolean
|
fun processClassifiersByName(name: Name, processor: (ClassId) -> Boolean): Boolean
|
||||||
}
|
}
|
||||||
+2
-2
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirCompositeImportingScope(vararg val scopes: FirImportingScope) : FirImportingScope {
|
class FirCompositeImportingScope(vararg val scopes: FirImportingScope) : FirImportingScope {
|
||||||
override fun processClassifiersByName(name: Name, processor: (UnambiguousFqName) -> Boolean): Boolean {
|
override fun processClassifiersByName(name: Name, processor: (ClassId) -> Boolean): Boolean {
|
||||||
for (scope in scopes) {
|
for (scope in scopes) {
|
||||||
if (!scope.processClassifiersByName(name, processor)) {
|
if (!scope.processClassifiersByName(name, processor)) {
|
||||||
return false
|
return false
|
||||||
|
|||||||
+3
-4
@@ -5,11 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirExplicitImportingScope(imports: List<FirImport>) : FirImportingScope {
|
class FirExplicitImportingScope(imports: List<FirImport>) : FirImportingScope {
|
||||||
@@ -18,9 +17,9 @@ class FirExplicitImportingScope(imports: List<FirImport>) : FirImportingScope {
|
|||||||
private val simpleImports =
|
private val simpleImports =
|
||||||
imports.filterIsInstance<FirResolvedImport>()
|
imports.filterIsInstance<FirResolvedImport>()
|
||||||
.filter { !it.isAllUnder }
|
.filter { !it.isAllUnder }
|
||||||
.groupBy { it.aliasName ?: it.resolvedFqName.classFqName.shortName() }
|
.groupBy { it.aliasName ?: it.resolvedFqName.shortClassName }
|
||||||
|
|
||||||
override fun processClassifiersByName(name: Name, processor: (UnambiguousFqName) -> Boolean): Boolean {
|
override fun processClassifiersByName(name: Name, processor: (ClassId) -> Boolean): Boolean {
|
||||||
val imports = simpleImports[name] ?: return true
|
val imports = simpleImports[name] ?: return true
|
||||||
for (import in imports) {
|
for (import in imports) {
|
||||||
if (!processor(import.resolvedFqName)) {
|
if (!processor(import.resolvedFqName)) {
|
||||||
|
|||||||
+4
-6
@@ -6,20 +6,18 @@
|
|||||||
package org.jetbrains.kotlin.fir.scopes.impl
|
package org.jetbrains.kotlin.fir.scopes.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
import org.jetbrains.kotlin.fir.scopes.FirImportingScope
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirSelfImportingScope(val fqName: FqNameUnsafe, val session: FirSession) : FirImportingScope {
|
class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirImportingScope {
|
||||||
override fun processClassifiersByName(name: Name, processor: (UnambiguousFqName) -> Boolean): Boolean {
|
override fun processClassifiersByName(name: Name, processor: (ClassId) -> Boolean): Boolean {
|
||||||
|
|
||||||
|
|
||||||
val unambiguousFqName = UnambiguousFqName(fqName, FqName.topLevel(name))
|
val unambiguousFqName = ClassId(fqName, name)
|
||||||
|
|
||||||
val firProvider = session.service<FirProvider>()
|
val firProvider = session.service<FirProvider>()
|
||||||
|
|
||||||
|
|||||||
@@ -384,7 +384,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
sb.append(packageFqName.asString().replace('.', '/'))
|
sb.append(packageFqName.asString().replace('.', '/'))
|
||||||
}
|
}
|
||||||
sb.append('.')
|
sb.append('.')
|
||||||
sb.append(fqName.classFqName.asString())
|
sb.append(fqName.relativeClassName.asString())
|
||||||
sb.append(typeArguments.joinToString { it ->
|
sb.append(typeArguments.joinToString { it ->
|
||||||
when (it) {
|
when (it) {
|
||||||
StarProjection -> "*"
|
StarProjection -> "*"
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.declarations
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
interface FirResolvedImport : FirImport {
|
interface FirResolvedImport : FirImport {
|
||||||
val resolvedFqName: UnambiguousFqName
|
val resolvedFqName: ClassId
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitResolvedImport(this, data)
|
visitor.visitResolvedImport(this, data)
|
||||||
|
|||||||
+2
-2
@@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.declarations.impl
|
package org.jetbrains.kotlin.fir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class FirResolvedImportImpl(
|
class FirResolvedImportImpl(
|
||||||
val delegate: FirImport,
|
val delegate: FirImport,
|
||||||
override val resolvedFqName: UnambiguousFqName
|
override val resolvedFqName: ClassId
|
||||||
) : FirResolvedImport, FirImport by delegate {
|
) : FirResolvedImport, FirImport by delegate {
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitResolvedImport(this, data)
|
visitor.visitResolvedImport(this, data)
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ package org.jetbrains.kotlin.fir.types.impl
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.UnambiguousFqName
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedType
|
import org.jetbrains.kotlin.fir.types.FirResolvedType
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
sealed class FirBuiltinType(
|
sealed class FirBuiltinType(
|
||||||
@@ -21,9 +20,9 @@ sealed class FirBuiltinType(
|
|||||||
val name: String
|
val name: String
|
||||||
) : FirResolvedType {
|
) : FirResolvedType {
|
||||||
final override val type: ConeKotlinType = ConeClassTypeImpl(
|
final override val type: ConeKotlinType = ConeClassTypeImpl(
|
||||||
UnambiguousFqName(
|
ClassId(
|
||||||
KOTLIN_PACKAGE_FQ_NAME,
|
KOTLIN_PACKAGE_FQ_NAME,
|
||||||
FqName.topLevel(Name.identifier(name))
|
Name.identifier(name)
|
||||||
), emptyList()
|
), emptyList()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -33,7 +32,7 @@ sealed class FirBuiltinType(
|
|||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val KOTLIN_PACKAGE_FQ_NAME = FqNameUnsafe.topLevel(Name.identifier("kotlin"))
|
private val KOTLIN_PACKAGE_FQ_NAME = FqName.topLevel(Name.identifier("kotlin"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user