diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt index ec6277f9ed8..40d4d4e42d2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt @@ -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( diff --git a/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt b/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt index 6e66b77537e..b7d2262425f 100644 --- a/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/privateInFile.fir.kt @@ -1,22 +1,22 @@ // FILE: file1.kt -private class C { +private class C { companion object } -private typealias TA = C +private typealias TA = C -private val test1: C = C() -private val test1co: C.Companion = C - -private val test2: TA = TA() -private val test2co = 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 C -private typealias TA = Int +// 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 C +private typealias TA = Int