blob: 129dcd46d4b3861107394103362d1044d9dabbd9 [file] [log] [blame]
rganor9741d242008-07-07 08:37:05 +00001/*******************************************************************************
Alexander Kurtakov370e4d72017-02-24 21:08:51 +02002 * Copyright (c) 2000, 2017 IBM Corporation and others.
Dawid PakuĊ‚af3439f82018-10-15 18:00:33 +02003 * This program and the accompanying materials are made available under the
4 * terms of the Eclipse Public License v. 2.0 which is available at
5 * http://www.eclipse.org/legal/epl-2.0.
6 *
7 * SPDX-License-Identifier: EPL-2.0
rganor9741d242008-07-07 08:37:05 +00008 *
rganor9741d242008-07-07 08:37:05 +00009 *******************************************************************************/
10package org.eclipse.dltk.internal.corext.util;
11
12import java.util.StringTokenizer;
13
14import org.eclipse.dltk.core.IMethod;
15import org.eclipse.dltk.core.search.MethodNameMatch;
16import org.eclipse.dltk.internal.ui.util.StringMatcher;
17import org.eclipse.dltk.ui.IDLTKUILanguageToolkit;
18import org.eclipse.dltk.ui.PreferenceConstants;
19import org.eclipse.jface.preference.IPreferenceStore;
20import org.eclipse.jface.util.IPropertyChangeListener;
21import org.eclipse.jface.util.PropertyChangeEvent;
22
23/**
24 *
25 */
26public class MethodFilter implements IPropertyChangeListener {
27 private IDLTKUILanguageToolkit fToolkit;
28
29 public MethodFilter(IDLTKUILanguageToolkit toolkit) {
30 this.fToolkit = toolkit;
31 }
32
33 public boolean isFiltered(String fullMethodName) {
34 return filter(fullMethodName);
35 }
36
37 public boolean isFiltered(char[] fullMethodName) {
38 return filter(new String(fullMethodName));
39 }
40
41 protected String concatenate(char[] packageName, char[] MethodName) {
42 return new String(packageName) + " " + new String(MethodName); //$NON-NLS-1$
43 }
44
45 public boolean isFiltered(char[] packageName, char[] MethodName) {
46 return filter(concatenate(packageName, MethodName));
47 }
48
49 public boolean isFiltered(IMethod method) {
50 if (hasFilters()) {
51 return filter(method.getFullyQualifiedName());
52 }
53 return false;
54 }
55
56 public boolean isFiltered(MethodNameMatch match) {
57 return filter(match.getFullyQualifiedName());
58 }
59
60 private StringMatcher[] fStringMatchers;
61
62 protected IPreferenceStore getPreferenceStore() {
63 return this.fToolkit.getPreferenceStore();
64 }
65
66 /**
Alexander Kurtakov370e4d72017-02-24 21:08:51 +020067 *
rganor9741d242008-07-07 08:37:05 +000068 */
69 public MethodFilter() {
70 fStringMatchers = null;
71 getPreferenceStore().addPropertyChangeListener(this);
72 }
73
74 private synchronized StringMatcher[] getStringMatchers() {
75 if (fStringMatchers == null) {
76 String str = this.getPreferenceStore().getString(PreferenceConstants.METHODFILTER_ENABLED);
77 StringTokenizer tok = new StringTokenizer(str, ";"); //$NON-NLS-1$
78 int nTokens = tok.countTokens();
79
80 fStringMatchers = new StringMatcher[nTokens];
81 for (int i = 0; i < nTokens; i++) {
82 String curr = tok.nextToken();
83 if (curr.length() > 0) {
84 fStringMatchers[i] = new StringMatcher(curr, false, false);
85 }
86 }
87 }
88 return fStringMatchers;
89 }
90
91 public void dispose() {
92 this.getPreferenceStore().removePropertyChangeListener(this);
93 fStringMatchers = null;
94 }
95
96 public boolean hasFilters() {
97 return getStringMatchers().length > 0;
98 }
99
100 public boolean filter(String fullMethodName) {
101 StringMatcher[] matchers = getStringMatchers();
102 for (int i = 0; i < matchers.length; i++) {
103 StringMatcher curr = matchers[i];
104 if (curr.match(fullMethodName)) {
105 return true;
106 }
107 }
108 return false;
109 }
110
Alexander Kurtakov370e4d72017-02-24 21:08:51 +0200111 @Override
rganor9741d242008-07-07 08:37:05 +0000112 public synchronized void propertyChange(PropertyChangeEvent event) {
113 if (PreferenceConstants.METHODFILTER_ENABLED.equals(event.getProperty())) {
114 fStringMatchers = null;
115 }
116 }
117
118}