From a5306d9e4bb23abed45c01e0ef4579f4ad3f016c Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 12 Aug 2015 16:02:41 +0300 Subject: [PATCH] Minor optimization --- .../kotlin/idea/j2k/J2kPostProcessings.kt | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt index ab6c3028f2b..e4540f32bf6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessings.kt @@ -76,13 +76,17 @@ object J2KPostProcessingRegistrar { exclExclExpr.replace(exclExclExpr.baseExpression!!) } - registerDiagnosticBasedProcessing(Errors.VAL_REASSIGNMENT) { element, diagnostic -> - val property = element.mainReference.resolve() as? JetProperty - if (property != null && !property.isVar) { - val factory = JetPsiFactory(element.project) - property.valOrVarKeyword.replace(factory.createVarKeyword()) - } - } + registerDiagnosticBasedProcessingFactory( + Errors.VAL_REASSIGNMENT, + fun (element: JetSimpleNameExpression, diagnostic: Diagnostic): (() -> Unit)? { + val property = element.mainReference.resolve() as? JetProperty ?: return null + return { + if (!property.isVar) { + property.valOrVarKeyword.replace(JetPsiFactory(element.project).createVarKeyword()) + } + } + } + ) } private inline fun > registerIntentionBasedProcessing( @@ -102,12 +106,19 @@ object J2KPostProcessingRegistrar { private inline fun registerDiagnosticBasedProcessing( diagnosticFactory: DiagnosticFactory<*>, inlineOptions(InlineOption.ONLY_LOCAL_RETURN) fix: (TElement, Diagnostic) -> Unit + ) { + registerDiagnosticBasedProcessingFactory(diagnosticFactory) { element: TElement, diagnostic: Diagnostic -> { fix(element, diagnostic) } } + } + + private inline fun registerDiagnosticBasedProcessingFactory( + diagnosticFactory: DiagnosticFactory<*>, + inlineOptions(InlineOption.ONLY_LOCAL_RETURN) fixFactory: (TElement, Diagnostic) -> (() -> Unit)? ) { _processings.add(object : J2kPostProcessing { override fun createAction(element: JetElement, diagnostics: Diagnostics): (() -> Unit)? { if (!javaClass().isInstance(element)) return null val diagnostic = diagnostics.forElement(element).firstOrNull { it.factory == diagnosticFactory } ?: return null - return { fix(element as TElement, diagnostic) } + return fixFactory(element as TElement, diagnostic) } }) }