[FIR] Deprecate using typealias as callable qualifier in import
^KT-64350 Fixed
This commit is contained in:
committed by
Space Team
parent
802366064d
commit
3994e3f63a
+8
@@ -1732,6 +1732,14 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
}
|
||||
|
||||
val OPERATOR_RENAMED_ON_IMPORT by error<KtImportDirective>(PositioningStrategy.IMPORT_LAST_NAME)
|
||||
|
||||
val TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT by deprecationError<KtImportDirective>(
|
||||
LanguageFeature.ProhibitTypealiasAsCallableQualifierInImport,
|
||||
PositioningStrategy.IMPORT_LAST_BUT_ONE_NAME,
|
||||
) {
|
||||
parameter<Name>("typealiasName")
|
||||
parameter<Name>("originalClassName")
|
||||
}
|
||||
}
|
||||
|
||||
val SUSPEND by object : DiagnosticGroup("Suspend errors") {
|
||||
|
||||
+1
@@ -93,6 +93,7 @@ enum class PositioningStrategy(private val strategy: String? = null) {
|
||||
QUESTION_MARK_BY_TYPE,
|
||||
ANNOTATION_USE_SITE,
|
||||
IMPORT_LAST_NAME,
|
||||
IMPORT_LAST_BUT_ONE_NAME,
|
||||
DATA_MODIFIER,
|
||||
SPREAD_OPERATOR,
|
||||
DECLARATION_WITH_BODY,
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.config.LanguageFeature.ProhibitInvisibleAbstractMeth
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitNonReifiedArraysAsReifiedTypeArguments
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitScriptTopLevelInnerClasses
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitSingleNamedFunctionAsExpression
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitTypealiasAsCallableQualifierInImport
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.ProhibitUseSiteTargetAnnotationsOnSuperTypes
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.RestrictRetentionForExpressionAnnotations
|
||||
import org.jetbrains.kotlin.config.LanguageFeature.RestrictionOfValReassignmentViaBackingField
|
||||
@@ -858,6 +859,7 @@ object FirErrors {
|
||||
val CANNOT_BE_IMPORTED: KtDiagnosticFactory1<Name> by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
|
||||
val CONFLICTING_IMPORT: KtDiagnosticFactory1<Name> by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_ALIAS)
|
||||
val OPERATOR_RENAMED_ON_IMPORT: KtDiagnosticFactory0 by error0<KtImportDirective>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
|
||||
val TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT: KtDiagnosticFactoryForDeprecation2<Name, Name> by deprecationError2<KtImportDirective, Name, Name>(ProhibitTypealiasAsCallableQualifierInImport, SourceElementPositioningStrategies.IMPORT_LAST_BUT_ONE_NAME)
|
||||
|
||||
// Suspend errors
|
||||
val ILLEGAL_SUSPEND_FUNCTION_CALL: KtDiagnosticFactory1<FirBasedSymbol<*>> by error1<PsiElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
|
||||
+15
-3
@@ -95,7 +95,8 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) {
|
||||
val symbolProvider = context.session.symbolProvider
|
||||
val parentClassId = (import as? FirResolvedImport)?.resolvedParentClassId
|
||||
if (parentClassId != null) {
|
||||
val parentClassSymbol = parentClassId.resolveToClass(context) ?: return
|
||||
val parentClassLikeSymbol = parentClassId.resolveToClassLike(context) ?: return
|
||||
val parentClassSymbol = parentClassLikeSymbol.fullyExpandedClass(context.session) ?: return
|
||||
|
||||
fun reportInvisibleParentClasses(classSymbol: FirRegularClassSymbol, depth: Int) {
|
||||
if (!classSymbol.isVisible(context)) {
|
||||
@@ -109,7 +110,14 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) {
|
||||
reportInvisibleParentClasses(parentClassSymbol, 1)
|
||||
|
||||
when (val status = parentClassSymbol.getImportStatusOfCallableMembers(context, importedName)) {
|
||||
ImportStatus.OK -> return
|
||||
ImportStatus.OK -> {
|
||||
if (parentClassLikeSymbol is FirTypeAliasSymbol) {
|
||||
reporter.reportOn(
|
||||
import.source, FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT,
|
||||
parentClassLikeSymbol.name, parentClassSymbol.name, context
|
||||
)
|
||||
}
|
||||
}
|
||||
is ImportStatus.Invisible -> {
|
||||
val source = import.getSourceForImportSegment(0)
|
||||
reporter.report(status.symbol.toInvisibleReferenceDiagnostic(source), context)
|
||||
@@ -237,8 +245,12 @@ object FirImportsChecker : FirFileChecker(MppCheckerKind.Common) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun ClassId.resolveToClassLike(context: CheckerContext): FirClassLikeSymbol<*>? {
|
||||
return context.session.symbolProvider.getClassLikeSymbolByClassId(this)
|
||||
}
|
||||
|
||||
private fun ClassId.resolveToClass(context: CheckerContext): FirRegularClassSymbol? {
|
||||
val classSymbol = context.session.symbolProvider.getClassLikeSymbolByClassId(this) ?: return null
|
||||
val classSymbol = resolveToClassLike(context) ?: return null
|
||||
return when (classSymbol) {
|
||||
is FirRegularClassSymbol -> classSymbol
|
||||
is FirTypeAliasSymbol -> classSymbol.fullyExpandedClass(context.session)
|
||||
|
||||
+8
@@ -611,6 +611,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.THROWABLE_TYPE_MI
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOO_MANY_ARGUMENTS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOO_MANY_CHARACTERS_IN_CHARACTER_LITERAL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TOPLEVEL_TYPEALIASES_ONLY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANSION_DEPRECATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPEALIAS_EXPANSION_DEPRECATION_ERROR
|
||||
@@ -2511,6 +2512,13 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
TO_STRING
|
||||
)
|
||||
map.put(OPERATOR_RENAMED_ON_IMPORT, "Operator renamed to a different operator on import.")
|
||||
map.put(
|
||||
TYPEALIAS_AS_CALLABLE_QUALIFIER_IN_IMPORT,
|
||||
"Cannot use typealias ''{0}'' as a callable qualifier in import. " +
|
||||
"Use original class ''{1}'' instead or rewrite calls with ''{0}'' as a qualifier. " +
|
||||
"See https://youtrack.jetbrains.com/issue/KT-64431.",
|
||||
NAME, NAME
|
||||
)
|
||||
|
||||
// Suspend
|
||||
map.put(
|
||||
|
||||
Reference in New Issue
Block a user