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) action.invoke(element.project, null, element.containingFile)
}, },
registerDiagnosticBasedProcessing(Errors.SMARTCAST_IMPOSSIBLE) { element: PsiElement, diagnostic -> registerDiagnosticBasedProcessingWithFixFactory(MissingIteratorExclExclFixFactory, Errors.ITERATOR_ON_NULLABLE),
val action = registerDiagnosticBasedProcessingWithFixFactory(SmartCastImpossibleExclExclFixFactory, Errors.SMARTCAST_IMPOSSIBLE),
SmartCastImpossibleExclExclFixFactory.createActions(diagnostic).singleOrNull()
?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingFile)
},
registerDiagnosticBasedProcessing(Errors.TYPE_MISMATCH) { element: PsiElement, diagnostic -> registerDiagnosticBasedProcessing(Errors.TYPE_MISMATCH) { element: PsiElement, diagnostic ->
val diagnosticWithParameters = diagnostic as? DiagnosticWithParameters2<KtExpression, KotlinType, KotlinType> val diagnosticWithParameters = diagnostic as? DiagnosticWithParameters2<KtExpression, KotlinType, KotlinType>
?: return@registerDiagnosticBasedProcessing ?: return@registerDiagnosticBasedProcessing
@@ -256,19 +251,14 @@ object NewJ2KPostProcessingRegistrar {
} }
}, },
registerDiagnosticBasedProcessing(Errors.CAST_NEVER_SUCCEEDS) { element: KtSimpleNameExpression, diagnostic -> registerDiagnosticBasedProcessingWithFixFactory(
val action = ReplacePrimitiveCastWithNumberConversionFix.Factory,
ReplacePrimitiveCastWithNumberConversionFix.createActionsForAllProblems(listOf(diagnostic)).singleOrNull() Errors.CAST_NEVER_SUCCEEDS
?: return@registerDiagnosticBasedProcessing ),
action.invoke(element.project, null, element.containingKtFile) registerDiagnosticBasedProcessingWithFixFactory(
}, ChangeCallableReturnTypeFix.ReturnTypeMismatchOnOverrideFactory,
registerDiagnosticBasedProcessing(Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE) { element: KtNamedDeclaration, diagnostic -> Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE
val action = ),
ChangeCallableReturnTypeFix.ReturnTypeMismatchOnOverrideFactory
.createActionsForAllProblems(listOf(diagnostic)).singleOrNull()
?: return@registerDiagnosticBasedProcessing
action.invoke(element.project, null, element.containingKtFile)
},
RemoveRedundantTypeQualifierProcessing(), RemoveRedundantTypeQualifierProcessing(),
RemoveRedundantExpressionQualifierProcessing(), RemoveRedundantExpressionQualifierProcessing(),
@@ -287,34 +277,18 @@ object NewJ2KPostProcessingRegistrar {
} }
}, },
registerDiagnosticBasedProcessing<KtTypeProjection>(Errors.REDUNDANT_PROJECTION) { _, diagnostic -> registerDiagnosticBasedProcessingWithFixFactory(
val fix = RemoveModifierFix.createRemoveProjectionFactory(true).createActions(diagnostic).single() as RemoveModifierFix RemoveModifierFix.createRemoveProjectionFactory(true),
fix.invoke() Errors.REDUNDANT_PROJECTION
}, ),
registerDiagnosticBasedProcessingWithFixFactory(
registerDiagnosticBasedProcessing<KtModifierListOwner>(Errors.VIRTUAL_MEMBER_HIDDEN) { element, diagnostic -> AddModifierFix.createFactory(KtTokens.OVERRIDE_KEYWORD),
val action = AddModifierFix Errors.VIRTUAL_MEMBER_HIDDEN
.createFactory(KtTokens.OVERRIDE_KEYWORD) ),
.createActions(diagnostic) registerDiagnosticBasedProcessingWithFixFactory(
.singleOrNull() ?: return@registerDiagnosticBasedProcessing RemoveModifierFix.createRemoveModifierFromListOwnerFactory(KtTokens.OPEN_KEYWORD),
action.invoke(element.project, null, element.containingKtFile) Errors.NON_FINAL_MEMBER_IN_FINAL_CLASS, Errors.NON_FINAL_MEMBER_IN_OBJECT
}, ),
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()
},
registerDiagnosticBasedProcessingFactory( registerDiagnosticBasedProcessingFactory(
Errors.VAL_REASSIGNMENT, Errors.CAPTURED_VAL_INITIALIZATION, Errors.CAPTURED_MEMBER_VAL_INITIALIZATION Errors.VAL_REASSIGNMENT, Errors.CAPTURED_VAL_INITIALIZATION, Errors.CAPTURED_MEMBER_VAL_INITIALIZATION
) { element: KtSimpleNameExpression, _: Diagnostic -> ) { 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( private inline fun <reified TElement : PsiElement> registerDiagnosticBasedProcessing(
vararg diagnosticFactory: DiagnosticFactory<*>, vararg diagnosticFactory: DiagnosticFactory<*>,