diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsManager.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsManager.java index ef0fd0571284..5b52a0652db5 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsManager.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsManager.java @@ -15,7 +15,7 @@ */ package com.intellij.codeInsight.daemon.impl; -import com.intellij.codeInsight.folding.JavaCodeFoldingSettings; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.util.Couple; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; @@ -46,9 +46,9 @@ public class ParameterNameHintsManager { PsiExpression[] callArguments = getArguments(callExpression); JavaResolveResult resolveResult = callExpression.resolveMethodGenerics(); - JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance(); + EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance(); List descriptors = Collections.emptyList(); - if (callArguments.length >= settings.getInlineLiteralParameterMinArgumentsToFold() && + if (callArguments.length >= settings.getMinArgsToShow() && hasLiteralExpression(callArguments) && resolveResult.getElement() instanceof PsiMethod) { PsiMethod method = (PsiMethod)resolveResult.getElement(); @@ -159,8 +159,8 @@ public class ParameterNameHintsManager { } private static boolean hasProperLength(@Nullable String paramName) { - JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance(); - return paramName != null && paramName.length() >= settings.getInlineLiteralParameterMinNameLength(); + final int minLength = EditorSettingsExternalizable.getInstance().getMinParamNameLengthToShow(); + return paramName != null && paramName.length() >= minLength; } private static boolean hasLiteralInVarargs(int index, PsiExpression[] callArguments) { diff --git a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingOptionsProvider.java b/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingOptionsProvider.java index 0c78591db4ea..b7c1fa91e2bd 100644 --- a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingOptionsProvider.java +++ b/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingOptionsProvider.java @@ -28,28 +28,7 @@ public class JavaCodeFoldingOptionsProvider extends BeanConfigurable null, - pair -> {}, - () -> null, - pair -> {} - ); - component(panel.getRow1(), - settings::getInlineLiteralParameterMinNameLength, - settings::setInlineLiteralParameterMinNameLength, - panel::getMinNameLengthThresholdText, - panel::setMinNameLengthThresholdText - ); - component(panel.getRow2(), - settings::getInlineLiteralParameterMinArgumentsToFold, - settings::setInlineLiteralParameterMinArgumentsToFold, - panel::getMinArgumentsToFoldText, - panel::setMinArgumentsToFoldText - ); - + checkBox(ApplicationBundle.message("checkbox.collapse.one.line.methods"), settings::isCollapseOneLineMethods, settings::setCollapseOneLineMethods); checkBox(ApplicationBundle.message("checkbox.collapse.simple.property.accessors"), settings::isCollapseAccessors, settings::setCollapseAccessors); diff --git a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.form b/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.form deleted file mode 100644 index 1f6df57e3de0..000000000000 --- a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.form +++ /dev/null @@ -1,83 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.java b/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.java deleted file mode 100644 index 802a174dd014..000000000000 --- a/java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingSettingsPanel.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.application.options.editor; - -import javax.swing.*; - -public class JavaCodeFoldingSettingsPanel { - private JTextField minNameLengthThresholdText; - private JTextField minArgumentsToFoldText; - private JPanel row0; - private JPanel row1; - private JPanel row2; - - int getMinNameLengthThresholdText() { - try { - return Integer.parseInt(minNameLengthThresholdText.getText()); - } - catch (NumberFormatException e) { - return 3; - } - } - - void setMinNameLengthThresholdText(int value) { - minNameLengthThresholdText.setText(String.valueOf(value)); - } - - int getMinArgumentsToFoldText() { - try { - return Integer.parseInt(minArgumentsToFoldText.getText()); - } - catch (NumberFormatException e) { - return 2; - } - } - - void setMinArgumentsToFoldText(int value) { - minArgumentsToFoldText.setText(String.valueOf(value)); - } - - JComponent getRow0() { - return row0; - } - - JPanel getRow1() { - return row1; - } - - JPanel getRow2() { - return row2; - } -} diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java index 9bc46be0e013..a9abb809fa2a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java @@ -19,15 +19,14 @@ import com.intellij.codeHighlighting.EditorBoundHighlightingPass; import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.codeHighlighting.TextEditorHighlightingPassFactory; import com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar; -import com.intellij.codeInsight.folding.JavaCodeFoldingSettings; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Inlay; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.*; import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; @@ -74,7 +73,7 @@ public class ParameterHintsPassFactory extends AbstractProjectComponent implemen } private static boolean isEnabled() { - return Registry.is("editor.inline.parameter.hints") || JavaCodeFoldingSettings.getInstance().isInlineParameterNamesForLiteralCallArguments(); + return EditorSettingsExternalizable.getInstance().isShowParameterNameHints(); } private void addElementsToFold(PsiClass aClass) { diff --git a/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java b/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java index 25b33e690cf2..951962778627 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java @@ -65,13 +65,4 @@ public abstract class JavaCodeFoldingSettings { public abstract boolean isCollapseEndOfLineComments(); public abstract void setCollapseEndOfLineComments(boolean value); - - public abstract boolean isInlineParameterNamesForLiteralCallArguments(); - public abstract void setInlineParameterNamesForLiteralCallArguments(boolean value); - - public abstract int getInlineLiteralParameterMinNameLength(); - public abstract void setInlineLiteralParameterMinNameLength(int value); - - public abstract int getInlineLiteralParameterMinArgumentsToFold(); - public abstract void setInlineLiteralParameterMinArgumentsToFold(int value); } diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java index eeeb5b3cc93c..6e039fc87b65 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java @@ -29,9 +29,6 @@ public class JavaCodeFoldingSettingsBase extends JavaCodeFoldingSettings { private boolean COLLAPSE_I18N_MESSAGES = true; private boolean COLLAPSE_SUPPRESS_WARNINGS = true; private boolean COLLAPSE_END_OF_LINE_COMMENTS; - private boolean INLINE_PARAMETER_NAMES_FOR_LITERAL_CALL_ARGUMENTS; - private int INLINE_LITERAL_PARAMETER_MIN_NAME_LENGTH = 3; - private int INLINE_LITERAL_PARAMETER_MIN_ARGS_TO_FOLD = 2; @Override public boolean isCollapseImports() { @@ -171,34 +168,4 @@ public class JavaCodeFoldingSettingsBase extends JavaCodeFoldingSettings { public void setCollapseEndOfLineComments(boolean value) { COLLAPSE_END_OF_LINE_COMMENTS = value; } - - @Override - public boolean isInlineParameterNamesForLiteralCallArguments() { - return INLINE_PARAMETER_NAMES_FOR_LITERAL_CALL_ARGUMENTS; - } - - @Override - public void setInlineParameterNamesForLiteralCallArguments(boolean value) { - INLINE_PARAMETER_NAMES_FOR_LITERAL_CALL_ARGUMENTS = value; - } - - @Override - public int getInlineLiteralParameterMinNameLength() { - return INLINE_LITERAL_PARAMETER_MIN_NAME_LENGTH; - } - - @Override - public void setInlineLiteralParameterMinNameLength(int value) { - INLINE_LITERAL_PARAMETER_MIN_NAME_LENGTH = value; - } - - @Override - public int getInlineLiteralParameterMinArgumentsToFold() { - return INLINE_LITERAL_PARAMETER_MIN_ARGS_TO_FOLD; - } - - @Override - public void setInlineLiteralParameterMinArgumentsToFold(int value) { - INLINE_LITERAL_PARAMETER_MIN_ARGS_TO_FOLD = value; - } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/inlays/InlayParameterHintsTest.kt b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/inlays/InlayParameterHintsTest.kt index 4bc59bdf6328..8e6bdb4f91e1 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/inlays/InlayParameterHintsTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/inlays/InlayParameterHintsTest.kt @@ -16,11 +16,9 @@ package com.intellij.codeInsight.daemon.inlays import com.intellij.codeInsight.daemon.impl.ParameterHintsPresentationManager -import com.intellij.codeInsight.folding.JavaCodeFoldingSettings -import com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsImpl import com.intellij.openapi.editor.Inlay +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable import com.intellij.openapi.util.TextRange -import com.intellij.openapi.util.registry.Registry import com.intellij.psi.PsiFile import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import com.intellij.util.DocumentUtil @@ -29,24 +27,27 @@ import org.assertj.core.api.Assertions.assertThat class InlayParameterHintsTest: LightCodeInsightFixtureTestCase() { - lateinit var registryStateBefore: String - lateinit var myFoldingSettings: JavaCodeFoldingSettingsImpl - lateinit var myFoldingStateToRestore: JavaCodeFoldingSettingsImpl - + private var isParamHintsEnabledBefore = false + private var minParamLength = 3 + private var minArgsToShow = 2 + override fun setUp() { super.setUp() - val registry = Registry.get("editor.inline.parameter.hints") - registryStateBefore = registry.asString() - registry.setValue(true) - myFoldingSettings = JavaCodeFoldingSettings.getInstance() as JavaCodeFoldingSettingsImpl - myFoldingStateToRestore = JavaCodeFoldingSettingsImpl() - myFoldingStateToRestore.loadState(myFoldingSettings) + val settings = EditorSettingsExternalizable.getInstance() + isParamHintsEnabledBefore = settings.isShowParameterNameHints + minParamLength = settings.minParamNameLengthToShow + minArgsToShow = settings.minArgsToShow + + settings.isShowParameterNameHints = true } override fun tearDown() { - Registry.get("editor.inline.parameter.hints").setValue(registryStateBefore) - myFoldingSettings.loadState(myFoldingStateToRestore) + val settings = EditorSettingsExternalizable.getInstance() + settings.isShowParameterNameHints = isParamHintsEnabledBefore + settings.minParamNameLengthToShow = minParamLength + settings.minArgsToShow = minArgsToShow + super.tearDown() } @@ -259,11 +260,10 @@ public class CharSymbol { } fun `test inline literal arguments with crazy settings`() { - val foldingSettings = JavaCodeFoldingSettings.getInstance() - foldingSettings.isInlineParameterNamesForLiteralCallArguments = true; - foldingSettings.inlineLiteralParameterMinArgumentsToFold = 1; - foldingSettings.inlineLiteralParameterMinNameLength = 1; - + val settings = EditorSettingsExternalizable.getInstance() + settings.minArgsToShow = 1 + settings.minParamNameLengthToShow = 1 + setup(""" public class Test { public void main(boolean isActive, boolean requestFocus, int xoo) { @@ -281,10 +281,9 @@ public class Test { } fun `test hints for generic arguments`() { - val foldingSettings = JavaCodeFoldingSettings.getInstance() - foldingSettings.isInlineParameterNamesForLiteralCallArguments = true - foldingSettings.inlineLiteralParameterMinArgumentsToFold = 1 - foldingSettings.inlineLiteralParameterMinNameLength = 1 + val settings = EditorSettingsExternalizable.getInstance() + settings.minArgsToShow = 1 + settings.minParamNameLengthToShow = 1 setup(""" import java.util.*; diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.form b/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.form index b2cea68e92bf..4a38ddf64f55 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.form +++ b/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.form @@ -1,21 +1,21 @@
- + - + - + - + @@ -23,7 +23,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -40,7 +40,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -103,7 +103,7 @@ - + @@ -132,7 +132,9 @@ - + + + @@ -140,12 +142,55 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.java index 6383eca691fb..0cebbac1c683 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.java @@ -26,13 +26,12 @@ import com.intellij.openapi.options.CompositeConfigurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.openapi.options.ex.ConfigurableWrapper; +import com.intellij.ui.components.JBCheckBox; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.List; /** @@ -64,6 +63,9 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable myBlinkIntervalField.setEnabled(myCbBlinkCaret.isSelected())); + myCbShowWhitespaces.addActionListener((e) -> updateWhitespaceCheckboxesState()); + myShowParameterNameHints.addActionListener((e) -> resetNameHintsSettings()); + } + + private void resetNameHintsSettings() { + boolean isSelected = myShowParameterNameHints.isSelected(); + myMinimumArgumentsToShow.setEnabled(isSelected); + myMinimumParameterNameLengthToShow.setEnabled(isSelected); + + EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance(); + final int currentParamLength = settings.getMinParamNameLengthToShow(); + final int minArguments = settings.getMinArgsToShow(); + + myMinimumParameterNameLengthToShow.setModel(new SpinnerNumberModel(currentParamLength, 1, Integer.MAX_VALUE, 1)); + myMinimumArgumentsToShow.setModel(new SpinnerNumberModel(minArguments, 1, Integer.MAX_VALUE, 1)); + } + + private void applyNameHintsSettings() { + boolean isSelected = myShowParameterNameHints.isSelected(); + EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance(); + + settings.setShowParameterNameHints(isSelected); + if (isSelected) { + settings.setMinParamNameLengthToShow((int)myMinimumParameterNameLengthToShow.getModel().getValue()); + settings.setMinArgsToShow((int)myMinimumArgumentsToShow.getModel().getValue()); } - ); - myCbShowWhitespaces.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - updateWhitespaceCheckboxesState(); - } - }); } private void updateWhitespaceCheckboxesState() { @@ -119,6 +135,9 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable