[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 visitElement(element: FirElement, data: FirRecorderData) {}
|
||||||
|
|
||||||
override fun visitRegularClass(regularClass: FirRegularClass, data: FirRecorderData) {
|
override fun visitRegularClass(regularClass: FirRegularClass, data: FirRecorderData) {
|
||||||
|
visitClassifier(regularClass, data)
|
||||||
val classId = regularClass.symbol.classId
|
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) {
|
if (!classId.isNestedClass && !classId.isLocal) {
|
||||||
data.state.classesInPackage.getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName)
|
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) {
|
override fun visitTypeAlias(typeAlias: FirTypeAlias, data: FirRecorderData) {
|
||||||
|
visitClassifier(typeAlias, data)
|
||||||
val classId = typeAlias.symbol.classId
|
val classId = typeAlias.symbol.classId
|
||||||
val prevFile = data.state.classifierContainerFileMap.put(classId, data.file)
|
data.state.classifierInPackage.getOrPut(classId.packageFqName, ::mutableSetOf).add(classId.shortClassName)
|
||||||
val storedClassifier = data.state.classifierMap.getOrPut(classId) { typeAlias }
|
}
|
||||||
|
|
||||||
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(
|
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(
|
override fun visitPropertyAccessor(
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
// FILE: file1.kt
|
// FILE: file1.kt
|
||||||
private class C {
|
private class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>C<!> {
|
||||||
companion object
|
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 test1: C = C()
|
||||||
private val test1co: C.Companion = C
|
private val test1co: C.Companion = C
|
||||||
|
|
||||||
private val test2: TA = TA()
|
private val test2: TA = TA()
|
||||||
private val test2co = TA
|
private val test2co = TA
|
||||||
|
|
||||||
private class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>C<!>
|
// FILE: file2.kt
|
||||||
private typealias <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>TA<!> = Int
|
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