Bug 543991 - Refactor CallHierarchy and associated classes for jdt.ls

- fix CallHierarchyCore to use preferences instead of defaulting
- move some of CallHierarchy logic into CallHierarchyCore

Change-Id: I46ab8874287efad0d89d875afcf4e35d075f93a8
Signed-off-by: Jeff Johnston <jjohnstn@redhat.com>
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 a7255cd..5e8c6cf 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
@@ -35,6 +35,7 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.manipulation.JavaManipulation;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 
@@ -46,7 +47,13 @@
 
 public class CallHierarchyCore {
 
-    private static final String DEFAULT_IGNORE_FILTERS= ""; //$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 String defaultIgnoreFilters= "java.*,javax.*"; //$NON-NLS-1$
+
     private static CallHierarchyCore fgInstance;
     private IJavaSearchScope fSearchScope;
     private StringMatcher[] fFilters;
@@ -60,11 +67,11 @@
     }
 
     public boolean isSearchUsingImplementorsEnabled() {
-        return true;
+        return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_USE_IMPLEMENTORS, null));
     }
 
     public boolean isFilterTestCode() {
-        return false;
+        return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_FILTER_TESTCODE, null));
     }
 
     public Collection<IJavaElement> getImplementingMethods(IMethod method) {
@@ -195,7 +202,7 @@
     }
 
     public boolean isFilterEnabled() {
-        return false;
+        return Boolean.parseBoolean(JavaManipulation.getPreference(PREF_USE_FILTERS, null));
     }
 
     /**
@@ -203,7 +210,26 @@
      * @return returns the filters
      */
     public String getFilters() {
-        return null;
+        String pref= JavaManipulation.getPreference(PREF_FILTERS_LIST, null);
+        if (pref == null)
+        	return ""; //$NON-NLS-1$
+        return pref;
+    }
+
+    /**
+     * Set default ignore filters to use.
+     *
+     * @param defaultIgnoreFilters comma-separated filter string
+     */
+    public void setDefaultIgnoreFilters(String defaultIgnoreFilters) {
+    	this.defaultIgnoreFilters= defaultIgnoreFilters;
+    }
+
+    /**
+     * Reset filters variable to null.
+     */
+    public void resetFilters() {
+    	fFilters= null;
     }
 
     /**
@@ -211,7 +237,7 @@
      *
      * @return StringMatcher[]
      */
-    private StringMatcher[] getIgnoreFilters() {
+    public StringMatcher[] getIgnoreFilters() {
         if (fFilters == null) {
             String filterString= null;
 
@@ -219,7 +245,7 @@
                 filterString= getFilters();
 
                 if (filterString == null) {
-                    filterString= DEFAULT_IGNORE_FILTERS;
+                    filterString= defaultIgnoreFilters;
                 }
             }
 
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 4796966..db2b2d0 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
@@ -17,10 +17,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.callhierarchy;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.StringTokenizer;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
@@ -44,10 +42,8 @@
     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 final String DEFAULT_IGNORE_FILTERS = "java.*,javax.*"; //$NON-NLS-1$
     private static CallHierarchy fgInstance;
     private CallHierarchyCore fgCallHierarchyCore;
-    private StringMatcher[] fFilters;
 
     private CallHierarchy() {
         fgCallHierarchyCore = CallHierarchyCore.getDefault();
@@ -156,7 +152,7 @@
     }
 
     public void setFilters(String filters) {
-        fFilters = null;
+        fgCallHierarchyCore.resetFilters();
 
         IPreferenceStore settings = JavaPlugin.getDefault().getPreferenceStore();
         settings.setValue(PREF_FILTERS_LIST, filters);
@@ -168,50 +164,14 @@
      * @return StringMatcher[]
      */
     private StringMatcher[] getIgnoreFilters() {
-        if (fFilters == null) {
-            String filterString = null;
-
-            if (isFilterEnabled()) {
-                filterString = getFilters();
-
-                if (filterString == null) {
-                    filterString = DEFAULT_IGNORE_FILTERS;
-                }
-            }
-
-            if (filterString != null) {
-                fFilters = parseList(filterString);
-            } else {
-                fFilters = null;
-            }
-        }
-
-        return fFilters;
+    	return fgCallHierarchyCore.getIgnoreFilters();
     }
 
     public static boolean arePossibleInputElements(List<?> elements) {
         return CallHierarchyCore.arePossibleInputElements(elements);
 	}
 
-	/**
-	 * Parses the comma separated string into an array of {@link StringMatcher} objects.
-	 *
-	 * @param listString the string to parse
-	 * @return an array of {@link StringMatcher} objects
-	 */
-    private static StringMatcher[] parseList(String listString) {
-        List<StringMatcher> list = new ArrayList<>(10);
-        StringTokenizer tokenizer = new StringTokenizer(listString, ","); //$NON-NLS-1$
-
-        while (tokenizer.hasMoreTokens()) {
-            String textFilter = tokenizer.nextToken().trim();
-            list.add(new StringMatcher(textFilter, false, false));
-        }
-
-        return list.toArray(new StringMatcher[list.size()]);
-    }
-
-    static CompilationUnit getCompilationUnitNode(IMember member, boolean resolveBindings) {
+	static CompilationUnit getCompilationUnitNode(IMember member, boolean resolveBindings) {
     	ITypeRoot typeRoot= member.getTypeRoot();
         try {
 	    	if (typeRoot.exists() && typeRoot.getBuffer() != null) {