[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.KtFakeSourceElement
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.isObject
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
@@ -41,7 +42,9 @@ object FirImportsChecker : FirFileChecker() {
declaration.imports.forEach { import -> declaration.imports.forEach { import ->
if (import is FirErrorImport) return@forEach if (import is FirErrorImport) return@forEach
if (import.isAllUnder) { if (import.isAllUnder) {
if (import !is FirResolvedImport) { if (import is FirResolvedImport) {
checkAllUnderFromObject(import, context, reporter)
} else {
checkAllUnderFromEnumEntry(import, context, reporter) checkAllUnderFromEnumEntry(import, context, reporter)
} }
} else { } 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) { private fun checkCanBeImported(import: FirImport, context: CheckerContext, reporter: DiagnosticReporter) {
val importedFqName = import.importedFqName ?: return val importedFqName = import.importedFqName ?: return
val importedName = importedFqName.shortName() 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 // FILE: foo.kt
package test package test
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: foo.kt // FILE: foo.kt
package test package test
@@ -17,7 +18,7 @@ enum class EnumSample {
// FILE: bar.kt // FILE: bar.kt
import test.ClassAlias.* import test.ClassAlias.*
import test.ObjectAlias.* import test.<!CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON!>ObjectAlias<!>.*
import test.EnumAlias.* import test.EnumAlias.*
import test.EnumAlias import test.EnumAlias