From 3894e719b3309a65819e595bd5ff1a9f0e0fb0c3 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Thu, 21 Sep 2023 09:42:55 +0200 Subject: [PATCH] [FIR] Fix disappeared CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON ^KT-59965 Fixed --- .../checkers/declaration/FirImportsChecker.kt | 15 +++++++++- .../typealias/starImportOnTypeAlias.fir.kt | 28 ------------------- .../tests/typealias/starImportOnTypeAlias.kt | 1 + .../starImportOnTypeAlias.reversed.kt | 3 +- 4 files changed, 17 insertions(+), 30 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.fir.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt index ad85253987d..e92c48c2911 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt @@ -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() diff --git a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.fir.kt b/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.fir.kt deleted file mode 100644 index ea3d6ab50cc..00000000000 --- a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.fir.kt +++ /dev/null @@ -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 -} diff --git a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.kt b/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.kt index 02ae714f6e2..89dfb2d5a4c 100644 --- a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.kt +++ b/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: foo.kt package test diff --git a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.reversed.kt b/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.reversed.kt index 903732e2ac3..104c502225e 100644 --- a/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.reversed.kt +++ b/compiler/testData/diagnostics/tests/typealias/starImportOnTypeAlias.reversed.kt @@ -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.ObjectAlias.* import test.EnumAlias.* import test.EnumAlias