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:
Tianyu Geng
2021-08-20 12:47:41 -07:00
committed by Ilya Kirillov
parent e5b9d667c0
commit 211544e790
11 changed files with 25 additions and 25 deletions
@@ -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)
}
@@ -42,8 +42,8 @@ internal class KtFirStarImportingScope(
firScope.starImports.map { import ->
StarImport(
import.packageFqName,
import.relativeClassName,
import.resolvedClassId
import.relativeParentClassName,
import.resolvedParentClassId
)
}
}
@@ -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) {
@@ -84,7 +84,7 @@ open class FirImportResolveTransformer protected constructor(
return buildResolvedImport {
this.delegate = delegate
this.packageFqName = packageFqName
relativeClassName = relativeClassFqName
this.relativeParentClassName = relativeClassFqName
}
}
}
@@ -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)
@@ -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,
)
}
@@ -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) {
@@ -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
}
@@ -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,