FIR: rename FirResolvedImport.resolvedClassId|relativeClassName
These two fields references the parent of the import rather than the classes that are imported. For example ``` import java.util.Map // resolvedClassId -> null import java.util.Map.Entry // resolvedClassId -> java.util.Map import java.util.Map.* // resolvedClassId -> java.util.Map import java.util.Map.someStaticMethod // resolvedClassId -> java.util.Map import kotlin.package.someTopLevelFuntion // resolvedClassId -> null import kotlin.package.MyObject.someObjectFuntion // resolvedClassId -> kotlin.package.MyObject ```
This commit is contained in:
committed by
Ilya Kirillov
parent
e5b9d667c0
commit
211544e790
+2
-2
@@ -34,8 +34,8 @@ internal class KtFirNonStarImportingScope(
|
||||
imports.forEach { import ->
|
||||
NonStarImport(
|
||||
import.packageFqName,
|
||||
import.relativeClassName,
|
||||
import.resolvedClassId,
|
||||
import.relativeParentClassName,
|
||||
import.resolvedParentClassId,
|
||||
import.importedName
|
||||
).let(::add)
|
||||
}
|
||||
|
||||
+2
-2
@@ -42,8 +42,8 @@ internal class KtFirStarImportingScope(
|
||||
firScope.starImports.map { import ->
|
||||
StarImport(
|
||||
import.packageFqName,
|
||||
import.relativeClassName,
|
||||
import.resolvedClassId
|
||||
import.relativeParentClassName,
|
||||
import.resolvedParentClassId
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -59,7 +59,7 @@ object FirImportsChecker : FirFileChecker() {
|
||||
//empty name come from LT in some erroneous cases
|
||||
if (importedName.isSpecial || importedName.identifier.isEmpty()) return
|
||||
|
||||
val classId = (import as? FirResolvedImport)?.resolvedClassId
|
||||
val classId = (import as? FirResolvedImport)?.resolvedParentClassId
|
||||
if (classId != null) {
|
||||
val classSymbol = classId.resolveToClass(context) ?: return
|
||||
if (classSymbol.classKind.isSingleton) return
|
||||
@@ -103,7 +103,7 @@ object FirImportsChecker : FirFileChecker() {
|
||||
val alias = import.aliasName ?: return
|
||||
val importedName = import.importedName ?: return
|
||||
if (!OperatorConventions.isConventionName(alias)) return
|
||||
val classId = import.resolvedClassId
|
||||
val classId = import.resolvedParentClassId
|
||||
val illegalRename = if (classId != null) {
|
||||
val classFir = classId.resolveToClass(context) ?: return
|
||||
classFir.classKind.isSingleton && classFir.hasFunction(context, importedName) { it.isOperator }
|
||||
@@ -118,10 +118,10 @@ object FirImportsChecker : FirFileChecker() {
|
||||
}
|
||||
|
||||
private fun FirResolvedImport.resolvesToClass(context: CheckerContext): Boolean {
|
||||
if (resolvedClassId != null) {
|
||||
if (resolvedParentClassId != null) {
|
||||
if (isAllUnder) return true
|
||||
val parentClass = resolvedClassId!!
|
||||
val relativeClassName = this.relativeClassName ?: return false
|
||||
val parentClass = resolvedParentClassId!!
|
||||
val relativeClassName = this.relativeParentClassName ?: return false
|
||||
val importedName = this.importedName ?: return false
|
||||
val innerClassId = ClassId(parentClass.packageFqName, relativeClassName.child(importedName), false)
|
||||
return innerClassId.resolveToClass(context) != null
|
||||
@@ -181,7 +181,7 @@ object FirImportsChecker : FirFileChecker() {
|
||||
private fun checkDeprecatedImport(import: FirImport, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val importedFqName = import.importedFqName ?: return
|
||||
if (importedFqName.isRoot || importedFqName.shortName().asString().isEmpty()) return
|
||||
val classId = (import as? FirResolvedImport)?.resolvedClassId ?: ClassId.topLevel(importedFqName)
|
||||
val classId = (import as? FirResolvedImport)?.resolvedParentClassId ?: ClassId.topLevel(importedFqName)
|
||||
val classLike: FirRegularClassSymbol = classId.resolveToClass(context) ?: return
|
||||
FirDeprecationChecker.reportDeprecationIfNeeded(import.source, classLike, null, context, reporter)
|
||||
}
|
||||
|
||||
@@ -1803,7 +1803,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
||||
ws
|
||||
when (import) {
|
||||
is FirResolvedImport -> {
|
||||
val classId = import.resolvedClassId
|
||||
val classId = import.resolvedParentClassId
|
||||
if (classId == null) {
|
||||
val importedFqName = import.importedFqName
|
||||
if (importedFqName != null) {
|
||||
|
||||
+1
-1
@@ -84,7 +84,7 @@ open class FirImportResolveTransformer protected constructor(
|
||||
return buildResolvedImport {
|
||||
this.delegate = delegate
|
||||
this.packageFqName = packageFqName
|
||||
relativeClassName = relativeClassFqName
|
||||
this.relativeParentClassName = relativeClassFqName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -76,7 +76,7 @@ abstract class FirAbstractImportingScope(
|
||||
var result: FirClassLikeSymbol<*>? = null
|
||||
for (import in imports) {
|
||||
val importedName = name ?: import.importedName ?: continue
|
||||
val classId = import.resolvedClassId?.createNestedClassId(importedName)
|
||||
val classId = import.resolvedParentClassId?.createNestedClassId(importedName)
|
||||
?: ClassId.topLevel(import.packageFqName.child(importedName))
|
||||
val symbol = provider.getClassLikeSymbolByClassId(classId) ?: continue
|
||||
if (!filter.check(symbol, session)) continue
|
||||
@@ -101,7 +101,7 @@ abstract class FirAbstractImportingScope(
|
||||
if (filter == FirImportingScopeFilter.INVISIBLE_CLASSES) return
|
||||
for (import in imports) {
|
||||
val importedName = name ?: import.importedName ?: continue
|
||||
val staticsScope = import.resolvedClassId?.let(::getStaticsScope)
|
||||
val staticsScope = import.resolvedParentClassId?.let(::getStaticsScope)
|
||||
if (staticsScope != null) {
|
||||
staticsScope.processFunctionsByName(importedName, processor)
|
||||
} else if (importedName.isSpecial || importedName.identifier.isNotEmpty()) {
|
||||
@@ -117,7 +117,7 @@ abstract class FirAbstractImportingScope(
|
||||
if (filter == FirImportingScopeFilter.INVISIBLE_CLASSES) return
|
||||
for (import in imports) {
|
||||
val importedName = name ?: import.importedName ?: continue
|
||||
val staticsScope = import.resolvedClassId?.let(::getStaticsScope)
|
||||
val staticsScope = import.resolvedParentClassId?.let(::getStaticsScope)
|
||||
if (staticsScope != null) {
|
||||
staticsScope.processPropertiesByName(importedName, processor)
|
||||
} else if (importedName.isSpecial || importedName.identifier.isNotEmpty()) {
|
||||
|
||||
@@ -26,8 +26,8 @@ abstract class FirResolvedImport : FirPureAbstractElement(), FirImport {
|
||||
abstract override val aliasSource: FirSourceElement?
|
||||
abstract val delegate: FirImport
|
||||
abstract val packageFqName: FqName
|
||||
abstract val relativeClassName: FqName?
|
||||
abstract val resolvedClassId: ClassId?
|
||||
abstract val relativeParentClassName: FqName?
|
||||
abstract val resolvedParentClassId: ClassId?
|
||||
abstract val importedName: Name?
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedImport(this, data)
|
||||
|
||||
+2
-2
@@ -25,13 +25,13 @@ import org.jetbrains.kotlin.name.Name
|
||||
class FirResolvedImportBuilder {
|
||||
lateinit var delegate: FirImport
|
||||
lateinit var packageFqName: FqName
|
||||
var relativeClassName: FqName? = null
|
||||
var relativeParentClassName: FqName? = null
|
||||
|
||||
fun build(): FirResolvedImport {
|
||||
return FirResolvedImportImpl(
|
||||
delegate,
|
||||
packageFqName,
|
||||
relativeClassName,
|
||||
relativeParentClassName,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -21,14 +21,14 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
internal class FirResolvedImportImpl(
|
||||
override var delegate: FirImport,
|
||||
override val packageFqName: FqName,
|
||||
override val relativeClassName: FqName?,
|
||||
override val relativeParentClassName: FqName?,
|
||||
) : FirResolvedImport() {
|
||||
override val source: FirSourceElement? get() = delegate.source
|
||||
override val importedFqName: FqName? get() = delegate.importedFqName
|
||||
override val isAllUnder: Boolean get() = delegate.isAllUnder
|
||||
override val aliasName: Name? get() = delegate.aliasName
|
||||
override val aliasSource: FirSourceElement? get() = delegate.aliasSource
|
||||
override val resolvedClassId: ClassId? get() = relativeClassName?.let { ClassId(packageFqName, it, false) }
|
||||
override val resolvedParentClassId: ClassId? get() = relativeParentClassName?.let { ClassId(packageFqName, it, false) }
|
||||
override val importedName: Name? get() = importedFqName?.shortName()
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
|
||||
+2
-2
@@ -52,8 +52,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
delegate = "delegate"
|
||||
}
|
||||
|
||||
default("resolvedClassId") {
|
||||
delegate = "relativeClassName"
|
||||
default("resolvedParentClassId") {
|
||||
delegate = "relativeParentClassName"
|
||||
delegateCall = "let { ClassId(packageFqName, it, false) }"
|
||||
withGetter = true
|
||||
}
|
||||
|
||||
+2
-2
@@ -431,8 +431,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
resolvedImport.configure {
|
||||
+field("delegate", import)
|
||||
+field("packageFqName", fqNameType)
|
||||
+field("relativeClassName", fqNameType, nullable = true)
|
||||
+field("resolvedClassId", classIdType, nullable = true)
|
||||
+field("relativeParentClassName", fqNameType, nullable = true)
|
||||
+field("resolvedParentClassId", classIdType, nullable = true)
|
||||
+field(
|
||||
"importedName",
|
||||
nameType,
|
||||
|
||||
Reference in New Issue
Block a user