[FIR] Fix disappeared CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON

^KT-59965 Fixed
This commit is contained in:
Vladimir Sukharev
2023-09-21 09:42:55 +02:00
committed by Space Team
parent f3bc8677c5
commit 3894e719b3
4 changed files with 17 additions and 30 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.KtFakeSourceElement
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.isObject
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
@@ -41,7 +42,9 @@ object FirImportsChecker : FirFileChecker() {
declaration.imports.forEach { import ->
if (import is FirErrorImport) return@forEach
if (import.isAllUnder) {
if (import !is FirResolvedImport) {
if (import is FirResolvedImport) {
checkAllUnderFromObject(import, context, reporter)
} else {
checkAllUnderFromEnumEntry(import, context, reporter)
}
} else {
@@ -65,6 +68,16 @@ object FirImportsChecker : FirFileChecker() {
}
}
private fun checkAllUnderFromObject(import: FirImport, context: CheckerContext, reporter: DiagnosticReporter) {
val fqName = import.importedFqName ?: return
if (fqName.isRoot) return
val classId = ClassId.topLevel(fqName)
val classSymbol = classId.resolveToClass(context) ?: return
if (classSymbol.classKind.isObject) {
reporter.reportOn(import.source, FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON, classSymbol.classId.shortClassName, context)
}
}
private fun checkCanBeImported(import: FirImport, context: CheckerContext, reporter: DiagnosticReporter) {
val importedFqName = import.importedFqName ?: return
val importedName = importedFqName.shortName()
@@ -1,28 +0,0 @@
// FILE: foo.kt
package test
typealias ClassAlias = ClassSample
typealias ObjectAlias = ObjectSample
typealias EnumAlias = EnumSample
class ClassSample
object ObjectSample
enum class EnumSample {
Entry;
}
// FILE: bar.kt
import test.ClassAlias.*
import test.ObjectAlias.*
import test.EnumAlias.*
import test.EnumAlias
fun bar() {
Entry
EnumAlias.Entry
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: foo.kt
package test
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: foo.kt
package test
@@ -17,7 +18,7 @@ enum class EnumSample {
// FILE: bar.kt
import test.ClassAlias.*
import test.ObjectAlias.*
import test.<!CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON!>ObjectAlias<!>.*
import test.EnumAlias.*
import test.EnumAlias