From 6c1e2cc19649152d9c7d6df4393c065293086ecd Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sun, 16 Feb 2020 15:30:24 +0300 Subject: [PATCH] New J2K: disable additional post-formatting for J2K As there is a formatting processing, it's not needed but takes some time --- .../nj2k/postProcessing/J2kPostProcessor.kt | 19 ++++++++++++++++++- .../inspectionLikePostProcessings.kt | 2 ++ .../nj2k/postProcessing/postProcessings.kt | 13 +++++++++++-- ...rtGettersAndSettersToPropertyProcessing.kt | 5 +++++ .../processings/ShortenReferenceProcessing.kt | 1 + .../processings/inspeсtionLikeProcessings.kt | 12 +++++++++++- 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt index acde025976b..dab7e8c6755 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/J2kPostProcessor.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.postProcessing import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException +import com.intellij.psi.impl.source.PostprocessReformattingAspect import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument @@ -30,6 +31,7 @@ import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.postProcessing.processings.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.parents +import sun.java2d.loops.FillRect class NewJ2kPostProcessor : PostProcessor { @Suppress("PrivatePropertyName") @@ -50,11 +52,12 @@ class NewJ2kPostProcessor : PostProcessor { converterContext: ConverterContext?, onPhaseChanged: ((Int, String) -> Unit)? ) { + if (converterContext !is NewJ2kConverterContext) error("Invalid converter context for new J2K") for ((i, group) in processings.withIndex()) { onPhaseChanged?.invoke(i + 1, group.description) for (processing in group.processings) { try { - processing.runProcessing(target, converterContext as NewJ2kConverterContext) + processing.runProcessingConsideringOptions(target, converterContext) } catch (e: ProcessCanceledException) { throw e } catch (t: Throwable) { @@ -66,6 +69,20 @@ class NewJ2kPostProcessor : PostProcessor { } } + private fun GeneralPostProcessing.runProcessingConsideringOptions( + target: JKPostProcessingTarget, + converterContext: NewJ2kConverterContext + ) { + + if (options.disablePostprocessingFormatting) { + PostprocessReformattingAspect.getInstance(converterContext.project).disablePostprocessFormattingInside { + runProcessing(target, converterContext) + } + } else { + runProcessing(target, converterContext) + } + } + private fun commitFile(file: KtFile) { runUndoTransparentActionInEdt(inWriteAction = true) { file.commitAndUnblockDocument() diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt index 212ff09247f..93320d9ee7e 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/inspectionLikePostProcessings.kt @@ -119,6 +119,8 @@ abstract class InspectionLikeProcessing { // Running it in outer write action may lead to UI freezes // So we let that post-processings to handle write actions by themselves open val writeActionNeeded = true + + val processingOptions: PostProcessingOptions = PostProcessingOptions.DEFAULT } abstract class InspectionLikeProcessingForElement(private val classTag: Class) : InspectionLikeProcessing() { diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/postProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/postProcessings.kt index de75de090e5..e9066c585f2 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/postProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/postProcessings.kt @@ -16,9 +16,20 @@ import org.jetbrains.kotlin.psi.KtFile interface GeneralPostProcessing { + val options: PostProcessingOptions + get() = PostProcessingOptions.DEFAULT + fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext) } +data class PostProcessingOptions( + val disablePostprocessingFormatting: Boolean = true +) { + companion object { + val DEFAULT = PostProcessingOptions() + } +} + abstract class FileBasedPostProcessing : GeneralPostProcessing { final override fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext) = when (target) { @@ -41,8 +52,6 @@ abstract class ElementsBasedPostProcessing : GeneralPostProcessing { abstract fun runProcessing(elements: List, converterContext: NewJ2kConverterContext) } -interface ProcessingGroup : GeneralPostProcessing - data class NamedPostProcessingGroup( val description: String, val processings: List diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt index 75ffd630525..755ca3693db 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt @@ -55,6 +55,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.mapToIndex class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing() { + override val options: PostProcessingOptions = + PostProcessingOptions( + disablePostprocessingFormatting = false // without it comment saver will make the file invalid :( + ) + override fun runProcessing(elements: List, converterContext: NewJ2kConverterContext) { val ktElements = elements.filterIsInstance() val resolutionFacade = runReadAction { diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ShortenReferenceProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ShortenReferenceProcessing.kt index c740c222c45..a7fe7ffc9de 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ShortenReferenceProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ShortenReferenceProcessing.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.nj2k.JKImportStorage import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext import org.jetbrains.kotlin.nj2k.postProcessing.FileBasedPostProcessing import org.jetbrains.kotlin.nj2k.postProcessing.GeneralPostProcessing +import org.jetbrains.kotlin.nj2k.postProcessing.PostProcessingOptions import org.jetbrains.kotlin.nj2k.postProcessing.runUndoTransparentActionInEdt import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtQualifiedExpression diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt index 07e3414d1b0..4f0c7cfdc90 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/inspeсtionLikeProcessings.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.j2k.ConverterSettings +import org.jetbrains.kotlin.j2k.isInSingleLine import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.nj2k.postProcessing.InspectionLikeProcessingForElement @@ -43,6 +44,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs class RemoveExplicitPropertyTypeProcessing : InspectionLikeProcessingForElement(KtProperty::class.java) { override fun isApplicableTo(element: KtProperty, settings: ConverterSettings?): Boolean { + if (element.typeReference == null) return false val needFieldTypes = settings?.specifyFieldTypeByDefault == true val needLocalVariablesTypes = settings?.specifyLocalVariableTypeByDefault == true @@ -56,7 +58,15 @@ class RemoveExplicitPropertyTypeProcessing : InspectionLikeProcessingForElement< } override fun apply(element: KtProperty) { - element.typeReference = null + val typeReference = element.typeReference ?: return + element.colon?.let { colon -> + val followingWhiteSpace = colon.nextSibling?.takeIf { following -> + following is PsiWhiteSpace && following.isInSingleLine() + } + followingWhiteSpace?.delete() + colon.delete() + } + typeReference.delete() } }