From 44fbf87e45e4aedc3542b950b996920ed4cf4461 Mon Sep 17 00:00:00 2001 From: Gregory Shrago Date: Mon, 16 Nov 2009 21:02:59 +0300 Subject: [PATCH] IDEADEV-41383 Inject language intention: "Add library" dialog is shown under popup --- .../codeInsight/daemon/impl/quickfix/OrderEntryFix.java | 8 +++++--- .../plugins/intelliLang/inject/InjectLanguageAction.java | 8 +++++++- .../inject/java/JavaLanguageInjectionSupport.java | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java index dd8cb3900b95..0e2080057e05 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/OrderEntryFix.java @@ -326,11 +326,11 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { }); } - public static void ensureAnnotationsJarInPath(final Module module, String annotationName) { - if (module == null) return; + public static boolean ensureAnnotationsJarInPath(final Module module, String annotationName) { + if (module == null) return false; final PsiClass psiClass = JavaPsiFacade.getInstance(module.getProject()) .findClass(annotationName, GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module)); - if (psiClass != null) return; + if (psiClass != null) return true; final LocateLibraryDialog dialog = new LocateLibraryDialog( module, PathManager.getLibPath(), "annotations.jar", QuickFixBundle.message("add.library.annotations.description")); @@ -341,6 +341,8 @@ public abstract class OrderEntryFix implements IntentionAction, LocalQuickFix { addJarToRoots(dialog.getResultingLibraryPath(), module, null); } }.execute(); + return true; } + return false; } } 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 693fd2938fac..fd2d1e6f9ece 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.ide.DataManager; import com.intellij.injected.editor.EditorWindow; import com.intellij.lang.Language; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.FileType; @@ -82,6 +83,7 @@ public class InjectLanguageAction implements IntentionAction { assert host != null; doChooseLanguageToInject(new Processor() { public boolean process(final String languageId) { + if (project.isDisposed()) return false; if (defaultFunctionalityWorked(host, languageId)) return false; final Language language = InjectedLanguage.findLanguageById(languageId); try { @@ -146,7 +148,11 @@ public class InjectLanguageAction implements IntentionAction { @Override public PopupStep onChosen(final String selectedValue, boolean finalChoice) { if (finalChoice) { - myFinalStepProcessor.process(selectedValue); + ApplicationManager.getApplication().invokeLater(new Runnable() { + public void run() { + myFinalStepProcessor.process(selectedValue); + } + }); return FINAL_CHOICE; } return new MyPopupStep(myMap, myMap.get(selectedValue), myFinalStepProcessor); diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java index 41d940aff0a2..3164382e6cc5 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java @@ -203,7 +203,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo static boolean doAddLanguageAnnotation(final Project project, final PsiModifierListOwner modifierListOwner, final String languageId) { if (modifierListOwner.getModifierList() == null || !PsiUtil.getLanguageLevel(modifierListOwner).hasEnumKeywordAndAutoboxing()) return false; - OrderEntryFix.ensureAnnotationsJarInPath(ModuleUtil.findModuleForPsiElement(modifierListOwner), AnnotationUtil.LANGUAGE); + if (!OrderEntryFix.ensureAnnotationsJarInPath(ModuleUtil.findModuleForPsiElement(modifierListOwner), AnnotationUtil.LANGUAGE)) return false; new WriteCommandAction(project, modifierListOwner.getContainingFile()) { protected void run(final Result result) throws Throwable { final PsiAnnotation annotation = JavaPsiFacade.getInstance(project).getElementFactory()