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