1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.search;
13 import java.util.ArrayList;
14 import java.util.HashSet;
15 import java.util.StringTokenizer;
17 import org.eclipse.search.ui.text.Match;
18 import org.eclipse.search.ui.text.MatchFilter;
20 import org.eclipse.jdt.core.IImportDeclaration;
21 import org.eclipse.jdt.core.IJavaElement;
22 import org.eclipse.jdt.core.IMember;
23 import org.eclipse.jdt.core.IMethod;
24 import org.eclipse.jdt.core.IType;
25 import org.eclipse.jdt.core.ITypeParameter;
26 import org.eclipse.jdt.core.JavaModelException;
27 import org.eclipse.jdt.core.search.SearchMatch;
28 import org.eclipse.jdt.core.search.SearchPattern;
30 import org.eclipse.jdt.internal.corext.util.JdtFlags;
32 import org.eclipse.jdt.ui.search.QuerySpecification;
34 import org.eclipse.jdt.internal.ui.JavaPlugin;
36 abstract class JavaMatchFilter extends MatchFilter {
38 public abstract boolean filters(JavaElementMatch match);
41 * Returns whether this filter is applicable for this query.
43 * @param query the query
44 * @return <code>true</code> if this match filter is applicable for the given query
46 public abstract boolean isApplicable(JavaSearchQuery query);
49 * @see org.eclipse.search.ui.text.MatchFilter#filters(org.eclipse.search.ui.text.Match)
52 public boolean filters(Match match) {
53 if (match instanceof JavaElementMatch) {
54 return filters((JavaElementMatch) match);
59 private static final String SETTINGS_LAST_USED_FILTERS= "filters_last_used"; //$NON-NLS-1$
61 public static MatchFilter[] getLastUsedFilters() {
62 String string= JavaPlugin.getDefault().getDialogSettings().get(SETTINGS_LAST_USED_FILTERS);
64 return decodeFiltersString(string);
66 return getDefaultFilters();
69 public static void setLastUsedFilters(MatchFilter[] filters) {
70 String encoded= encodeFilters(filters);
71 JavaPlugin.getDefault().getDialogSettings().put(SETTINGS_LAST_USED_FILTERS, encoded);
74 public static MatchFilter[] getDefaultFilters() {
75 return new MatchFilter[] { IMPORT_FILTER };
78 private static String encodeFilters(MatchFilter[] enabledFilters) {
79 StringBuffer buf= new StringBuffer();
80 for (int i= 0; i < enabledFilters.length; i++) {
81 MatchFilter matchFilter= enabledFilters[i];
82 buf.append(matchFilter.getID());
85 return buf.toString();
88 private static JavaMatchFilter[] decodeFiltersString(String encodedString) {
89 StringTokenizer tokenizer= new StringTokenizer(encodedString, String.valueOf(';'));
90 HashSet<JavaMatchFilter> result= new HashSet<JavaMatchFilter>();
91 while (tokenizer.hasMoreTokens()) {
92 JavaMatchFilter curr= findMatchFilter(tokenizer.nextToken());
97 return result.toArray(new JavaMatchFilter[result.size()]);
100 private static final JavaMatchFilter POTENTIAL_FILTER= new PotentialFilter();
101 private static final JavaMatchFilter IMPORT_FILTER= new ImportFilter();
102 private static final JavaMatchFilter JAVADOC_FILTER= new JavadocFilter();
103 private static final JavaMatchFilter READ_FILTER= new ReadFilter();
104 private static final JavaMatchFilter WRITE_FILTER= new WriteFilter();
106 private static final JavaMatchFilter POLYMORPHIC_FILTER= new PolymorphicFilter();
107 private static final JavaMatchFilter INEXACT_FILTER= new InexactMatchFilter();
108 private static final JavaMatchFilter ERASURE_FILTER= new ErasureMatchFilter();
110 private static final JavaMatchFilter NON_PUBLIC_FILTER= new NonPublicFilter();
111 private static final JavaMatchFilter STATIC_FILTER= new StaticFilter();
112 private static final JavaMatchFilter NON_STATIC_FILTER= new NonStaticFilter();
113 private static final JavaMatchFilter DEPRECATED_FILTER= new DeprecatedFilter();
114 private static final JavaMatchFilter NON_DEPRECATED_FILTER= new NonDeprecatedFilter();
116 private static final JavaMatchFilter[] ALL_FILTERS= new JavaMatchFilter[] {
131 NON_DEPRECATED_FILTER
134 public static JavaMatchFilter[] allFilters() {
138 public static JavaMatchFilter[] allFilters(JavaSearchQuery query) {
139 ArrayList<JavaMatchFilter> res= new ArrayList<JavaMatchFilter>();
140 for (int i= 0; i < ALL_FILTERS.length; i++) {
141 JavaMatchFilter curr= ALL_FILTERS[i];
142 if (curr.isApplicable(query)) {
146 return res.toArray(new JavaMatchFilter[res.size()]);
149 private static JavaMatchFilter findMatchFilter(String id) {
150 for (int i= 0; i < ALL_FILTERS.length; i++) {
151 JavaMatchFilter matchFilter= ALL_FILTERS[i];
152 if (matchFilter.getID().equals(id))
159 class PotentialFilter extends JavaMatchFilter {
161 public boolean filters(JavaElementMatch match) {
162 return match.getAccuracy() == SearchMatch.A_INACCURATE;
166 public String getName() {
167 return SearchMessages.MatchFilter_PotentialFilter_name;
171 public String getActionLabel() {
172 return SearchMessages.MatchFilter_PotentialFilter_actionLabel;
176 public String getDescription() {
177 return SearchMessages.MatchFilter_PotentialFilter_description;
181 public boolean isApplicable(JavaSearchQuery query) {
186 public String getID() {
187 return "filter_potential"; //$NON-NLS-1$
191 class ImportFilter extends JavaMatchFilter {
193 public boolean filters(JavaElementMatch match) {
194 return match.getElement() instanceof IImportDeclaration;
198 public String getName() {
199 return SearchMessages.MatchFilter_ImportFilter_name;
203 public String getActionLabel() {
204 return SearchMessages.MatchFilter_ImportFilter_actionLabel;
208 public String getDescription() {
209 return SearchMessages.MatchFilter_ImportFilter_description;
213 public boolean isApplicable(JavaSearchQuery query) {
214 QuerySpecification spec= query.getSpecification();
215 return spec.generated_7845922867642781666();
219 public String getID() {
220 return "filter_imports"; //$NON-NLS-1$
224 abstract class VariableFilter extends JavaMatchFilter {
226 public boolean isApplicable(JavaSearchQuery query) {
227 QuerySpecification spec= query.getSpecification();
228 return spec.generated_6462544269453860586();
233 class WriteFilter extends VariableFilter {
235 public boolean filters(JavaElementMatch match) {
236 return match.generated_7731867086454870710();
239 public String getName() {
240 return SearchMessages.MatchFilter_WriteFilter_name;
243 public String getActionLabel() {
244 return SearchMessages.MatchFilter_WriteFilter_actionLabel;
247 public String getDescription() {
248 return SearchMessages.MatchFilter_WriteFilter_description;
251 public String getID() {
252 return "filter_writes"; //$NON-NLS-1$
256 class ReadFilter extends VariableFilter {
258 public boolean filters(JavaElementMatch match) {
259 return match.generated_6093278864195679574();
262 public String getName() {
263 return SearchMessages.MatchFilter_ReadFilter_name;
266 public String getActionLabel() {
267 return SearchMessages.MatchFilter_ReadFilter_actionLabel;
270 public String getDescription() {
271 return SearchMessages.MatchFilter_ReadFilter_description;
274 public String getID() {
275 return "filter_reads"; //$NON-NLS-1$
279 class JavadocFilter extends JavaMatchFilter {
281 public boolean filters(JavaElementMatch match) {
282 return match.isJavadoc();
285 public String getName() {
286 return SearchMessages.MatchFilter_JavadocFilter_name;
289 public String getActionLabel() {
290 return SearchMessages.MatchFilter_JavadocFilter_actionLabel;
293 public String getDescription() {
294 return SearchMessages.MatchFilter_JavadocFilter_description;
297 public boolean isApplicable(JavaSearchQuery query) {
301 public String getID() {
302 return "filter_javadoc"; //$NON-NLS-1$
306 class PolymorphicFilter extends JavaMatchFilter {
308 public boolean filters(JavaElementMatch match) {
309 return match.isSuperInvocation();
313 public String getName() {
314 return SearchMessages.MatchFilter_PolymorphicFilter_name;
318 public String getActionLabel() {
319 return SearchMessages.MatchFilter_PolymorphicFilter_actionLabel;
323 public String getDescription() {
324 return SearchMessages.MatchFilter_PolymorphicFilter_description;
328 public boolean isApplicable(JavaSearchQuery query) {
329 QuerySpecification spec= query.getSpecification();
330 return spec.generated_7178017679938079001();
334 public String getID() {
335 return "filter_polymorphic"; //$NON-NLS-1$
339 public abstract class GenericTypeFilter extends JavaMatchFilter {
341 public boolean isApplicable(JavaSearchQuery query) {
342 QuerySpecification spec= query.getSpecification();
343 return spec.generated_5909141912720500817();
346 public static boolean isParameterizedElement(IJavaElement element) {
347 while (element != null) {
348 ITypeParameter[] typeParameters= null;
350 if (element instanceof IType) {
351 typeParameters= ((IType)element).getTypeParameters();
352 } else if (element instanceof IMethod) {
353 typeParameters= ((IMethod)element).getTypeParameters();
355 } catch (JavaModelException e) {
358 if (typeParameters == null)
361 if (typeParameters.length > 0)
364 element= element.getParent();
370 class ErasureMatchFilter extends GenericTypeFilter {
372 public boolean filters(JavaElementMatch match) {
373 return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH | SearchPattern.R_EQUIVALENT_MATCH)) == 0;
376 public String getName() {
377 return SearchMessages.MatchFilter_ErasureFilter_name;
380 public String getActionLabel() {
381 return SearchMessages.MatchFilter_ErasureFilter_actionLabel;
384 public String getDescription() {
385 return SearchMessages.MatchFilter_ErasureFilter_description;
388 public String getID() {
389 return "filter_erasure"; //$NON-NLS-1$
393 class InexactMatchFilter extends GenericTypeFilter {
395 public boolean filters(JavaElementMatch match) {
396 return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH)) == 0;
399 public String getName() {
400 return SearchMessages.MatchFilter_InexactFilter_name;
403 public String getActionLabel() {
404 return SearchMessages.MatchFilter_InexactFilter_actionLabel;
407 public String getDescription() {
408 return SearchMessages.MatchFilter_InexactFilter_description;
411 public String getID() {
412 return "filter_inexact"; //$NON-NLS-1$
416 abstract class ModifierFilter extends JavaMatchFilter {
418 public boolean isApplicable(JavaSearchQuery query) {
423 class NonPublicFilter extends ModifierFilter {
425 public boolean filters(JavaElementMatch match) {
426 Object element= match.getElement();
427 if (element instanceof IMember) {
429 return ! JdtFlags.isPublic((IMember) element);
430 } catch (JavaModelException e) {
437 public String getName() {
438 return SearchMessages.MatchFilter_NonPublicFilter_name;
441 public String getActionLabel() {
442 return SearchMessages.MatchFilter_NonPublicFilter_actionLabel;
445 public String getDescription() {
446 return SearchMessages.MatchFilter_NonPublicFilter_description;
449 public String getID() {
450 return "filter_non_public"; //$NON-NLS-1$
454 class StaticFilter extends ModifierFilter {
456 public boolean filters(JavaElementMatch match) {
457 Object element= match.getElement();
458 if (element instanceof IMember) {
460 return JdtFlags.isStatic((IMember) element);
461 } catch (JavaModelException e) {
468 public String getName() {
469 return SearchMessages.MatchFilter_StaticFilter_name;
472 public String getActionLabel() {
473 return SearchMessages.MatchFilter_StaticFilter_actionLabel;
476 public String getDescription() {
477 return SearchMessages.MatchFilter_StaticFilter_description;
480 public String getID() {
481 return "filter_static"; //$NON-NLS-1$
485 class NonStaticFilter extends ModifierFilter {
487 public boolean filters(JavaElementMatch match) {
488 Object element= match.getElement();
489 if (element instanceof IMember) {
491 return ! JdtFlags.isStatic((IMember) element);
492 } catch (JavaModelException e) {
499 public String getName() {
500 return SearchMessages.MatchFilter_NonStaticFilter_name;
503 public String getActionLabel() {
504 return SearchMessages.MatchFilter_NonStaticFilter_actionLabel;
507 public String getDescription() {
508 return SearchMessages.MatchFilter_NonStaticFilter_description;
511 public String getID() {
512 return "filter_non_static"; //$NON-NLS-1$
516 class DeprecatedFilter extends ModifierFilter {
518 public boolean filters(JavaElementMatch match) {
519 Object element= match.getElement();
520 if (element instanceof IMember) {
522 return JdtFlags.isDeprecated((IMember) element);
523 } catch (JavaModelException e) {
530 public String getName() {
531 return SearchMessages.MatchFilter_DeprecatedFilter_name;
534 public String getActionLabel() {
535 return SearchMessages.MatchFilter_DeprecatedFilter_actionLabel;
538 public String getDescription() {
539 return SearchMessages.MatchFilter_DeprecatedFilter_description;
542 public String getID() {
543 return "filter_deprecated"; //$NON-NLS-1$
547 class NonDeprecatedFilter extends ModifierFilter {
549 public boolean filters(JavaElementMatch match) {
550 Object element= match.getElement();
551 if (element instanceof IMember) {
553 return !JdtFlags.isDeprecated((IMember) element);
554 } catch (JavaModelException e) {
561 public String getName() {
562 return SearchMessages.MatchFilter_NonDeprecatedFilter_name;
565 public String getActionLabel() {
566 return SearchMessages.MatchFilter_NonDeprecatedFilter_actionLabel;
569 public String getDescription() {
570 return SearchMessages.MatchFilter_NonDeprecatedFilter_description;
573 public String getID() {
574 return "filter_non_deprecated"; //$NON-NLS-1$