package com.redhat.ceylon.eclipse.code.outline; import static com.redhat.ceylon.model.typechecker.model.ModelUtil.isNameMatching; import static com.redhat.ceylon.eclipse.code.open.OpenDeclarationDialog.isMatchingGlob; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.widgets.Text; /** * The NamePatternFilter selects the elements which * match the given string patterns. * * @since 2.0 */ class HierarchyNamePatternFilter extends ViewerFilter { private final Text filterText; HierarchyNamePatternFilter(Text filterText) { this.filterText = filterText; } @Override public boolean select(Viewer viewer, Object parentElement, Object element) { /*JavaElementPrefixPatternMatcher matcher= getMatcher(); if (matcher == null || !(viewer instanceof TreeViewer)) return true; TreeViewer treeViewer= (TreeViewer) viewer; String matchName= ((ILabelProvider) treeViewer.getLabelProvider()).getText(element); matchName= TextProcessor.deprocess(matchName); if (matchName != null && matcher.matches(matchName)) return true; return hasUnfilteredChild(treeViewer, element);*/ TreeViewer treeViewer = (TreeViewer) viewer; if (element instanceof CeylonHierarchyNode) { String name = ((CeylonHierarchyNode) element).getName(); if (name==null) { return false; } else { String filter = filterText.getText(); if (filter.contains("*")) { return isMatchingGlob(filter, name) || hasUnfilteredChild(treeViewer, element); } else { return isNameMatching(filter, name) || hasUnfilteredChild(treeViewer, element); } } } return true; } private boolean hasUnfilteredChild(TreeViewer viewer, Object element) { Object[] children = ((ITreeContentProvider) viewer.getContentProvider()).getChildren(element); for (int i=0; i<children.length; i++) { if (select(viewer, element, children[i])) { return true; } } return false; } }