KT-7790 Import popup should show the most preferable item in its text

#KT-7790 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-08-20 17:48:51 +03:00
parent 32cecf5a4c
commit adea67b219
3 changed files with 11 additions and 10 deletions
@@ -52,7 +52,7 @@ import static org.jetbrains.kotlin.psi.PsiPackage.JetPsiFactory;
/** /**
* Changes method signature to one of provided signatures. * Changes method signature to one of provided signatures.
* Based on {@link JetAddImportAction} * Based on {@link KotlinAddImportAction}
*/ */
public class JetAddFunctionToClassifierAction implements QuestionAction { public class JetAddFunctionToClassifierAction implements QuestionAction {
private final List<FunctionDescriptor> functionsToAdd; private final List<FunctionDescriptor> functionsToAdd;
@@ -50,7 +50,7 @@ import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
* Automatically adds import directive to the file for resolving reference. * Automatically adds import directive to the file for resolving reference.
* Based on {@link AddImportAction} * Based on {@link AddImportAction}
*/ */
public class JetAddImportAction( public class KotlinAddImportAction(
private val project: Project, private val project: Project,
private val editor: Editor, private val editor: Editor,
private val element: JetSimpleNameExpression, private val element: JetSimpleNameExpression,
@@ -100,6 +100,9 @@ public class JetAddImportAction(
.map { Variant(it.key, it.value) } .map { Variant(it.key, it.value) }
.sortBy { it.priority } .sortBy { it.priority }
public val highestPriorityFqName: FqName
get() = variants.first().fqName
override fun execute(): Boolean { override fun execute(): Boolean {
PsiDocumentManager.getInstance(project).commitAllDocuments() PsiDocumentManager.getInstance(project).commitAllDocuments()
if (!element.isValid()) return false if (!element.isValid()) return false
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.JetBundle import org.jetbrains.kotlin.idea.JetBundle
import org.jetbrains.kotlin.idea.actions.JetAddImportAction import org.jetbrains.kotlin.idea.actions.KotlinAddImportAction
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.getResolveScope import org.jetbrains.kotlin.idea.caches.resolve.getResolveScope
import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
@@ -41,10 +41,9 @@ import org.jetbrains.kotlin.psi.JetPsiUtil
import org.jetbrains.kotlin.psi.JetSimpleNameExpression import org.jetbrains.kotlin.psi.JetSimpleNameExpression
import org.jetbrains.kotlin.psi.psiUtil.isImportDirectiveExpression import org.jetbrains.kotlin.psi.psiUtil.isImportDirectiveExpression
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.CachedValueProperty import org.jetbrains.kotlin.utils.CachedValueProperty
import java.util.ArrayList import java.util.*
/** /**
* Check possibility and perform fix for unresolved references. * Check possibility and perform fix for unresolved references.
@@ -70,10 +69,9 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
if (suggestions.isEmpty()) return false if (suggestions.isEmpty()) return false
if (!ApplicationManager.getApplication()!!.isUnitTestMode()) { if (!ApplicationManager.getApplication()!!.isUnitTestMode()) {
val hintText = ShowAutoImportPass.getMessage(suggestions.size() > 1, DescriptorUtils.getFqNameSafe(suggestions.first()).asString()) val addImportAction = createAction(element.project, editor)
val hintText = ShowAutoImportPass.getMessage(suggestions.size() > 1, addImportAction.highestPriorityFqName.asString())
val project = editor.getProject() ?: return false HintManager.getInstance().showQuestionHint(editor, hintText, element.getTextOffset(), element.getTextRange()!!.getEndOffset(), addImportAction)
HintManager.getInstance().showQuestionHint(editor, hintText, element.getTextOffset(), element.getTextRange()!!.getEndOffset(), createAction(project, editor))
} }
return true return true
@@ -96,7 +94,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
private fun isOutdated() = modificationCountOnCreate != PsiModificationTracker.SERVICE.getInstance(element.getProject()).getModificationCount() private fun isOutdated() = modificationCountOnCreate != PsiModificationTracker.SERVICE.getInstance(element.getProject()).getModificationCount()
private fun createAction(project: Project, editor: Editor) = JetAddImportAction(project, editor, element, suggestions) private fun createAction(project: Project, editor: Editor) = KotlinAddImportAction(project, editor, element, suggestions)
private fun computeSuggestions(element: JetSimpleNameExpression): Collection<DeclarationDescriptor> { private fun computeSuggestions(element: JetSimpleNameExpression): Collection<DeclarationDescriptor> {
if (!element.isValid()) return listOf() if (!element.isValid()) return listOf()