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);