From 187924699bcc5d76d54f33dba40e7dcfc0795b98 Mon Sep 17 00:00:00 2001 From: jannisCode Date: Thu, 26 Sep 2024 17:24:04 +0200 Subject: [PATCH] Updated the filter feature in the call hierarchy changed the feature from only one selectable option to three radio buttons which are more understandable and provide more functionality. --- .../callhierarchy/CallHierarchyCore.java | 25 ++++-- .../CallSearchResultCollector.java | 24 +++--- .../corext/callhierarchy/CallHierarchy.java | 44 +++++++---- .../callhierarchy/CallHierarchyMessages.java | 5 ++ .../CallHierarchyMessages.properties | 5 ++ .../ui/callhierarchy/FiltersDialog.java | 79 +++++++++++++------ 6 files changed, 125 insertions(+), 57 deletions(-) diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchyCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchyCore.java index 1c24a09ac11..a14960bec26 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchyCore.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchyCore.java @@ -46,10 +46,13 @@ public class CallHierarchyCore { - private static final String PREF_USE_IMPLEMENTORS= "PREF_USE_IMPLEMENTORS"; //$NON-NLS-1$ - private static final String PREF_USE_FILTERS= "PREF_USE_FILTERS"; //$NON-NLS-1$ - private static final String PREF_FILTERS_LIST= "PREF_FILTERS_LIST"; //$NON-NLS-1$ - private static final String PREF_FILTER_TESTCODE= "PREF_FILTER_TESTCODE"; //$NON-NLS-1$ + public static final String PREF_SHOW_ALL_CODE = "PREF_SHOW_ALL_CODE"; //$NON-NLS-1$ + public static final String PREF_HIDE_TEST_CODE = "PREF_HIDE_TEST_CODE"; //$NON-NLS-1$ + public static final String PREF_SHOW_TEST_CODE_ONLY = "PREF_SHOW_TEST_CODE_ONLY"; //$NON-NLS-1$ + + private static final String PREF_USE_IMPLEMENTORS= "PREF_USE_IMPLEMENTORS"; //$NON-NLS-1$ + private static final String PREF_USE_FILTERS= "PREF_USE_FILTERS"; //$NON-NLS-1$ + private static final String PREF_FILTERS_LIST= "PREF_FILTERS_LIST"; //$NON-NLS-1$ private String defaultIgnoreFilters= "java.*,javax.*"; //$NON-NLS-1$ @@ -69,10 +72,18 @@ public boolean isSearchUsingImplementorsEnabled() { return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_USE_IMPLEMENTORS, null)); } - public boolean isFilterTestCode() { - return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_FILTER_TESTCODE, null)); + public boolean isShowTestCode() { + return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_SHOW_TEST_CODE_ONLY, null)); + } + + public boolean isShowAll() { + return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_SHOW_ALL_CODE, null)); } + public boolean isHideTestCode() { + return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_HIDE_TEST_CODE, null)); + } + public Collection getImplementingMethods(IMethod method) { if (isSearchUsingImplementorsEnabled()) { IJavaElement[] result= Implementors.getInstance().searchForImplementors(new IJavaElement[] { @@ -196,10 +207,8 @@ public boolean isIgnored(String fullyQualifiedName) { } } } - return false; } - public boolean isFilterEnabled() { return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_USE_FILTERS, null)); } diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java index 9bc574ee5a6..db266001e72 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallSearchResultCollector.java @@ -72,19 +72,21 @@ protected Map createCalledMethodsData() { * Method isIgnored. * @return boolean */ - private boolean isIgnored(IMember enclosingElement) { - String fullyQualifiedName = getTypeOfElement(enclosingElement) - .getFullyQualifiedName(); - - if (CallHierarchyCore.getDefault().isFilterTestCode()) { - IClasspathEntry classpathEntry= determineClassPathEntry(enclosingElement); - if (classpathEntry != null && classpathEntry.isTest()) { - return true; - } + private boolean isIgnored(IMember enclosingElement) { + String fullyQualifiedName= getTypeOfElement(enclosingElement).getFullyQualifiedName(); + + if (CallHierarchyCore.getDefault().isShowAll()) { + return false; } + IClasspathEntry classpathEntry= determineClassPathEntry(enclosingElement); - return CallHierarchyCore.getDefault().isIgnored(fullyQualifiedName); - } + if (classpathEntry != null) { + boolean isTest= classpathEntry.isTest(); + return CallHierarchyCore.getDefault().isHideTestCode() && isTest + || CallHierarchyCore.getDefault().isShowTestCode() && !isTest; + } + return CallHierarchyCore.getDefault().isIgnored(fullyQualifiedName); + } private static IClasspathEntry determineClassPathEntry(Object element) { if (element instanceof IJavaElement) { diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java index 8a8cd726bd8..afa3d11dc4f 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java +++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java @@ -37,10 +37,10 @@ import org.eclipse.jdt.internal.ui.util.StringMatcher; public class CallHierarchy { - private static final String PREF_USE_IMPLEMENTORS= "PREF_USE_IMPLEMENTORS"; //$NON-NLS-1$ + + private static final String PREF_USE_IMPLEMENTORS= "PREF_USE_IMPLEMENTORS"; //$NON-NLS-1$ private static final String PREF_USE_FILTERS = "PREF_USE_FILTERS"; //$NON-NLS-1$ private static final String PREF_FILTERS_LIST = "PREF_FILTERS_LIST"; //$NON-NLS-1$ - private static final String PREF_FILTER_TESTCODE= "PREF_FILTER_TESTCODE"; //$NON-NLS-1$ private static CallHierarchy fgInstance; private CallHierarchyCore fgCallHierarchyCore; @@ -53,35 +53,35 @@ public static CallHierarchy getDefault() { if (fgInstance == null) { fgInstance = new CallHierarchy(); } - return fgInstance; } - public boolean isSearchUsingImplementorsEnabled() { + public void setShowAll(boolean value) { IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); - - return settings.getBoolean(PREF_USE_IMPLEMENTORS); + settings.setValue(CallHierarchyCore.PREF_SHOW_ALL_CODE, value); } - public static void setSearchUsingImplementorsEnabled(boolean enabled) { + public void setHideTestCode(boolean value) { IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); - - settings.setValue(PREF_USE_IMPLEMENTORS, enabled); + settings.setValue(CallHierarchyCore.PREF_HIDE_TEST_CODE, value); } - public boolean isFilterTestCode() { + public void setShowTestCode(boolean value) { IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); + settings.setValue(CallHierarchyCore.PREF_SHOW_TEST_CODE_ONLY, value); + } - return settings.getBoolean(PREF_FILTER_TESTCODE); + public boolean isSearchUsingImplementorsEnabled() { + IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); + return settings.getBoolean(PREF_USE_IMPLEMENTORS); } - public void setFilterTestCode(boolean enabled) { + public static void setSearchUsingImplementorsEnabled(boolean enabled) { IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); - settings.setValue(PREF_FILTER_TESTCODE, enabled); + settings.setValue(PREF_USE_IMPLEMENTORS, enabled); } - public Collection getImplementingMethods(IMethod method) { return fgCallHierarchyCore.getImplementingMethods(method); } @@ -135,6 +135,22 @@ public boolean isFilterEnabled() { return settings.getBoolean(PREF_USE_FILTERS); } + public boolean isShowAll() { + IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); + return settings.getBoolean(CallHierarchyCore.PREF_SHOW_ALL_CODE); + } + + public boolean isHideTestCode() { + IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); + return settings.getBoolean(CallHierarchyCore.PREF_HIDE_TEST_CODE); + } + + public boolean isShowTestCode() { + IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); + return settings.getBoolean(CallHierarchyCore.PREF_SHOW_TEST_CODE_ONLY); + } + + public void setFilterEnabled(boolean filterEnabled) { IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore(); settings.setValue(PREF_USE_FILTERS, filterEnabled); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java index f8a1d365c64..882aec6efda 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.java @@ -66,6 +66,11 @@ private CallHierarchyMessages() { public static String ShowExpandWithConstructorsDialogAction_text; public static String ShowFilterDialogAction_text; public static String FiltersDialog_filter; + + public static String FiltersDialog_ShowAllCode; + public static String FiltersDialog_HideTestCode; + public static String FiltersDialog_TestCodeOnly; + public static String FiltersDialog_filterOnNames; public static String FiltersDialog_filterOnNamesSubCaption; public static String FiltersDialog_maxCallDepth; diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties index 41fcfa09393..d17c5a4adb0 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyMessages.properties @@ -62,6 +62,11 @@ ShowSearchInDialogAction_text= Search &In... SearchInDialog_title= Search In ShowExpandWithConstructorsDialogAction_text=E&xpand with Constructors... ShowFilterDialogAction_text= &Filters... + +FiltersDialog_HideTestCode = Hide Test Code +FiltersDialog_ShowAllCode = Show All Code +FiltersDialog_TestCodeOnly = Test Code only + FiltersDialog_filter= Filter Calls FiltersDialog_filterOnNames= &Name filter patterns (matching names will be hidden): FiltersDialog_filterOnNamesSubCaption= Patterns are separated by commas (* = any string, ? = any character) diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java index 35b995aba76..5c7be2431bb 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/FiltersDialog.java @@ -40,8 +40,9 @@ class FiltersDialog extends StatusDialog { private Button fFilterOnNames; private Text fNames; private Text fMaxCallDepth; - private Button fFilterTestCode; - + private Button fShowAll; + private Button fHideTest; + private Button fShowTest; protected FiltersDialog(Shell parentShell) { super(parentShell); @@ -112,10 +113,34 @@ private void createNamesArea(Composite parent) { } private void createTestCodeArea(Composite parent) { - fFilterTestCode = createCheckbox(parent, - CallHierarchyMessages.FiltersDialog_filterTestCode, true); - } + Composite radioGroup= new Composite(parent, SWT.NONE); + GridLayout layout= new GridLayout(); + layout.numColumns= 1; + radioGroup.setLayout(layout); + + fShowAll= new Button(radioGroup, SWT.RADIO); + fShowAll.setText(CallHierarchyMessages.FiltersDialog_ShowAllCode); + + fHideTest= new Button(radioGroup, SWT.RADIO); + fHideTest.setText(CallHierarchyMessages.FiltersDialog_HideTestCode); + fShowTest= new Button(radioGroup, SWT.RADIO); + fShowTest.setText(CallHierarchyMessages.FiltersDialog_TestCodeOnly); + setSelection(); + + GridData gridData= new GridData(); + gridData.horizontalIndent= 0; + fShowAll.setLayoutData(gridData); + fHideTest.setLayoutData(gridData); + fShowTest.setLayoutData(gridData); + } + + private void setSelection() { + fShowAll.setSelection(CallHierarchy.getDefault().isShowAll()); + fHideTest.setSelection(CallHierarchy.getDefault().isHideTestCode()); + fShowTest.setSelection(CallHierarchy.getDefault().isShowTestCode()); + + } /** * Creates a check box button with the given parent and text. @@ -157,27 +182,33 @@ private void updateEnabledState() { } /** - * Updates the given filter from the UI state. - */ - private void updateFilterFromUI() { - int maxCallDepth = Integer.parseInt(this.fMaxCallDepth.getText()); + * Updates the given filter from the UI state. + */ + private void updateFilterFromUI() { + int maxCallDepth= Integer.parseInt(this.fMaxCallDepth.getText()); - CallHierarchyUI.getDefault().setMaxCallDepth(maxCallDepth); - CallHierarchy.getDefault().setFilters(fNames.getText()); - CallHierarchy.getDefault().setFilterEnabled(fFilterOnNames.getSelection()); - CallHierarchy.getDefault().setFilterTestCode(fFilterTestCode.getSelection()); - } + CallHierarchyUI.getDefault().setMaxCallDepth(maxCallDepth); + CallHierarchy.getDefault().setFilters(fNames.getText()); + CallHierarchy.getDefault().setFilterEnabled(fFilterOnNames.getSelection()); + + CallHierarchy.getDefault().setShowAll(fShowAll.getSelection()); + CallHierarchy.getDefault().setHideTestCode(fHideTest.getSelection()); + CallHierarchy.getDefault().setShowTestCode(fShowTest.getSelection()); + } + + /** + * Updates the UI state from the given filter. + */ + private void updateUIFromFilter() { + fMaxCallDepth.setText(String.valueOf(CallHierarchyUI.getDefault().getMaxCallDepth())); + fNames.setText(CallHierarchy.getDefault().getFilters()); + fFilterOnNames.setSelection(CallHierarchy.getDefault().isFilterEnabled()); + + setSelection(); + + updateEnabledState(); + } - /** - * Updates the UI state from the given filter. - */ - private void updateUIFromFilter() { - fMaxCallDepth.setText(String.valueOf(CallHierarchyUI.getDefault().getMaxCallDepth())); - fNames.setText(CallHierarchy.getDefault().getFilters()); - fFilterOnNames.setSelection(CallHierarchy.getDefault().isFilterEnabled()); - fFilterTestCode.setSelection(CallHierarchy.getDefault().isFilterTestCode()); - updateEnabledState(); - } /** * Updates the filter from the UI state.