From f824d3cd372d3b79048827082e12b2bfe389c77e Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 6 Aug 2013 19:40:18 +0400 Subject: [PATCH] remembering last injected language --- .../inject/InjectLanguageAction.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java index 341b8f1528d6..90fa8291b03b 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java @@ -18,6 +18,7 @@ package org.intellij.plugins.intelliLang.inject; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInsight.hint.HintManager; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.injected.editor.EditorWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; @@ -25,7 +26,9 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.PopupChooserBuilder; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; @@ -43,6 +46,7 @@ import com.intellij.util.FileContentUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.Processor; +import com.intellij.util.containers.ContainerUtil; import org.intellij.plugins.intelliLang.Configuration; import com.intellij.psi.injection.Injectable; import org.intellij.plugins.intelliLang.references.InjectedReferencesContributor; @@ -59,6 +63,7 @@ import java.util.List; public class InjectLanguageAction implements IntentionAction { @NonNls private static final String INJECT_LANGUAGE_FAMILY = "Inject Language/Reference"; + public static final String LAST_INJECTED_LANGUAGE = "LAST_INJECTED_LANGUAGE"; public static List getAllInjectables() { Language[] languages = InjectedLanguage.getAvailableLanguages(); @@ -161,17 +166,29 @@ public class InjectLanguageAction implements IntentionAction { } } }); - new PopupChooserBuilder(list).setItemChoosenCallback(new Runnable() { + JBPopup popup = new PopupChooserBuilder(list).setItemChoosenCallback(new Runnable() { public void run() { - onChosen.process((Injectable)list.getSelectedValue()); + Injectable value = (Injectable)list.getSelectedValue(); + onChosen.process(value); + PropertiesComponent.getInstance().setValue(LAST_INJECTED_LANGUAGE, value.getId()); } }).setFilteringEnabled(new Function() { @Override public String fun(Object language) { return ((Injectable)language).getDisplayName(); } - }) - .createPopup().showInBestPositionFor(editor); + }).createPopup(); + final String lastInjected = PropertiesComponent.getInstance().getValue(LAST_INJECTED_LANGUAGE); + if (lastInjected != null) { + Injectable injectable = ContainerUtil.find(injectables, new Condition() { + @Override + public boolean value(Injectable injectable) { + return lastInjected.equals(injectable.getId()); + } + }); + list.setSelectedValue(injectable, true); + } + popup.showInBestPositionFor(editor); return true; }