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>(
|
||||
private val diagnosticFactory: DiagnosticFactoryWithPsiElement<T, *>,
|
||||
private val elementType: Class<T>,
|
||||
private val customIntentionFactory: ((Diagnostic) -> IntentionAction?)? = null,
|
||||
val elementType: Class<T>,
|
||||
) : AbstractKotlinInspection() {
|
||||
abstract val diagnosticFactory: DiagnosticFactoryWithPsiElement<T, *>
|
||||
open fun getCustomIntentionFactory(): ((Diagnostic) -> IntentionAction?)? = null
|
||||
|
||||
override fun checkFile(file: PsiFile, manager: InspectionManager, isOnTheFly: Boolean): Array<ProblemDescriptor>? {
|
||||
if (file !is KtFile) return null
|
||||
val diagnostics by lazy {
|
||||
@@ -48,8 +49,9 @@ abstract class AbstractDiagnosticBasedMigrationInspection<T : KtElement>(
|
||||
.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")
|
||||
|
||||
|
||||
+5
-4
@@ -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<KtAnnotationEntry>(
|
||||
ErrorsJvm.OVERLOADS_ANNOTATION_CLASS_CONSTRUCTOR,
|
||||
KtAnnotationEntry::class.java,
|
||||
),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(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<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 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<KtAnnotationEntry>(Errors.REPEATED_ANNOTATION, KtAnnotationEntry::class.java),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(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<KtAnnotationEntry, *>
|
||||
get() = Errors.REPEATED_ANNOTATION
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -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<KtTypeParameterList>(
|
||||
Errors.LOCAL_VARIABLE_WITH_TYPE_PARAMETERS,
|
||||
KtTypeParameterList::class.java,
|
||||
),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtTypeParameterList>(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<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 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<KtAnnotationEntry>(Errors.ANNOTATION_ON_SUPERCLASS, KtAnnotationEntry::class.java),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtAnnotationEntry>(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<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 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<KtElement>(Errors.REDUNDANT_LABEL_WARNING, KtElement::class.java),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtElement>(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<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 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<KtExpressionWithLabel>(Errors.NOT_A_FUNCTION_LABEL, KtExpressionWithLabel::class.java),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtExpressionWithLabel>(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<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.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<KtParameter>(
|
||||
Errors.UNUSED_PARAMETER,
|
||||
KtParameter::class.java,
|
||||
::createIntentionActionForMainFunction,
|
||||
),
|
||||
AbstractDiagnosticBasedMigrationInspection<KtParameter>(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)
|
||||
}
|
||||
override val diagnosticFactory: DiagnosticFactoryWithPsiElement<KtParameter, *>
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user