New J2K: correctly handle empty range marker in post processings

This commit is contained in:
Ilya Kirillov
2019-06-20 12:34:16 +03:00
parent d7f28d9e19
commit 1b681a7dd6
3 changed files with 17 additions and 10 deletions
@@ -50,9 +50,11 @@ class DiagnosticBasedPostProcessingGroup(diagnosticBasedProcessings: List<Diagno
}
private fun analyzeFileRange(file: KtFile, rangeMarker: RangeMarker?): Diagnostics {
val elements =
if (rangeMarker == null) listOf(file)
else file.elementsInRange(rangeMarker.range!!).filterIsInstance<KtElement>()
val elements = when {
rangeMarker == null -> listOf(file)
rangeMarker.isValid -> file.elementsInRange(rangeMarker.range!!).filterIsInstance<KtElement>()
else -> emptyList()
}
return if (elements.isNotEmpty())
file.getResolutionFacade().analyzeWithAllCompilerChecks(elements).bindingContext.diagnostics
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.nj2k.postProcessing
import com.intellij.openapi.command.CommandProcessor
import com.intellij.openapi.editor.RangeMarker
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import kotlinx.coroutines.withContext
import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.idea.core.util.range
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.nj2k.NewJ2kConverterContext
import org.jetbrains.kotlin.psi.KtFile
@@ -39,7 +39,8 @@ abstract class ElementsBasedPostProcessing() : SimplePostProcessing() {
final override fun applySimpleProcessing(file: KtFile, rangeMarker: RangeMarker?, converterContext: NewJ2kConverterContext) {
val elements =
rangeMarker?.let { marker ->
file.elementsInRange(TextRange(marker.startOffset, marker.endOffset))
val range = marker.range ?: return@let emptyList()
file.elementsInRange(range)
} ?: listOf(file)
runProcessing(elements, converterContext)
}
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.nj2k.postProcessing.processings
import com.intellij.codeInsight.actions.OptimizeImportsProcessor
import com.intellij.openapi.util.TextRange
import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.util.range
import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.AnalysisScope
import org.jetbrains.kotlin.nj2k.nullabilityAnalysis.NullabilityAnalysisFacade
@@ -47,7 +47,9 @@ val nullabilityProcessing =
val shortenReferencesProcessing =
postProcessing { file, rangeMarker, _ ->
if (rangeMarker != null) {
ShortenReferences.DEFAULT.process(file, rangeMarker.startOffset, rangeMarker.endOffset)
if (rangeMarker.isValid) {
ShortenReferences.DEFAULT.process(file, rangeMarker.startOffset, rangeMarker.endOffset)
}
} else {
ShortenReferences.DEFAULT.process(file)
}
@@ -55,9 +57,11 @@ val shortenReferencesProcessing =
val optimizeImportsProcessing =
postProcessing { file, rangeMarker, _ ->
val elements = if (rangeMarker != null) {
file.elementsInRange(TextRange(rangeMarker.startOffset, rangeMarker.endOffset))
} else file.children.asList()
val elements = when {
rangeMarker != null && rangeMarker.isValid -> file.elementsInRange(rangeMarker.range!!)
rangeMarker != null && !rangeMarker.isValid -> emptyList()
else -> file.children.asList()
}
val needFormat = elements.any { element ->
element is KtElement
&& element !is KtImportDirective