Bug 570469 - Differentiate normal imports from static imports in search

Changes the existing imports filter to omit static imports and adds a
new static imports filter to omit non-static imports.

Change-Id: I7572af8ad18f7cfba95aa0b5159e7faab185ea69
Signed-off-by: Julian Ruppel <julian.ruppel@sap.com>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/179870
Tested-by: Sarika Sinha <sarika.sinha@in.ibm.com>
Tested-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
Reviewed-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
index d4448b9..c6f281e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/JavaMatchFilter.java
@@ -21,6 +21,7 @@
 import org.eclipse.search.ui.text.Match;
 import org.eclipse.search.ui.text.MatchFilter;
 
+import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IImportDeclaration;
@@ -108,6 +109,7 @@
 	private static final JavaMatchFilter MAINCODE_FILTER= new MainCodeFilter();
 	private static final JavaMatchFilter POTENTIAL_FILTER= new PotentialFilter();
 	private static final JavaMatchFilter IMPORT_FILTER= new ImportFilter();
+	private static final JavaMatchFilter STATIC_IMPORT_FILTER= new StaticImportFilter();
 	private static final JavaMatchFilter JAVADOC_FILTER= new JavadocFilter();
 	private static final JavaMatchFilter READ_FILTER= new ReadFilter();
 	private static final JavaMatchFilter WRITE_FILTER= new WriteFilter();
@@ -127,6 +129,7 @@
 			MAINCODE_FILTER,
 			POTENTIAL_FILTER,
 			IMPORT_FILTER,
+			STATIC_IMPORT_FILTER,
 			JAVADOC_FILTER,
 			READ_FILTER,
 			WRITE_FILTER,
@@ -281,7 +284,22 @@
 class ImportFilter extends JavaMatchFilter {
 	@Override
 	public boolean filters(JavaElementMatch match) {
-		return match.getElement() instanceof IImportDeclaration;
+
+		Object element= match.getElement();
+		if (element instanceof IImportDeclaration) {
+			return !isStaticImport((IImportDeclaration)element);
+		}
+
+		return false;
+	}
+
+	protected boolean isStaticImport(IImportDeclaration importElement) {
+		try {
+			return Flags.isStatic(importElement.getFlags());
+		} catch (JavaModelException e) {
+			JavaPlugin.log(e);
+		}
+		return false;
 	}
 
 	@Override
@@ -330,6 +348,40 @@
 	}
 }
 
+class StaticImportFilter extends ImportFilter {
+
+	@Override
+	public boolean filters(JavaElementMatch match) {
+
+		Object element= match.getElement();
+		if (element instanceof IImportDeclaration) {
+			return isStaticImport((IImportDeclaration)element);
+		}
+
+		return false;
+	}
+
+	@Override
+	public String getName() {
+		return SearchMessages.MatchFilter_StaticImportFilter_name;
+	}
+
+	@Override
+	public String getActionLabel() {
+		return SearchMessages.MatchFilter_StaticImportFilter_actionLabel;
+	}
+
+	@Override
+	public String getDescription() {
+		return SearchMessages.MatchFilter_StaticImportFilter_description;
+	}
+
+	@Override
+	public String getID() {
+		return "filter_static_imports"; //$NON-NLS-1$
+	}
+}
+
 abstract class VariableFilter extends JavaMatchFilter {
 	@Override
 	public boolean isApplicable(JavaSearchQuery query) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.java
index 5d77304..f8e6ab2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.java
@@ -228,6 +228,9 @@
 	public static String MatchFilter_ImportFilter_name;
 	public static String MatchFilter_ImportFilter_actionLabel;
 	public static String MatchFilter_ImportFilter_description;
+	public static String MatchFilter_StaticImportFilter_name;
+	public static String MatchFilter_StaticImportFilter_actionLabel;
+	public static String MatchFilter_StaticImportFilter_description;
 	public static String MatchFilter_WriteFilter_name;
 	public static String MatchFilter_WriteFilter_actionLabel;
 	public static String MatchFilter_WriteFilter_description;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
index e517363..f826d40 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchMessages.properties
@@ -257,8 +257,11 @@
 
 MatchFilter_ImportFilter_name=In imports
 MatchFilter_ImportFilter_actionLabel=In &Imports
-MatchFilter_ImportFilter_description=Filters matches that are in import statements
+MatchFilter_ImportFilter_description=Filters matches that are regular (not static) import statements
 
+MatchFilter_StaticImportFilter_name=In Static imports
+MatchFilter_StaticImportFilter_actionLabel=In S&tatic imports
+MatchFilter_StaticImportFilter_description=Filters matches that are in static import statements
 
 MatchFilter_WriteFilter_name=Writes
 MatchFilter_WriteFilter_actionLabel=&Writes