Import reference at offset uses existing import fix (KT-23235)
If we have a valid autoimport fix at given offset, don't recalculate variants; use existing ones
This commit is contained in:
@@ -140,6 +140,10 @@ class KotlinAddImportAction internal constructor(
|
||||
return true
|
||||
}
|
||||
|
||||
fun isUnambiguous(): Boolean {
|
||||
return variants.size == 1
|
||||
}
|
||||
|
||||
override fun execute(): Boolean {
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
if (!element.isValid) return false
|
||||
|
||||
@@ -127,9 +127,9 @@ internal abstract class ImportFixBase<T : KtExpression> protected constructor(
|
||||
|
||||
override fun startInWriteAction() = true
|
||||
|
||||
private fun isOutdated() = modificationCountOnCreate != PsiModificationTracker.SERVICE.getInstance(project).modificationCount
|
||||
fun isOutdated() = modificationCountOnCreate != PsiModificationTracker.SERVICE.getInstance(project).modificationCount
|
||||
|
||||
protected open fun createAction(project: Project, editor: Editor, element: KtExpression): KotlinAddImportAction {
|
||||
open fun createAction(project: Project, editor: Editor, element: KtExpression): KotlinAddImportAction {
|
||||
return createSingleImportAction(project, editor, element, suggestions)
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.quickfix
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightSettings
|
||||
import com.intellij.codeInsight.daemon.ReferenceImporter
|
||||
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerEx
|
||||
import com.intellij.codeInsight.daemon.impl.DaemonListeners
|
||||
import com.intellij.openapi.command.CommandProcessor
|
||||
import com.intellij.openapi.editor.Editor
|
||||
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
|
||||
import org.jetbrains.kotlin.idea.core.targetDescriptors
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
||||
@@ -45,9 +47,31 @@ class KotlinReferenceImporter : ReferenceImporter {
|
||||
|
||||
val nameExpression = file.findElementAt(offset)?.parent as? KtSimpleNameExpression ?: return false
|
||||
|
||||
val importFix: ImportFixBase<out KtExpression>? = findImportFixAt(editor, file, offset)
|
||||
if (importFix != null && !importFix.isOutdated()) {
|
||||
val addImportAction = importFix.createAction(file.project, editor, nameExpression)
|
||||
if (addImportAction.isUnambiguous()) {
|
||||
addImportAction.execute()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
return nameExpression.autoImport(editor, file)
|
||||
}
|
||||
|
||||
private fun findImportFixAt(
|
||||
editor: Editor,
|
||||
file: KtFile,
|
||||
offset: Int
|
||||
): ImportFixBase<out KtExpression>? {
|
||||
var importFix: ImportFixBase<out KtExpression>? = null
|
||||
DaemonCodeAnalyzerEx.processHighlights(editor.document, file.project, null, offset, offset) { info ->
|
||||
importFix = info.quickFixActionRanges.map { it.first.action }.filterIsInstance<ImportFixBase<*>>().firstOrNull()
|
||||
importFix == null
|
||||
}
|
||||
return importFix
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
// TODO: use in table cell
|
||||
|
||||
Reference in New Issue
Block a user