AbstractDiagnosticBasedMigrationInspection: make lazy initialization
This commit is contained in:
+6
-4
@@ -23,10 +23,11 @@ import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
|||||||
|
|
||||||
|
|
||||||
abstract class AbstractDiagnosticBasedMigrationInspection<T : KtElement>(
|
abstract class AbstractDiagnosticBasedMigrationInspection<T : KtElement>(
|
||||||
private val diagnosticFactory: DiagnosticFactoryWithPsiElement<T, *>,
|
val elementType: Class<T>,
|
||||||
private val elementType: Class<T>,
|
|
||||||
private val customIntentionFactory: ((Diagnostic) -> IntentionAction?)? = null,
|
|
||||||
) : AbstractKotlinInspection() {
|
) : AbstractKotlinInspection() {
|
||||||
|
abstract val diagnosticFactory: DiagnosticFactoryWithPsiElement<T, *>
|
||||||
|
open fun getCustomIntentionFactory(): ((Diagnostic) -> IntentionAction?)? = null
|
||||||
|
|
||||||
override fun checkFile(file: PsiFile, manager: InspectionManager, isOnTheFly: Boolean): Array<ProblemDescriptor>? {
|
override fun checkFile(file: PsiFile, manager: InspectionManager, isOnTheFly: Boolean): Array<ProblemDescriptor>? {
|
||||||
if (file !is KtFile) return null
|
if (file !is KtFile) return null
|
||||||
val diagnostics by lazy {
|
val diagnostics by lazy {
|
||||||
@@ -48,8 +49,9 @@ abstract class AbstractDiagnosticBasedMigrationInspection<T : KtElement>(
|
|||||||
.singleOrNull()
|
.singleOrNull()
|
||||||
?: error("Must have one diagnostic")
|
?: error("Must have one diagnostic")
|
||||||
|
|
||||||
|
val customIntentionFactory = getCustomIntentionFactory()
|
||||||
val intentionAction = if (customIntentionFactory != null)
|
val intentionAction = if (customIntentionFactory != null)
|
||||||
customIntentionFactory.invoke(diagnostic) ?: return
|
customIntentionFactory(diagnostic) ?: return
|
||||||
else
|
else
|
||||||
actionsFactory.createActions(diagnostic).ifEmpty { return }.singleOrNull() ?: error("Must have one fix")
|
actionsFactory.createActions(diagnostic).ifEmpty { return }.singleOrNull() ?: error("Must have one fix")
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
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.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix
|
import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix
|
||||||
@@ -15,14 +16,14 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
|||||||
|
|
||||||
|
|
||||||
class ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection :
|
class ProhibitJvmOverloadsOnConstructorsOfAnnotationClassesMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(
|
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(KtAnnotationEntry::class.java),
|
||||||
ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR,
|
|
||||||
KtAnnotationEntry::class.java,
|
|
||||||
),
|
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtAnnotationEntry, *>
|
||||||
|
get() = ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
@@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
|||||||
|
|
||||||
|
|
||||||
class ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection :
|
class ProhibitRepeatedUseSiteTargetAnnotationsMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(Errors.REPEATED_ANNOTATION, KtAnnotationEntry::class.java),
|
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(KtAnnotationEntry::class.java),
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtAnnotationEntry, *>
|
||||||
|
get() = Errors.REPEATED_ANNOTATION
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
@@ -15,14 +16,14 @@ import org.jetbrains.kotlin.psi.KtTypeParameterList
|
|||||||
|
|
||||||
|
|
||||||
class ProhibitTypeParametersForLocalVariablesMigrationInspection :
|
class ProhibitTypeParametersForLocalVariablesMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtTypeParameterList>(
|
AbstractDiagnosticBasedMigrationInspection<KtTypeParameterList>(KtTypeParameterList::class.java),
|
||||||
Errors.LOCAL_VARIABLE_WITH_TYPE_PARAMETERS,
|
|
||||||
KtTypeParameterList::class.java,
|
|
||||||
),
|
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtTypeParameterList, *>
|
||||||
|
get() = Errors.LOCAL_VARIABLE_WITH_TYPE_PARAMETERS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
@@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
|||||||
|
|
||||||
|
|
||||||
class ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection :
|
class ProhibitUseSiteTargetAnnotationsOnSuperTypesMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(Errors.ANNOTATION_ON_SUPERCLASS, KtAnnotationEntry::class.java),
|
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(KtAnnotationEntry::class.java),
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtAnnotationEntry, *>
|
||||||
|
get() = Errors.ANNOTATION_ON_SUPERCLASS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
@@ -15,7 +16,7 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
|
|
||||||
|
|
||||||
class RedundantLabelMigrationInspection :
|
class RedundantLabelMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtElement>(Errors.REDUNDANT_LABEL_WARNING, KtElement::class.java),
|
AbstractDiagnosticBasedMigrationInspection<KtElement>(KtElement::class.java),
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
@@ -23,5 +24,8 @@ class RedundantLabelMigrationInspection :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun descriptionMessage(): String = "Redundant label"
|
override fun descriptionMessage(): String = "Redundant label"
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtElement, *>
|
||||||
|
get() = Errors.REDUNDANT_LABEL_WARNING
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.inspections.migration
|
|||||||
|
|
||||||
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
import com.intellij.codeInspection.CleanupLocalInspectionTool
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
import org.jetbrains.kotlin.idea.configuration.isLanguageVersionUpdate
|
||||||
@@ -15,11 +16,14 @@ import org.jetbrains.kotlin.psi.KtExpressionWithLabel
|
|||||||
|
|
||||||
|
|
||||||
class RestrictReturnStatementTargetMigrationInspection :
|
class RestrictReturnStatementTargetMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtExpressionWithLabel>(Errors.NOT_A_FUNCTION_LABEL, KtExpressionWithLabel::class.java),
|
AbstractDiagnosticBasedMigrationInspection<KtExpressionWithLabel>(KtExpressionWithLabel::class.java),
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtExpressionWithLabel, *>
|
||||||
|
get() = Errors.NOT_A_FUNCTION_LABEL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -10,6 +10,7 @@ import com.intellij.codeInspection.CleanupLocalInspectionTool
|
|||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
@@ -23,22 +24,21 @@ import org.jetbrains.kotlin.psi.KtParameter
|
|||||||
|
|
||||||
|
|
||||||
class WarningOnMainUnusedParameterMigrationInspection :
|
class WarningOnMainUnusedParameterMigrationInspection :
|
||||||
AbstractDiagnosticBasedMigrationInspection<KtParameter>(
|
AbstractDiagnosticBasedMigrationInspection<KtParameter>(KtParameter::class.java),
|
||||||
Errors.UNUSED_PARAMETER,
|
|
||||||
KtParameter::class.java,
|
|
||||||
::createIntentionActionForMainFunction,
|
|
||||||
),
|
|
||||||
MigrationFix,
|
MigrationFix,
|
||||||
CleanupLocalInspectionTool {
|
CleanupLocalInspectionTool {
|
||||||
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
override fun isApplicable(migrationInfo: MigrationInfo): Boolean {
|
||||||
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
return migrationInfo.isLanguageVersionUpdate(LanguageVersion.KOTLIN_1_3, LanguageVersion.KOTLIN_1_4)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun createIntentionActionForMainFunction(diagnostic: Diagnostic): IntentionAction? {
|
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtParameter, *>
|
||||||
val parameter = diagnostic.psiElement as? KtParameter ?: return null
|
get() = Errors.UNUSED_PARAMETER
|
||||||
val ownerFunction = parameter.ownerFunction as? KtNamedFunction ?: return null
|
|
||||||
val mainFunctionDetector = MainFunctionDetector(parameter.languageVersionSettings) { it.descriptor as? FunctionDescriptor }
|
override fun getCustomIntentionFactory(): ((Diagnostic) -> IntentionAction?)? = fun(diagnostic: Diagnostic): IntentionAction? {
|
||||||
if (!mainFunctionDetector.isMain(ownerFunction)) return null
|
val parameter = diagnostic.psiElement as? KtParameter ?: return null
|
||||||
return RemoveUnusedFunctionParameterFix(parameter, false)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user