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.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()
|
||||
|
||||
+2
@@ -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<E : PsiElement>(private val classTag: Class<E>) : InspectionLikeProcessing() {
|
||||
|
||||
@@ -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<PsiElement>, converterContext: NewJ2kConverterContext)
|
||||
}
|
||||
|
||||
interface ProcessingGroup : GeneralPostProcessing
|
||||
|
||||
data class NamedPostProcessingGroup(
|
||||
val description: String,
|
||||
val processings: List<GeneralPostProcessing>
|
||||
|
||||
+5
@@ -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<PsiElement>, converterContext: NewJ2kConverterContext) {
|
||||
val ktElements = elements.filterIsInstance<KtElement>()
|
||||
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.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
|
||||
|
||||
+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.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>(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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user