New J2K: reduce boilerplate code in post-processings for registerDiagnosticBasedProcessing's

This commit is contained in:
Ilya Kirillov
2019-04-22 14:46:40 +03:00
parent c0ec36b3e9
commit c4d07bd7e7
@@ -235,13 +235,8 @@ object NewJ2KPostProcessingRegistrar {
action.invoke(element.project, null, element.containingFile)
},
registerDiagnosticBasedProcessing(Errors.SMARTCAST_IMPOSSIBLE) { element: PsiElement, diagnostic ->
val action =
SmartCastImpossibleExclExclFixFactory.createActions(diagnostic).singleOrNull()
?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingFile)
},
registerDiagnosticBasedProcessingWithFixFactory(MissingIteratorExclExclFixFactory, Errors.ITERATOR_ON_NULLABLE),
registerDiagnosticBasedProcessingWithFixFactory(SmartCastImpossibleExclExclFixFactory, Errors.SMARTCAST_IMPOSSIBLE),
registerDiagnosticBasedProcessing(Errors.TYPE_MISMATCH) { element: PsiElement, diagnostic ->
val diagnosticWithParameters = diagnostic as? DiagnosticWithParameters2<KtExpression, KotlinType, KotlinType>
?: return@registerDiagnosticBasedProcessing
@@ -256,19 +251,14 @@ object NewJ2KPostProcessingRegistrar {
}
},
registerDiagnosticBasedProcessing(Errors.CAST_NEVER_SUCCEEDS) { element: KtSimpleNameExpression, diagnostic ->
val action =
ReplacePrimitiveCastWithNumberConversionFix.createActionsForAllProblems(listOf(diagnostic)).singleOrNull()
?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingKtFile)
},
registerDiagnosticBasedProcessing(Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE) { element: KtNamedDeclaration, diagnostic ->
val action =
ChangeCallableReturnTypeFix.ReturnTypeMismatchOnOverrideFactory
.createActionsForAllProblems(listOf(diagnostic)).singleOrNull()
?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingKtFile)
},
registerDiagnosticBasedProcessingWithFixFactory(
ReplacePrimitiveCastWithNumberConversionFix.Factory,
Errors.CAST_NEVER_SUCCEEDS
),
registerDiagnosticBasedProcessingWithFixFactory(
ChangeCallableReturnTypeFix.ReturnTypeMismatchOnOverrideFactory,
Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE
),
RemoveRedundantTypeQualifierProcessing(),
RemoveRedundantExpressionQualifierProcessing(),
@@ -287,34 +277,18 @@ object NewJ2KPostProcessingRegistrar {
}
},
registerDiagnosticBasedProcessing<KtTypeProjection>(Errors.REDUNDANT_PROJECTION) { _, diagnostic ->
val fix = RemoveModifierFix.createRemoveProjectionFactory(true).createActions(diagnostic).single() as RemoveModifierFix
fix.invoke()
},
registerDiagnosticBasedProcessing<KtModifierListOwner>(Errors.VIRTUAL_MEMBER_HIDDEN) { element, diagnostic ->
val action = AddModifierFix
.createFactory(KtTokens.OVERRIDE_KEYWORD)
.createActions(diagnostic)
.singleOrNull() ?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingKtFile)
},
registerDiagnosticBasedProcessing<KtModifierListOwner>(Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS) { _, diagnostic ->
val fix =
RemoveModifierFix
.createRemoveModifierFromListOwnerFactory(KtTokens.OPEN_KEYWORD)
.createActions(diagnostic).single() as RemoveModifierFix
fix.invoke()
},
registerDiagnosticBasedProcessing<KtModifierListOwner>(Errors.NON_FINAL_MEMBER_IN_OBJECT) { _, diagnostic ->
val fix =
RemoveModifierFix
.createRemoveModifierFromListOwnerFactory(KtTokens.OPEN_KEYWORD)
.createActions(diagnostic).single() as RemoveModifierFix
fix.invoke()
},
registerDiagnosticBasedProcessingWithFixFactory(
RemoveModifierFix.createRemoveProjectionFactory(true),
Errors.REDUNDANT_PROJECTION
),
registerDiagnosticBasedProcessingWithFixFactory(
AddModifierFix.createFactory(KtTokens.OVERRIDE_KEYWORD),
Errors.VIRTUAL_MEMBER_HIDDEN
),
registerDiagnosticBasedProcessingWithFixFactory(
RemoveModifierFix.createRemoveModifierFromListOwnerFactory(KtTokens.OPEN_KEYWORD),
Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS, Errors.NON_FINAL_MEMBER_IN_OBJECT
),
registerDiagnosticBasedProcessingFactory(
Errors.VAL_REASSIGNMENT, Errors.CAPTURED_VAL_INITIALIZATION, Errors.CAPTURED_MEMBER_VAL_INITIALIZATION
) { element: KtSimpleNameExpression, _: Diagnostic ->
@@ -469,6 +443,15 @@ object NewJ2KPostProcessingRegistrar {
}
}
private inline fun registerDiagnosticBasedProcessingWithFixFactory(
fixFactory: KotlinIntentionActionsFactory,
vararg diagnosticFactory: DiagnosticFactory<*>
): NewJ2kPostProcessing = registerDiagnosticBasedProcessing(*diagnosticFactory) { element: PsiElement, diagnostic: Diagnostic ->
fixFactory.createActions(diagnostic).singleOrNull()
?.invoke(element.project, null, element.containingFile)
}
private inline fun <reified TElement : PsiElement> registerDiagnosticBasedProcessing(
vararg diagnosticFactory: DiagnosticFactory<*>,