[FIR] Store the first file in data.state.classifierContainerFileMap
Note that this doesn't affect multi-module configurations ^KT-59927
This commit is contained in:
committed by
Space Team
parent
41c3f98419
commit
21cb5cf83a
+14
-14
@@ -121,15 +121,8 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
|
||||
override fun visitElement(element: FirElement, data: FirRecorderData) {}
|
||||
|
||||
override fun visitRegularClass(regularClass: FirRegularClass, data: FirRecorderData) {
|
||||
visitClassifier(regularClass, data)
|
||||
val classId = regularClass.symbol.classId
|
||||
val prevFile = data.state.classifierContainerFileMap.put(classId, data.file)
|
||||
val storedClassifier = data.state.classifierMap.getOrPut(classId) { regularClass }
|
||||
|
||||
if (storedClassifier != regularClass) {
|
||||
data.nameConflictsTracker?.registerClassifierRedeclaration(
|
||||
classId, regularClass.symbol, data.file, storedClassifier.symbol, prevFile,
|
||||
)
|
||||
}
|
||||
|
||||
if (!classId.isNestedClass && !classId.isLocal) {
|
||||
data.state.classesInPackage.getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName)
|
||||
@@ -140,17 +133,24 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
|
||||
}
|
||||
|
||||
override fun visitTypeAlias(typeAlias: FirTypeAlias, data: FirRecorderData) {
|
||||
visitClassifier(typeAlias, data)
|
||||
val classId = typeAlias.symbol.classId
|
||||
val prevFile = data.state.classifierContainerFileMap.put(classId, data.file)
|
||||
val storedClassifier = data.state.classifierMap.getOrPut(classId) { typeAlias }
|
||||
data.state.classifierInPackage.getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName)
|
||||
}
|
||||
|
||||
if (storedClassifier != typeAlias) {
|
||||
private fun visitClassifier(classLike: FirClassLikeDeclaration, data: FirRecorderData) {
|
||||
val classId = classLike.symbol.classId
|
||||
|
||||
if (classId !in data.state.classifierMap) {
|
||||
data.state.classifierMap[classId] = classLike
|
||||
data.state.classifierContainerFileMap[classId] = data.file
|
||||
} else {
|
||||
data.nameConflictsTracker?.registerClassifierRedeclaration(
|
||||
classId, typeAlias.symbol, data.file, storedClassifier.symbol, prevFile,
|
||||
classId, classLike.symbol, data.file,
|
||||
data.state.classifierMap.getValue(classId).symbol,
|
||||
data.state.classifierContainerFileMap.getValue(classId),
|
||||
)
|
||||
}
|
||||
|
||||
data.state.classifierInPackage.getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName)
|
||||
}
|
||||
|
||||
override fun visitPropertyAccessor(
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
// FILE: file1.kt
|
||||
private class C {
|
||||
private class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>C<!> {
|
||||
companion object
|
||||
}
|
||||
|
||||
private typealias TA = C
|
||||
private typealias <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>TA<!> = C
|
||||
|
||||
private val test1: <!INVISIBLE_REFERENCE!>C<!> = <!INVISIBLE_REFERENCE!>C<!>()
|
||||
private val test1co: <!INVISIBLE_REFERENCE!>C<!>.Companion = <!INVISIBLE_REFERENCE!>C<!>
|
||||
|
||||
private val test2: <!INVISIBLE_REFERENCE!>TA<!> = <!INVISIBLE_REFERENCE!>TA<!>()
|
||||
private val test2co = <!INVISIBLE_REFERENCE!>TA<!>
|
||||
|
||||
// FILE: file2.kt
|
||||
private val test1: C = C()
|
||||
private val test1co: C.Companion = C
|
||||
|
||||
private val test2: TA = TA()
|
||||
private val test2co = TA
|
||||
|
||||
private class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>C<!>
|
||||
private typealias <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>TA<!> = Int
|
||||
// FILE: file2.kt
|
||||
private val test1: <!INVISIBLE_REFERENCE!>C<!> = <!INVISIBLE_REFERENCE!>C<!>()
|
||||
private val test1co: <!INVISIBLE_REFERENCE!>C<!>.Companion = <!INVISIBLE_REFERENCE!>C<!>
|
||||
|
||||
private val test2: <!INVISIBLE_REFERENCE!>TA<!> = <!INVISIBLE_REFERENCE!>TA<!>()
|
||||
private val test2co = <!INVISIBLE_REFERENCE!>TA<!>
|
||||
|
||||
private class C
|
||||
private typealias TA = Int
|
||||
|
||||
Reference in New Issue
Block a user