From ca418c727e6256d3be08fe7e99e14d05ec26451d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 7 Aug 2017 13:01:42 +0300 Subject: [PATCH] KT-19278 Optimize imports on the fly should not remove incomplete import while it's being typed #KT-19278 Fixed --- .../idea/inspections/KotlinUnusedImportInspection.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt index d178fa26549..c75b7f65a01 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt @@ -37,11 +37,14 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.util.ProgressWrapper import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile +import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.util.PsiUtilBase import com.intellij.util.DocumentUtil import org.jetbrains.kotlin.idea.core.targetDescriptors +import org.jetbrains.kotlin.idea.editor.fixers.end import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer import org.jetbrains.kotlin.idea.imports.OptimizedImportsBuilder import org.jetbrains.kotlin.idea.imports.importableFqName @@ -50,6 +53,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.resolve.ImportPath import java.util.* @@ -180,8 +184,11 @@ class KotlinUnusedImportInspection : AbstractKotlinInspection() { // if we stand inside import statements, do not optimize val importList = file.importList ?: return false - if (importList) - val importsRange = importList?.textRange ?: return false + val leftSpace = importList.siblings(forward = false, withItself = false).firstOrNull() as? PsiWhiteSpace + val rightSpace = importList.siblings(forward = true, withItself = false).firstOrNull() as? PsiWhiteSpace + val left = leftSpace ?: importList + val right = rightSpace ?: importList + val importsRange = TextRange(left.textRange.startOffset, right.textRange.endOffset) if (importsRange.containsOffset(editor.caretModel.offset)) return false val codeAnalyzer = DaemonCodeAnalyzerEx.getInstanceEx(project)