diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/AbstractDiagnosticBasedMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/AbstractDiagnosticBasedMigrationInspection.kt index 415045af530..ec03886cb02 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/AbstractDiagnosticBasedMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/AbstractDiagnosticBasedMigrationInspection.kt @@ -23,10 +23,11 @@ import org.jetbrains.kotlin.psi.KtTreeVisitorVoid abstract class AbstractDiagnosticBasedMigrationInspection( - private val diagnosticFactory: DiagnosticFactoryWithPsiElement, - private val elementType: Class, - private val customIntentionFactory: ((Diagnostic) -> IntentionAction?)? = null, + val elementType: Class, ) : AbstractKotlinInspection() { + abstract val diagnosticFactory: DiagnosticFactoryWithPsiElement + open fun getCustomIntentionFactory(): ((Diagnostic) -> IntentionAction?)? = null + override fun checkFile(file: PsiFile, manager: InspectionManager, isOnTheFly: Boolean): Array? { if (file !is KtFile) return null val diagnostics by lazy { @@ -48,8 +49,9 @@ abstract class AbstractDiagnosticBasedMigrationInspection( .singleOrNull() ?: error("Must have one diagnostic") + val customIntentionFactory = getCustomIntentionFactory() val intentionAction = if (customIntentionFactory != null) - customIntentionFactory.invoke(diagnostic) ?: return + customIntentionFactory(diagnostic) ?: return else actionsFactory.createActions(diagnostic).ifEmpty { return }.singleOrNull() ?: error("Must have one fix") diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt index 18abe07cb2f..c4661ca947b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix @@ -15,14 +16,14 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm class ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection : - AbstractDiagnosticBasedMigrationInspection( - ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR, - KtAnnotationEntry::class.java, - ), + AbstractDiagnosticBasedMigrationInspection(KtAnnotationEntry::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection.kt index afc0ea7d0d2..42f6ae6e879 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate @@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry class ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection : - AbstractDiagnosticBasedMigrationInspection(Errors.REPEATED_ANNOTATION, KtAnnotationEntry::class.java), + AbstractDiagnosticBasedMigrationInspection(KtAnnotationEntry::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.REPEATED_ANNOTATION } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitTypeParametersForLocalVariablesMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitTypeParametersForLocalVariablesMigrationInspection.kt index 36af38e606b..be9fc6a82a8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitTypeParametersForLocalVariablesMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitTypeParametersForLocalVariablesMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate @@ -15,14 +16,14 @@ import org.jetbrains.kotlin.psi.KtTypeParameterList class ProhibitTypeParametersForLocalVariablesMigrationInspection : - AbstractDiagnosticBasedMigrationInspection( - Errors.LOCAL_VARIABLE_WITH_TYPE_PARAMETERS, - KtTypeParameterList::class.java, - ), + AbstractDiagnosticBasedMigrationInspection(KtTypeParameterList::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.LOCAL_VARIABLE_WITH_TYPE_PARAMETERS } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection.kt index bbd3579cf9c..412c48cb593 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate @@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry class ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection : - AbstractDiagnosticBasedMigrationInspection(Errors.ANNOTATION_ON_SUPERCLASS, KtAnnotationEntry::class.java), + AbstractDiagnosticBasedMigrationInspection(KtAnnotationEntry::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.ANNOTATION_ON_SUPERCLASS } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RedundantLabelMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RedundantLabelMigrationInspection.kt index 66cc84deb3f..dbb3d70bd09 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RedundantLabelMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RedundantLabelMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate @@ -15,7 +16,7 @@ import org.jetbrains.kotlin.psi.KtElement class RedundantLabelMigrationInspection : - AbstractDiagnosticBasedMigrationInspection(Errors.REDUNDANT_LABEL_WARNING, KtElement::class.java), + AbstractDiagnosticBasedMigrationInspection(KtElement::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { @@ -23,5 +24,8 @@ class RedundantLabelMigrationInspection : } override fun descriptionMessage(): String = "Redundant label" + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.REDUNDANT_LABEL_WARNING } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RestrictReturnStatementTargetMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RestrictReturnStatementTargetMigrationInspection.kt index 156d7b3d95d..55887efd060 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RestrictReturnStatementTargetMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/RestrictReturnStatementTargetMigrationInspection.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.configuration.MigrationInfo import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate @@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtExpressionWithLabel class RestrictReturnStatementTargetMigrationInspection : - AbstractDiagnosticBasedMigrationInspection(Errors.NOT_A_FUNCTION_LABEL, KtExpressionWithLabel::class.java), + AbstractDiagnosticBasedMigrationInspection(KtExpressionWithLabel::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } + + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.NOT_A_FUNCTION_LABEL } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/WarningOnMainUnusedParameterMigrationInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/WarningOnMainUnusedParameterMigrationInspection.kt index 76e2d1b4a9a..b45cf96eb90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/migration/WarningOnMainUnusedParameterMigrationInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/migration/WarningOnMainUnusedParameterMigrationInspection.kt @@ -10,6 +10,7 @@ import com.intellij.codeInspection.CleanupLocalInspectionTool import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.idea.configuration.MigrationInfo @@ -23,22 +24,21 @@ import org.jetbrains.kotlin.psi.KtParameter class WarningOnMainUnusedParameterMigrationInspection : - AbstractDiagnosticBasedMigrationInspection( - Errors.UNUSED_PARAMETER, - KtParameter::class.java, - ::createIntentionActionForMainFunction, - ), + AbstractDiagnosticBasedMigrationInspection(KtParameter::class.java), MigrationFix, CleanupLocalInspectionTool { override fun isApplicable(migrationInfo: MigrationInfo): Boolean { return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4) } -} -private fun createIntentionActionForMainFunction(diagnostic: Diagnostic): IntentionAction? { - val parameter = diagnostic.psiElement as? KtParameter ?: return null - val ownerFunction = parameter.ownerFunction as? KtNamedFunction ?: return null - val mainFunctionDetector = MainFunctionDetector(parameter.languageVersionSettings) { it.descriptor as? FunctionDescriptor } - if (!mainFunctionDetector.isMain(ownerFunction)) return null - return RemoveUnusedFunctionParameterFix(parameter, false) -} \ No newline at end of file + override val diagnosticFactory: DiagnosticFactoryWithPsiElement + get() = Errors.UNUSED_PARAMETER + + override fun getCustomIntentionFactory(): ((Diagnostic) -> IntentionAction?)? = fun(diagnostic: Diagnostic): IntentionAction? { + val parameter = diagnostic.psiElement as? KtParameter ?: return null + val ownerFunction = parameter.ownerFunction as? KtNamedFunction ?: return null + val mainFunctionDetector = MainFunctionDetector(parameter.languageVersionSettings) { it.descriptor as? FunctionDescriptor } + if (!mainFunctionDetector.isMain(ownerFunction)) return null + return RemoveUnusedFunctionParameterFix(parameter, false) + } +}