下面列出了org.eclipse.ui.dialogs.SearchPattern#setPattern ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
protected Predicate<IEObjectDescription> getSearchPredicate(final String stringPattern,
final String typeStringPattern) {
final Collection<String> namespaceDelimiters = IXtextSearchFilter.Registry.allNamespaceDelimiters();
final SearchPattern searchPattern = new SearchPattern();
searchPattern.setPattern(stringPattern);
final SearchPattern typeSearchPattern = new SearchPattern();
typeSearchPattern.setPattern(typeStringPattern);
final Collection<IXtextSearchFilter> registeredFilters = IXtextSearchFilter.Registry.allFilters();
return new Predicate<IEObjectDescription>() {
@Override
public boolean apply(IEObjectDescription input) {
if (isNameMatches(searchPattern, input, namespaceDelimiters)
&& typeSearchPattern.matches(input.getEClass().getName())) {
for (IXtextSearchFilter xtextSearchFilter : registeredFilters) {
if (xtextSearchFilter.reject(input)) {
return false;
}
}
return true;
}
return false;
}
};
}
public ModuleItemsFilter() {
super(new ModuleSearchPattern());
/*
* If there is no filter pattern present, initialize the pattern to '*'.
* This has the nice property of pre-populating the dialog list with all
* possible matches when it is first shown.
*/
if (patternMatcher.getPattern() == null
|| patternMatcher.getPattern().length() == 0) {
patternMatcher.setPattern("*");
}
// If a package pattern is present in the filter text, then set up
// a packageMatcher to do matching based on the module's package.
String stringPackage = ((ModuleSearchPattern) patternMatcher).getPackagePattern();
if (stringPackage != null) {
packageMatcher = new SearchPattern();
packageMatcher.setPattern(stringPackage);
} else {
packageMatcher = null;
}
}
/**
* Matches according to scopes.
*/
public static boolean matchItem(SearchPattern patternMatcher, IInfo info) {
//We want to match the package name in the beggining too...
String pattern = patternMatcher.getPattern();
List<String> split = StringUtils.splitAndRemoveEmptyTrimmed(pattern, '.');
if (split.size() <= 1) {
if (pattern.endsWith(".")) {
split.add("");
} else {
return patternMatcher.matches(info.getName());
}
}
//Otherwise, we have more things to match... We could match something like:
//django.AAA -- which should match all the modules that start with django and the tokens that have AAA.
String declaringModuleName = info.getDeclaringModuleName();
if (declaringModuleName == null || declaringModuleName.length() == 0) {
return false;
}
List<String> moduleParts = StringUtils.splitAndRemoveEmptyTrimmed(declaringModuleName, '.');
while (split.size() > 1) {
String head = split.remove(0);
SearchPattern headPattern = new SearchPattern();
headPattern.setPattern(head);
if (moduleParts.size() == 0) {
return false; //we cannot match it anymore
}
if (!headPattern.matches(moduleParts.remove(0))) {
return false;
}
}
//if it got here, we've matched the module correctly... let's go on and check the name.
SearchPattern tailPattern = new SearchPattern();
tailPattern.setPattern(split.get(0));
return tailPattern.matches(info.getName());
}
private static boolean checkPatternSubparts(String thisPattern, String otherPattern,
ICallback2<Boolean, SearchPattern, SearchPattern> check) {
boolean thisEndsWithPoint = thisPattern.endsWith(".");
boolean otherEndsWithPoint = otherPattern.endsWith(".");
if (thisEndsWithPoint != otherEndsWithPoint) {
return false;
}
List<String> thisSplit = StringUtils.splitAndRemoveEmptyNotTrimmed(thisPattern, '.');
List<String> otherSplit = StringUtils.splitAndRemoveEmptyNotTrimmed(otherPattern, '.');
if (thisEndsWithPoint) {
thisSplit.add("");
}
if (otherEndsWithPoint) {
otherSplit.add("");
}
if (thisSplit.size() != otherSplit.size()) {
return false;
}
for (int i = 0; i < thisSplit.size(); i++) {
String thisStr = thisSplit.get(i);
String otherStr = otherSplit.get(i);
SearchPattern thisP = new SearchPattern();
thisP.setPattern(thisStr);
SearchPattern otherP = new SearchPattern();
otherP.setPattern(otherStr);
if (!check.call(thisP, otherP)) {
return false;
}
}
return true;
}
public Filter(String pattern) {
searchPattern = new SearchPattern();
searchPattern.setPattern(pattern);
}
public void testPatternMatch() throws Exception {
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern("aa");
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aa", null, null, null, null, 0, 0)));
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", null, null, null, null, 0, 0)));
assertFalse(MatchHelper.matchItem(patternMatcher, new ClassInfo("baaa", null, null, null, null, 0, 0)));
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "coi.foo", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.aa");
assertFalse(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "invalid.foo", null, null, null, 0, 0)));
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.foo.aa");
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo.bar", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.foo.bar.aa");
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo.bar", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.foo.bar.aa.aa");
assertFalse(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo.bar", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.foo.ba.aa");
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo.bar", null, null, null, 0, 0)));
patternMatcher.setPattern("xx.fo*o.ba.aa");
assertTrue(MatchHelper.matchItem(patternMatcher, new ClassInfo("aaa", "xx.foo.bar", null, null, null, 0, 0)));
patternMatcher.setPattern("coi*.intersection");
assertTrue(MatchHelper.matchItem(patternMatcher,
new ClassInfo("Intersection", "coilib50.basic.native", null, null, null, 0, 0)));
patternMatcher.setPattern("coilib50.intersection");
assertTrue(MatchHelper.matchItem(patternMatcher,
new ClassInfo("Intersection", "coilib50.basic.native", null, null, null, 0, 0)));
patternMatcher.setPattern("coilib50.");
assertTrue(MatchHelper.matchItem(patternMatcher,
new ClassInfo("Intersection", "coilib50.basic.native", null, null, null, 0, 0)));
}