From e5ca7439a6ec074f783956e20cbc06f4326989e2 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 17 Jun 2020 17:25:00 +0200 Subject: [PATCH] SSR: generify to simplify code a little GitOrigin-RevId: 4b3f2663afaf54ffed168086c737d2d633d85ec6 --- .../plugin/ui/filters/ContextFilter.java | 36 +++++++------------ .../plugin/ui/filters/CountFilter.java | 25 ++++++------- .../plugin/ui/filters/Filter.java | 6 ++-- .../plugin/ui/filters/FilterEditor.java | 7 ++-- .../plugin/ui/filters/FilterTable.java | 8 ++++- .../plugin/ui/filters/ReferenceFilter.java | 24 +++++-------- .../plugin/ui/filters/ScriptFilter.java | 2 +- .../plugin/ui/filters/TextFilter.java | 29 ++++++--------- .../plugin/ui/filters/TypeFilter.java | 29 ++++++--------- 9 files changed, 68 insertions(+), 98 deletions(-) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ContextFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ContextFilter.java index 379358dfdd8b..26a2df78603e 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ContextFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ContextFilter.java @@ -7,7 +7,6 @@ import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchVariableConstraint; -import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.plugin.ui.Configuration; import com.intellij.structuralsearch.plugin.ui.ConfigurationManager; @@ -28,29 +27,30 @@ class ContextFilter extends FilterAction { @Override public boolean hasFilter() { - return !StringUtil.isEmpty(getContextConstraint()); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + return variable != null && !StringUtil.isEmpty(variable.getContextConstraint()); } @Override public void clearFilter() { - setContextConstraint(""); + myTable.getMatchVariableConstraint().setContextConstraint(""); } @Override public boolean isApplicable(List nodes, boolean completePattern, boolean target) { - return myTable.getVariable() instanceof MatchVariableConstraint && - completePattern && - myTable.getProfile().isApplicableConstraint(UIUtil.CONTEXT, nodes, completePattern, target); + return myTable.getVariable() instanceof MatchVariableConstraint && completePattern && + myTable.getProfile().isApplicableConstraint(UIUtil.CONTEXT, nodes, true, target); } @Override protected void setLabel(SimpleColoredComponent component) { - component.append(SSRBundle.message("context.0.label", StringUtil.unquoteString(getContextConstraint()))); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + component.append(SSRBundle.message("context.0.label", StringUtil.unquoteString(variable.getContextConstraint()))); } @Override - public FilterEditor getEditor() { - return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { + public FilterEditor getEditor() { + return new FilterEditor(myTable.getMatchVariableConstraint(), myTable.getConstraintChangedCallback()) { private final JLabel myLabel = new JLabel(SSRBundle.message("context.label")); private final TextFieldWithAutoCompletion textField = TextFieldWithAutoCompletion.create(myTable.getProject(), Collections.emptyList(), false, ""); @@ -60,11 +60,11 @@ class ContextFilter extends FilterAction { @Override protected void layoutComponents() { - ConfigurationManager configManager = ConfigurationManager.getInstance(myTable.getProject()); - List configurationNames = JBIterable + final ConfigurationManager configManager = ConfigurationManager.getInstance(myTable.getProject()); + final List configurationNames = JBIterable .from(configManager.getAllConfigurationNames()) .filter(name -> { - Configuration config = configManager.findConfigurationByName(name); + final Configuration config = configManager.findConfigurationByName(name); return config != null && myTable.getProfile().isApplicableContextConfiguration(config); }) .toList(); @@ -109,16 +109,4 @@ class ContextFilter extends FilterAction { } }; } - - private String getContextConstraint() { - NamedScriptableDefinition variable = myTable.getVariable(); - return variable instanceof MatchVariableConstraint ? ((MatchVariableConstraint)variable).getContextConstraint() : ""; - } - - private void setContextConstraint(String value) { - NamedScriptableDefinition variable = myTable.getVariable(); - if (variable instanceof MatchVariableConstraint) { - ((MatchVariableConstraint)variable).setContextConstraint(value); - } - } } \ No newline at end of file diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/CountFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/CountFilter.java index c6da4ef4021f..b61b36456ae3 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/CountFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/CountFilter.java @@ -3,7 +3,6 @@ package com.intellij.structuralsearch.plugin.ui.filters; import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchVariableConstraint; -import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.StructuralSearchProfile; import com.intellij.structuralsearch.plugin.ui.UIUtil; @@ -28,28 +27,26 @@ class CountFilter extends FilterAction { @Override public boolean hasFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + if (variable == null) { return false; } - final MatchVariableConstraint matchVariableConstraint = (MatchVariableConstraint)variable; - return matchVariableConstraint.getMinCount() != 1 || matchVariableConstraint.getMaxCount() != 1; + return variable.getMinCount() != 1 || variable.getMaxCount() != 1; } @Override public void clearFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + if (variable == null) { return; } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - constraint.setMinCount(1); - constraint.setMaxCount(1); + variable.setMinCount(1); + variable.setMaxCount(1); } @Override public void initFilter() { - final MatchVariableConstraint constraint = (MatchVariableConstraint)myTable.getVariable(); + final MatchVariableConstraint constraint = myTable.getMatchVariableConstraint(); constraint.setMinCount(myMinZero ? 0 : 1); constraint.setMaxCount(myMaxUnlimited ? Integer.MAX_VALUE : 1); } @@ -67,7 +64,7 @@ class CountFilter extends FilterAction { @Override protected void setLabel(SimpleColoredComponent component) { - final MatchVariableConstraint constraint = (MatchVariableConstraint)myTable.getVariable(); + final MatchVariableConstraint constraint = myTable.getMatchVariableConstraint(); final int min = constraint.getMinCount(); final int max = constraint.getMaxCount(); myLabel.append(SSRBundle.message("count.label", "[" + min + "," + (max == Integer.MAX_VALUE ? "∞" : max) + ']')); @@ -77,8 +74,8 @@ class CountFilter extends FilterAction { } @Override - public FilterEditor getEditor() { - return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { + public FilterEditor getEditor() { + return new FilterEditor(myTable.getMatchVariableConstraint(), myTable.getConstraintChangedCallback()) { private final IntegerField myMinField = new IntegerField(); private final IntegerField myMaxField = new IntegerField(); diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/Filter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/Filter.java index c93f2c400ecc..65f832502310 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/Filter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/Filter.java @@ -1,6 +1,8 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.structuralsearch.plugin.ui.filters; +import com.intellij.structuralsearch.NamedScriptableDefinition; + import javax.swing.*; /** @@ -12,7 +14,7 @@ public interface Filter { JComponent getRenderer(); - default FilterEditor getEditor() { + default FilterEditor getEditor() { return null; } } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterEditor.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterEditor.java index 0f64abdbde6a..7012f01f1329 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterEditor.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterEditor.java @@ -1,4 +1,4 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.structuralsearch.plugin.ui.filters; import com.intellij.structuralsearch.NamedScriptableDefinition; @@ -15,9 +15,8 @@ public abstract class FilterEditor extends protected final T myConstraint; private final Runnable myConstraintChangedCallback; - public FilterEditor(NamedScriptableDefinition constraint, Runnable constraintChangedCallback) { - //noinspection unchecked - myConstraint = (T)constraint; + public FilterEditor(T constraint, Runnable constraintChangedCallback) { + myConstraint = constraint; myConstraintChangedCallback = constraintChangedCallback; } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterTable.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterTable.java index 9d541a9b5a64..1e0cbfb7b854 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterTable.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/FilterTable.java @@ -1,7 +1,8 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.structuralsearch.plugin.ui.filters; import com.intellij.openapi.project.Project; +import com.intellij.structuralsearch.MatchVariableConstraint; import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.StructuralSearchProfile; import org.jetbrains.annotations.NotNull; @@ -17,6 +18,11 @@ public interface FilterTable { NamedScriptableDefinition getVariable(); + default MatchVariableConstraint getMatchVariableConstraint() { + final NamedScriptableDefinition variable = getVariable(); + return variable instanceof MatchVariableConstraint ? (MatchVariableConstraint)variable : null; + } + Runnable getConstraintChangedCallback(); @NotNull diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ReferenceFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ReferenceFilter.java index 8243449fb4b6..372ddfc244c1 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ReferenceFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ReferenceFilter.java @@ -7,7 +7,6 @@ import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchVariableConstraint; -import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.plugin.ui.ConfigurationManager; import com.intellij.structuralsearch.plugin.ui.UIUtil; @@ -30,23 +29,18 @@ class ReferenceFilter extends FilterAction { @Override public boolean hasFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { - return false; - } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - return !StringUtil.isEmpty(constraint.getReferenceConstraint()); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + return variable != null && !StringUtil.isEmpty(variable.getReferenceConstraint()); } @Override public void clearFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + if (variable == null) { return; } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - constraint.setReferenceConstraint(""); - constraint.setInvertReference(false); + variable.setReferenceConstraint(""); + variable.setInvertReference(false); } @Override @@ -57,14 +51,14 @@ class ReferenceFilter extends FilterAction { @Override protected void setLabel(SimpleColoredComponent component) { - final MatchVariableConstraint constraint = (MatchVariableConstraint)myTable.getVariable(); + final MatchVariableConstraint constraint = myTable.getMatchVariableConstraint(); final String value = constraint.isInvertReference() ? "!" + constraint.getReferenceConstraint() : constraint.getReferenceConstraint(); component.append(SSRBundle.message("reference.0.label", value)); } @Override - public FilterEditor getEditor() { - return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { + public FilterEditor getEditor() { + return new FilterEditor(myTable.getMatchVariableConstraint(), myTable.getConstraintChangedCallback()) { private final JLabel myLabel = new JLabel(SSRBundle.message("reference.label")); private final TextFieldWithAutoCompletion textField = diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ScriptFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ScriptFilter.java index 539aac93aefd..eed0edd95776 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ScriptFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/ScriptFilter.java @@ -51,7 +51,7 @@ class ScriptFilter extends FilterAction { } @Override - public FilterEditor getEditor() { + public FilterEditor getEditor() { return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { private final JLabel myLabel = new JLabel(SSRBundle.message("script.label")); diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TextFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TextFilter.java index ddc8537fe58c..8bbd6675b209 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TextFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TextFilter.java @@ -4,7 +4,6 @@ package com.intellij.structuralsearch.plugin.ui.filters; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchVariableConstraint; -import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.StructuralSearchProfile; import com.intellij.structuralsearch.plugin.ui.UIUtil; @@ -29,24 +28,19 @@ class TextFilter extends FilterAction { @Override public boolean hasFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { - return false; - } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - return !StringUtil.isEmpty(constraint.getRegExp()) || constraint.isWithinHierarchy(); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + return variable != null && (!StringUtil.isEmpty(variable.getRegExp()) || variable.isWithinHierarchy()); } @Override public void clearFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + if (variable == null) { return; } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - constraint.setRegExp(""); - constraint.setWholeWordsOnly(false); - constraint.setWithinHierarchy(false); + variable.setRegExp(""); + variable.setWholeWordsOnly(false); + variable.setWithinHierarchy(false); } @Override @@ -61,7 +55,7 @@ class TextFilter extends FilterAction { @Override protected void setLabel(SimpleColoredComponent component) { - final MatchVariableConstraint constraint = (MatchVariableConstraint)myTable.getVariable(); + final MatchVariableConstraint constraint = myTable.getMatchVariableConstraint(); String value = constraint.isInvertRegExp() ? "!" + constraint.getRegExp() : constraint.getRegExp(); myLabel.append(SSRBundle.message("text.0.label", value)); if (constraint.isWholeWordsOnly()) myLabel.append(SSRBundle.message("whole.words.label"), SimpleTextAttributes.GRAYED_ATTRIBUTES); @@ -69,15 +63,14 @@ class TextFilter extends FilterAction { } @Override - public FilterEditor getEditor() { - return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { + public FilterEditor getEditor() { + return new FilterEditor(myTable.getMatchVariableConstraint(), myTable.getConstraintChangedCallback()) { private final EditorTextField myTextField = UIUtil.createRegexComponent("", myTable.getProject()); private final JCheckBox myWordsCheckBox = new JCheckBox(SSRBundle.message("whole.words.check.box"), false); private final JCheckBox myHierarchyCheckBox = new JCheckBox(SSRBundle.message("within.type.hierarchy.check.box"), false); private final JLabel myTextLabel = new JLabel(SSRBundle.message("text.label")); - private final ContextHelpLabel myHelpLabel = - ContextHelpLabel.create(SSRBundle.message("text.filter.help.text")); + private final ContextHelpLabel myHelpLabel = ContextHelpLabel.create(SSRBundle.message("text.filter.help.text")); @Override protected void layoutComponents() { diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TypeFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TypeFilter.java index a92f5a4f6cf3..55ead69d08bb 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TypeFilter.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/filters/TypeFilter.java @@ -5,7 +5,6 @@ import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchVariableConstraint; -import com.intellij.structuralsearch.NamedScriptableDefinition; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.StructuralSearchProfile; import com.intellij.structuralsearch.plugin.ui.UIUtil; @@ -31,29 +30,21 @@ class TypeFilter extends FilterAction { @Override public boolean hasFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { - return false; - } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - return !StringUtil.isEmpty(constraint.getNameOfExprType()); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + return variable != null && !StringUtil.isEmpty(variable.getNameOfExprType()); } @Override public void clearFilter() { - final NamedScriptableDefinition variable = myTable.getVariable(); - if (!(variable instanceof MatchVariableConstraint)) { - return; - } - final MatchVariableConstraint constraint = (MatchVariableConstraint)variable; - constraint.setNameOfExprType(""); - constraint.setInvertExprType(false); - constraint.setExprTypeWithinHierarchy(false); + final MatchVariableConstraint variable = myTable.getMatchVariableConstraint(); + variable.setNameOfExprType(""); + variable.setInvertExprType(false); + variable.setExprTypeWithinHierarchy(false); } @Override public boolean isApplicable(List nodes, boolean completePattern, boolean target) { - if (!(myTable.getVariable() instanceof MatchVariableConstraint)) { + if (myTable.getVariable() == null) { return false; } final StructuralSearchProfile profile = myTable.getProfile(); @@ -63,7 +54,7 @@ class TypeFilter extends FilterAction { @Override protected void setLabel(SimpleColoredComponent component) { - final MatchVariableConstraint constraint = (MatchVariableConstraint)myTable.getVariable(); + final MatchVariableConstraint constraint = myTable.getMatchVariableConstraint(); final String s = constraint.isRegexExprType() ? constraint.getNameOfExprType() : constraint.getExpressionTypes(); final String value = constraint.isInvertExprType() ? "!" + s : s; myLabel.append(SSRBundle.message("type.0.label", value)); @@ -72,8 +63,8 @@ class TypeFilter extends FilterAction { } @Override - public FilterEditor getEditor() { - return new FilterEditor(myTable.getVariable(), myTable.getConstraintChangedCallback()) { + public FilterEditor getEditor() { + return new FilterEditor(myTable.getMatchVariableConstraint(), myTable.getConstraintChangedCallback()) { private final EditorTextField myTextField = UIUtil.createTextComponent("", myTable.getProject()); private final JLabel myTypeLabel = new JLabel(SSRBundle.message("type.label"));