New J2K: do not apply diagnostic based inspections if target element is not in the converting range

This commit is contained in:
Ilya Kirillov
2019-06-20 13:41:03 +03:00
parent 1b681a7dd6
commit 3beef2b22e
2 changed files with 11 additions and 3 deletions
@@ -41,8 +41,11 @@ class DiagnosticBasedPostProcessingGroup(diagnosticBasedProcessings: List<Diagno
CommandProcessor.getInstance().runUndoTransparentAction {
val diagnostics = runWriteAction { analyzeFileRange(file, rangeMarker) }
for (diagnostic in diagnostics.all()) {
diagnosticToFix[diagnostic.factory]?.forEach { fix ->
runWriteAction { fix(diagnostic) }
val range = rangeMarker?.range ?: file.textRange
if (diagnostic.psiElement.isInRange(range)) {
diagnosticToFix[diagnostic.factory]?.forEach { fix ->
runWriteAction { fix(diagnostic) }
}
}
}
}
@@ -5,11 +5,13 @@
package org.jetbrains.kotlin.nj2k.postProcessing
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import com.intellij.psi.search.LocalSearchScope
import com.intellij.psi.search.searches.ReferencesSearch
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.core.util.range
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.*
@@ -74,4 +76,7 @@ fun KtElement.hasUsagesOutsideOf(inElement: KtElement, outsideElements: List<KtE
}
inline fun <reified T : PsiElement> List<PsiElement>.descendantsOfType(): List<T> =
flatMap { it.collectDescendantsOfType() }
flatMap { it.collectDescendantsOfType() }
fun PsiElement.isInRange(outerRange: TextRange) =
outerRange.contains(range)