diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/diagnosticBasedPostProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/diagnosticBasedPostProcessing.kt index 025a900a8d8..86d7f934bbc 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/diagnosticBasedPostProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/diagnosticBasedPostProcessing.kt @@ -50,9 +50,11 @@ class DiagnosticBasedPostProcessingGroup(diagnosticBasedProcessings: List() + val elements = when { + rangeMarker == null -> listOf(file) + rangeMarker.isValid -> file.elementsInRange(rangeMarker.range!!).filterIsInstance() + else -> emptyList() + } return if (elements.isNotEmpty()) file.getResolutionFacade().analyzeWithAllCompilerChecks(elements).bindingContext.diagnostics 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 85ef964a80e..a1c323eca51 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 @@ -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) } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt index 14925c74a0f..f3c6536e5d5 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/processings.kt @@ -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