New J2K: disable additional post-formatting for J2K
As there is a formatting processing, it's not needed but takes some time
This commit is contained in:
+18
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.nj2k.postProcessing
|
|||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
|
import com.intellij.psi.impl.source.PostprocessReformattingAspect
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
|
||||||
import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument
|
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.nj2k.postProcessing.processings.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
|
import sun.java2d.loops.FillRect
|
||||||
|
|
||||||
class NewJ2kPostProcessor : PostProcessor {
|
class NewJ2kPostProcessor : PostProcessor {
|
||||||
@Suppress("PrivatePropertyName")
|
@Suppress("PrivatePropertyName")
|
||||||
@@ -50,11 +52,12 @@ class NewJ2kPostProcessor : PostProcessor {
|
|||||||
converterContext: ConverterContext?,
|
converterContext: ConverterContext?,
|
||||||
onPhaseChanged: ((Int, String) -> Unit)?
|
onPhaseChanged: ((Int, String) -> Unit)?
|
||||||
) {
|
) {
|
||||||
|
if (converterContext !is NewJ2kConverterContext) error("Invalid converter context for new J2K")
|
||||||
for ((i, group) in processings.withIndex()) {
|
for ((i, group) in processings.withIndex()) {
|
||||||
onPhaseChanged?.invoke(i + 1, group.description)
|
onPhaseChanged?.invoke(i + 1, group.description)
|
||||||
for (processing in group.processings) {
|
for (processing in group.processings) {
|
||||||
try {
|
try {
|
||||||
processing.runProcessing(target, converterContext as NewJ2kConverterContext)
|
processing.runProcessingConsideringOptions(target, converterContext)
|
||||||
} catch (e: ProcessCanceledException) {
|
} catch (e: ProcessCanceledException) {
|
||||||
throw e
|
throw e
|
||||||
} catch (t: Throwable) {
|
} 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) {
|
private fun commitFile(file: KtFile) {
|
||||||
runUndoTransparentActionInEdt(inWriteAction = true) {
|
runUndoTransparentActionInEdt(inWriteAction = true) {
|
||||||
file.commitAndUnblockDocument()
|
file.commitAndUnblockDocument()
|
||||||
|
|||||||
+2
@@ -119,6 +119,8 @@ abstract class InspectionLikeProcessing {
|
|||||||
// Running it in outer write action may lead to UI freezes
|
// Running it in outer write action may lead to UI freezes
|
||||||
// So we let that post-processings to handle write actions by themselves
|
// So we let that post-processings to handle write actions by themselves
|
||||||
open val writeActionNeeded = true
|
open val writeActionNeeded = true
|
||||||
|
|
||||||
|
val processingOptions: PostProcessingOptions = PostProcessingOptions.DEFAULT
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class InspectionLikeProcessingForElement<E : PsiElement>(private val classTag: Class<E>) : InspectionLikeProcessing() {
|
abstract class InspectionLikeProcessingForElement<E : PsiElement>(private val classTag: Class<E>) : InspectionLikeProcessing() {
|
||||||
|
|||||||
@@ -16,9 +16,20 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
|
|
||||||
|
|
||||||
interface GeneralPostProcessing {
|
interface GeneralPostProcessing {
|
||||||
|
val options: PostProcessingOptions
|
||||||
|
get() = PostProcessingOptions.DEFAULT
|
||||||
|
|
||||||
fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext)
|
fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class PostProcessingOptions(
|
||||||
|
val disablePostprocessingFormatting: Boolean = true
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
val DEFAULT = PostProcessingOptions()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
abstract class FileBasedPostProcessing : GeneralPostProcessing {
|
abstract class FileBasedPostProcessing : GeneralPostProcessing {
|
||||||
final override fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext) = when (target) {
|
final override fun runProcessing(target: JKPostProcessingTarget, converterContext: NewJ2kConverterContext) = when (target) {
|
||||||
@@ -41,8 +52,6 @@ abstract class ElementsBasedPostProcessing : GeneralPostProcessing {
|
|||||||
abstract fun runProcessing(elements: List<PsiElement>, converterContext: NewJ2kConverterContext)
|
abstract fun runProcessing(elements: List<PsiElement>, converterContext: NewJ2kConverterContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ProcessingGroup : GeneralPostProcessing
|
|
||||||
|
|
||||||
data class NamedPostProcessingGroup(
|
data class NamedPostProcessingGroup(
|
||||||
val description: String,
|
val description: String,
|
||||||
val processings: List<GeneralPostProcessing>
|
val processings: List<GeneralPostProcessing>
|
||||||
|
|||||||
+5
@@ -55,6 +55,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
import org.jetbrains.kotlin.utils.mapToIndex
|
import org.jetbrains.kotlin.utils.mapToIndex
|
||||||
|
|
||||||
class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing() {
|
class ConvertGettersAndSettersToPropertyProcessing : ElementsBasedPostProcessing() {
|
||||||
|
override val options: PostProcessingOptions =
|
||||||
|
PostProcessingOptions(
|
||||||
|
disablePostprocessingFormatting = false // without it comment saver will make the file invalid :(
|
||||||
|
)
|
||||||
|
|
||||||
override fun runProcessing(elements: List<PsiElement>, converterContext: NewJ2kConverterContext) {
|
override fun runProcessing(elements: List<PsiElement>, converterContext: NewJ2kConverterContext) {
|
||||||
val ktElements = elements.filterIsInstance<KtElement>()
|
val ktElements = elements.filterIsInstance<KtElement>()
|
||||||
val resolutionFacade = runReadAction {
|
val resolutionFacade = runReadAction {
|
||||||
|
|||||||
+1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.nj2k.JKImportStorage
|
|||||||
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
|
||||||
import org.jetbrains.kotlin.nj2k.postProcessing.FileBasedPostProcessing
|
import org.jetbrains.kotlin.nj2k.postProcessing.FileBasedPostProcessing
|
||||||
import org.jetbrains.kotlin.nj2k.postProcessing.GeneralPostProcessing
|
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.nj2k.postProcessing.runUndoTransparentActionInEdt
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtQualifiedExpression
|
import org.jetbrains.kotlin.psi.KtQualifiedExpression
|
||||||
|
|||||||
+11
-1
@@ -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.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
import org.jetbrains.kotlin.j2k.ConverterSettings
|
import org.jetbrains.kotlin.j2k.ConverterSettings
|
||||||
|
import org.jetbrains.kotlin.j2k.isInSingleLine
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.nj2k.postProcessing.InspectionLikeProcessingForElement
|
import org.jetbrains.kotlin.nj2k.postProcessing.InspectionLikeProcessingForElement
|
||||||
@@ -43,6 +44,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
|
|
||||||
class RemoveExplicitPropertyTypeProcessing : InspectionLikeProcessingForElement<KtProperty>(KtProperty::class.java) {
|
class RemoveExplicitPropertyTypeProcessing : InspectionLikeProcessingForElement<KtProperty>(KtProperty::class.java) {
|
||||||
override fun isApplicableTo(element: KtProperty, settings: ConverterSettings?): Boolean {
|
override fun isApplicableTo(element: KtProperty, settings: ConverterSettings?): Boolean {
|
||||||
|
if (element.typeReference == null) return false
|
||||||
val needFieldTypes = settings?.specifyFieldTypeByDefault == true
|
val needFieldTypes = settings?.specifyFieldTypeByDefault == true
|
||||||
val needLocalVariablesTypes = settings?.specifyLocalVariableTypeByDefault == true
|
val needLocalVariablesTypes = settings?.specifyLocalVariableTypeByDefault == true
|
||||||
|
|
||||||
@@ -56,7 +58,15 @@ class RemoveExplicitPropertyTypeProcessing : InspectionLikeProcessingForElement<
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun apply(element: KtProperty) {
|
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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user