From c6b3aa4cd6d854ec3b0d7c3a36d7b250a7bb28eb Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 8 Sep 2011 18:34:06 +0400 Subject: [PATCH] Complete system property names in "VM option" field in Grails Run Target Dialog. --- .../util/TextFieldCompletionProvider.java | 4 +++ .../groovy/mvc/MvcRunTargetDialog.form | 14 +++++------ .../groovy/mvc/MvcRunTargetDialog.java | 18 ++++++++++++- .../util/MvcTargetDialogCompletionUtils.java | 25 +++++++++++++------ 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/TextFieldCompletionProvider.java b/platform/lang-impl/src/com/intellij/util/TextFieldCompletionProvider.java index 74e55e234807..5cd27a8189e4 100644 --- a/platform/lang-impl/src/com/intellij/util/TextFieldCompletionProvider.java +++ b/platform/lang-impl/src/com/intellij/util/TextFieldCompletionProvider.java @@ -46,4 +46,8 @@ public abstract class TextFieldCompletionProvider { } protected abstract void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result); + + public EditorTextField createEditor(Project project) { + return new EditorTextField(createDocument(project), project, PlainTextLanguage.INSTANCE.getAssociatedFileType()); + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form index 9049fa8c69f5..3c19d370efe7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.form @@ -61,14 +61,6 @@ - - - - - - - - @@ -83,6 +75,12 @@ + + + + + + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java index eb10523504f7..b8e2a57df1fd 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcRunTargetDialog.java @@ -44,7 +44,7 @@ public class MvcRunTargetDialog extends DialogWrapper { private JPanel contentPane; private JLabel myTargetLabel; private JPanel myFakePanel; - private JTextField myVmOptionsField; + private EditorTextField myVmOptionsField; private JComboBox myModuleBox; private JLabel myModuleLabel; private JLabel myVmOptionLabel; @@ -140,6 +140,22 @@ public class MvcRunTargetDialog extends DialogWrapper { myFakePanel = new JPanel(new BorderLayout()); myFakePanel.add(myTargetField, BorderLayout.CENTER); + TextFieldCompletionProvider vmOptionCompletionProvider = new TextFieldCompletionProvider() { + @NotNull + @Override + protected String getPrefix(@NotNull String currentTextPrefix) { + return MvcRunTargetDialog.getPrefix(currentTextPrefix); + } + + @Override + protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) { + if (prefix.endsWith("-D")) { + result.addAllElements(MvcTargetDialogCompletionUtils.getSystemPropertiesVariants()); + } + } + }; + myVmOptionsField = vmOptionCompletionProvider.createEditor(myModule.getProject()); + new TextFieldCompletionProvider() { @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/MvcTargetDialogCompletionUtils.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/MvcTargetDialogCompletionUtils.java index 60fd18a5e19c..67406cfc0b37 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/MvcTargetDialogCompletionUtils.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/util/MvcTargetDialogCompletionUtils.java @@ -53,20 +53,31 @@ public class MvcTargetDialogCompletionUtils { "grails.testing.functional.baseUrl", "grails.compile.artefacts.closures.convert" }; + private static List SYSTEM_PROPERTIES_VARIANTS; + private MvcTargetDialogCompletionUtils() { } - public static Collection collectVariants(@NotNull Module module, @NotNull String text, int offset, @NotNull String prefix) { - List res = new ArrayList(); - - if (prefix.startsWith("-D")) { - for (String property : SYSTEM_PROPERTIES) { - res.add(TailTypeDecorator.withTail(LookupElementBuilder.create("-D" + property), MyTailTypeEQ.INSTANCE)); + public static List getSystemPropertiesVariants() { + if (SYSTEM_PROPERTIES_VARIANTS == null) { + LookupElement[] res = new LookupElement[SYSTEM_PROPERTIES.length]; + for (int i = 0; i < res.length; i++) { + res[i] = TailTypeDecorator.withTail(LookupElementBuilder.create("-D" + SYSTEM_PROPERTIES[i]), MyTailTypeEQ.INSTANCE); } - return res; + SYSTEM_PROPERTIES_VARIANTS = Arrays.asList(res); } + return SYSTEM_PROPERTIES_VARIANTS; + } + + public static Collection collectVariants(@NotNull Module module, @NotNull String text, int offset, @NotNull String prefix) { + if (prefix.startsWith("-D")) { + return getSystemPropertiesVariants(); + } + + List res = new ArrayList(); + if (text.substring(0, offset).matches("\\s*(?:(:?-\\S+|dev|prod|test)\\s+)*\\S*")) { // Complete command name because command name is not typed. for (String completionVariant : getAllTargetNames(module)) {