From 05db80e8d45bf99dcaaceb7e506f0cb4594c3054 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 22 Jan 2016 15:24:52 +0300 Subject: [PATCH] static imports suggestions: allow to disable --- .../options/editor/JavaAutoImportOptions.form | 14 +++++++++++--- .../options/editor/JavaAutoImportOptions.java | 4 ++++ .../daemon/impl/quickfix/ImportClassFixBase.java | 14 +++++--------- .../impl/quickfix/StaticImportMemberFix.java | 11 ++++++++++- .../intellij/codeInsight/CodeInsightSettings.java | 1 + .../daemon/impl/ShowAutoImportPass.java | 4 +++- 6 files changed, 34 insertions(+), 14 deletions(-) diff --git a/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.form b/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.form index 0c61b43980d3..2a56f3f0bfb7 100644 --- a/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.form +++ b/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.form @@ -1,6 +1,6 @@
- + @@ -29,6 +29,14 @@ + + + + + + + + @@ -61,7 +69,7 @@ - + @@ -71,7 +79,7 @@ - + diff --git a/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.java b/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.java index 32db6ea18abb..007e62e98b21 100644 --- a/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.java +++ b/java/java-impl/src/com/intellij/application/options/editor/JavaAutoImportOptions.java @@ -39,6 +39,7 @@ public class JavaAutoImportOptions implements AutoImportOptionsProvider { private JCheckBox myCbShowImportPopup; private JPanel myWholePanel; private JCheckBox myCbAddUnambiguousImports; + private JCheckBox myCbAddMethodImports; private JCheckBox myCbOptimizeImports; private JPanel myExcludeFromImportAndCompletionPanel; private final ExcludeTable myExcludePackagesTable; @@ -78,6 +79,7 @@ public class JavaAutoImportOptions implements AutoImportOptionsProvider { myCbShowImportPopup.setSelected(daemonSettings.isImportHintEnabled()); myCbOptimizeImports.setSelected(codeInsightSettings.OPTIMIZE_IMPORTS_ON_THE_FLY); myCbAddUnambiguousImports.setSelected(codeInsightSettings.ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY); + myCbAddMethodImports.setSelected(codeInsightSettings.ADD_MEMBER_IMPORTS_ON_THE_FLY); myExcludePackagesTable.reset(); } @@ -94,6 +96,7 @@ public class JavaAutoImportOptions implements AutoImportOptionsProvider { daemonSettings.setImportHintEnabled(myCbShowImportPopup.isSelected()); codeInsightSettings.OPTIMIZE_IMPORTS_ON_THE_FLY = myCbOptimizeImports.isSelected(); codeInsightSettings.ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = myCbAddUnambiguousImports.isSelected(); + codeInsightSettings.ADD_MEMBER_IMPORTS_ON_THE_FLY = myCbAddMethodImports.isSelected(); myExcludePackagesTable.apply(); @@ -113,6 +116,7 @@ public class JavaAutoImportOptions implements AutoImportOptionsProvider { boolean isModified = isModified(myCbShowImportPopup, daemonSettings.isImportHintEnabled()); isModified |= isModified(myCbOptimizeImports, codeInsightSettings.OPTIMIZE_IMPORTS_ON_THE_FLY); isModified |= isModified(myCbAddUnambiguousImports, codeInsightSettings.ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY); + isModified |= isModified(myCbAddMethodImports, codeInsightSettings.ADD_MEMBER_IMPORTS_ON_THE_FLY); isModified |= getSmartPasteValue() != codeInsightSettings.ADD_IMPORTS_ON_PASTE; isModified |= myExcludePackagesTable.isModified(); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java index 88efb04b4827..03ffdf147a7c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFixBase.java @@ -317,7 +317,11 @@ public abstract class ImportClassFixBase implements Inte } private ImportClassFixBase.Result doFix(Editor editor) { + if (!CodeInsightSettings.getInstance().ADD_MEMBER_IMPORTS_ON_THE_FLY) { + return ImportClassFixBase.Result.POPUP_NOT_SHOWN; + } final List candidates = getMembersToImport(true); if (candidates.isEmpty()) { return ImportClassFixBase.Result.POPUP_NOT_SHOWN; @@ -106,7 +112,10 @@ public abstract class StaticImportMemberFix implements Inte } final QuestionAction action = createQuestionAction(candidates, element.getProject(), editor); - if (candidates.size() == 1 && ImportClassFixBase.canAddUnambiguousImport(element.getContainingFile())) { + PsiFile psiFile = element.getContainingFile(); + if (candidates.size() == 1 && + (ApplicationManager.getApplication().isUnitTestMode() || DaemonListeners.canChangeFileSilently(psiFile)) && + !LaterInvocator.isInModalContext()) { CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() { @Override public void run() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java index f40452893fff..08fac68d7c9b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/CodeInsightSettings.java @@ -135,6 +135,7 @@ public class CodeInsightSettings implements PersistentStateComponent, C public boolean OPTIMIZE_IMPORTS_ON_THE_FLY = false; public boolean ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = false; + public boolean ADD_MEMBER_IMPORTS_ON_THE_FLY = true; public boolean JSP_ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY = false; /** diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java index 5dd6d21c5a16..525d80885d67 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java @@ -90,7 +90,9 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass { private void importUnambiguousImports(final int caretOffset) { if (!DaemonCodeAnalyzerSettings.getInstance().isImportHintEnabled()) return; if (!DaemonCodeAnalyzer.getInstance(myProject).isImportHintsEnabled(myFile)) return; - if (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return; + final CodeInsightSettings codeInsightSettings = CodeInsightSettings.getInstance(); + if (!codeInsightSettings.ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY && + !codeInsightSettings.ADD_MEMBER_IMPORTS_ON_THE_FLY) return; Document document = getDocument(); final List infos = new ArrayList();