[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:
Nikolay Lunyak
2023-10-04 15:58:36 +03:00
committed by Space Team
parent 41c3f98419
commit 21cb5cf83a
2 changed files with 25 additions and 25 deletions
@@ -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