diff --git a/java/testFramework/src/com/intellij/codeInsight/completion/CompletionAutoPopupTestCase.groovy b/java/testFramework/src/com/intellij/codeInsight/completion/CompletionAutoPopupTestCase.groovy index ccb0f2d9a609..d36f5061c92f 100644 --- a/java/testFramework/src/com/intellij/codeInsight/completion/CompletionAutoPopupTestCase.groovy +++ b/java/testFramework/src/com/intellij/codeInsight/completion/CompletionAutoPopupTestCase.groovy @@ -22,6 +22,7 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ModalityState import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import com.intellij.util.ui.UIUtil +import com.intellij.codeInsight.CodeInsightSettings /** * @author peter @@ -36,6 +37,7 @@ abstract class CompletionAutoPopupTestCase extends LightCodeInsightFixtureTestCa }) CompletionAutoPopupHandler.ourTestingAutopopup = true + CodeInsightSettings.instance.FOCUS_AUTOPOPUP = CodeInsightSettings.SMART } void superSetUp() { super.setUp() @@ -45,6 +47,7 @@ abstract class CompletionAutoPopupTestCase extends LightCodeInsightFixtureTestCa } @Override protected void tearDown() { + CodeInsightSettings.instance.FOCUS_AUTOPOPUP = CodeInsightSettings.NEVER CompletionAutoPopupHandler.ourTestingAutopopup = false UIUtil.invokeAndWaitIfNeeded(new Runnable(){ @Override diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form b/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form index 2c337a2d1484..505b63066532 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form +++ b/platform/lang-impl/src/com/intellij/application/options/CodeCompletion.form @@ -8,7 +8,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -127,6 +127,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java b/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java index 7b64d9897292..2fb882cd093d 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeCompletionPanel.java @@ -45,12 +45,16 @@ public class CodeCompletionPanel { private JCheckBox myCbShowFullParameterSignatures; private JComboBox myCaseSensitiveCombo; + private JComboBox myFocusLookup; private static final String CASE_SENSITIVE_ALL = ApplicationBundle.message("combobox.autocomplete.casesensitive.all"); private static final String CASE_SENSITIVE_NONE = ApplicationBundle.message("combobox.autocomplete.casesensitive.none"); private static final String CASE_SENSITIVE_FIRST_LETTER = ApplicationBundle.message("combobox.autocomplete.casesensitive.first.letter"); + private static final String[] CASE_VARIANTS = {CASE_SENSITIVE_ALL, CASE_SENSITIVE_NONE, CASE_SENSITIVE_FIRST_LETTER}; + private static final String[] FOCUS_VARIANTS = {"Never", "Smart", "Always"}; public CodeCompletionPanel(){ - myCaseSensitiveCombo.setModel(new DefaultComboBoxModel(new String[]{CASE_SENSITIVE_ALL, CASE_SENSITIVE_NONE, CASE_SENSITIVE_FIRST_LETTER})); + myCaseSensitiveCombo.setModel(new DefaultComboBoxModel(CASE_VARIANTS)); + myFocusLookup.setModel(new DefaultComboBoxModel(FOCUS_VARIANTS)); myCbAutocompletion.addActionListener( @@ -88,9 +92,6 @@ public class CodeCompletionPanel { component.setVisible(OptionsApplicabilityFilter.isApplicable(id)); } - /* - */ - public void reset() { CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); @@ -110,6 +111,8 @@ public class CodeCompletionPanel { } myCaseSensitiveCombo.setSelectedItem(value); + myFocusLookup.setSelectedIndex(Math.min(Math.max(codeInsightSettings.FOCUS_AUTOPOPUP - 1, 0), FOCUS_VARIANTS.length - 1)); + myCbOnCodeCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION); myCbOnSmartTypeCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION); myCbOnClassNameCompletion.setSelected(codeInsightSettings.AUTOCOMPLETE_ON_CLASS_NAME_COMPLETION); @@ -137,6 +140,7 @@ public class CodeCompletionPanel { CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); codeInsightSettings.COMPLETION_CASE_SENSITIVE = getCaseSensitiveValue(); + codeInsightSettings.FOCUS_AUTOPOPUP = getFocusLookupValue(); codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION = myCbOnCodeCompletion.isSelected(); codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION = myCbOnSmartTypeCompletion.isSelected(); @@ -164,6 +168,7 @@ public class CodeCompletionPanel { boolean isModified = false; isModified |= (getCaseSensitiveValue() != codeInsightSettings.COMPLETION_CASE_SENSITIVE); + isModified |= (getFocusLookupValue() != codeInsightSettings.FOCUS_AUTOPOPUP); isModified |= isModified(myCbOnCodeCompletion, codeInsightSettings.AUTOCOMPLETE_ON_CODE_COMPLETION); isModified |= isModified(myCbOnSmartTypeCompletion, codeInsightSettings.AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION); @@ -215,4 +220,8 @@ public class CodeCompletionPanel { return CodeInsightSettings.FIRST_LETTER; } } + + private int getFocusLookupValue() { + return myFocusLookup.getSelectedIndex() + 1; + } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java index a7060152ac64..ea9b5afd3e7d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java @@ -85,6 +85,11 @@ public class CodeInsightSettings implements PersistentStateComponent, C public static final int NONE = 2; public static final int FIRST_LETTER = 3; + public int FOCUS_AUTOPOPUP = NEVER; // NEVER, SMART or ALWAYS + public static final int NEVER = 1; + public static final int SMART = 2; + public static final int ALWAYS = 3; + public boolean AUTOCOMPLETE_ON_CODE_COMPLETION = true; public boolean AUTOCOMPLETE_ON_SMART_TYPE_COMPLETION = true; public boolean AUTOCOMPLETE_ON_CLASS_NAME_COMPLETION = false; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java index 924ed2bd50d0..a70cdbda0dd5 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java @@ -220,6 +220,11 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler { return true; } + switch (CodeInsightSettings.getInstance().FOCUS_AUTOPOPUP) { + case CodeInsightSettings.ALWAYS: return true; + case CodeInsightSettings.NEVER: return false; + } + final Language language = PsiUtilBase.getLanguageAtOffset(parameters.getPosition().getContainingFile(), parameters.getOffset()); for (CompletionConfidence confidence : CompletionConfidenceEP.forLanguage(language)) { final ThreeState result = confidence.shouldFocusLookup(parameters);