X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/MemberFilter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/MemberFilter.java new file mode 100644 index 0000000..4352cc8 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/viewsupport/MemberFilter.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.viewsupport; + +import net.sourceforge.phpdt.core.Flags; +import net.sourceforge.phpdt.core.IField; +import net.sourceforge.phpdt.core.IJavaElement; +import net.sourceforge.phpdt.core.IMember; +import net.sourceforge.phpdt.core.IType; +import net.sourceforge.phpdt.core.JavaModelException; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; + +/** + * Filter for the methods viewer. Changing a filter property does not trigger a + * refiltering of the viewer + */ +public class MemberFilter extends ViewerFilter { + + public static final int FILTER_NONPUBLIC = 1; + + public static final int FILTER_STATIC = 2; + + public static final int FILTER_FIELDS = 4; + + private int fFilterProperties; + + /** + * Modifies filter and add a property to filter for + */ + public final void addFilter(int filter) { + fFilterProperties |= filter; + } + + /** + * Modifies filter and remove a property to filter for + */ + public final void removeFilter(int filter) { + fFilterProperties &= (-1 ^ filter); + } + + /** + * Tests if a property is filtered + */ + public final boolean hasFilter(int filter) { + return (fFilterProperties & filter) != 0; + } + + /* + * @see ViewerFilter@isFilterProperty + */ +// public boolean isFilterProperty(Object element, Object property) { +// return false; +// } + + /* + * @see ViewerFilter@select + */ + public boolean select(Viewer viewer, Object parentElement, Object element) { + try { + if (hasFilter(FILTER_FIELDS) && element instanceof IField) { + return false; + } + if (element instanceof IMember) { + IMember member = (IMember) element; + if (member.getElementName().startsWith("<")) { // filter out + // + // //$NON-NLS-1$ + return false; + } + int flags = member.getFlags(); + if (hasFilter(FILTER_STATIC) + && (Flags.isStatic(flags) || isFieldInInterface(member)) + && member.getElementType() != IJavaElement.TYPE) { + return false; + } + if (hasFilter(FILTER_NONPUBLIC) && !Flags.isPublic(flags) + && !isMemberInInterface(member) + && !isTopLevelType(member)) { + return false; + } + } + } catch (JavaModelException e) { + // ignore + } + return true; + } + + private boolean isMemberInInterface(IMember member) + throws JavaModelException { + IType parent = member.getDeclaringType(); + return parent != null && parent.isInterface(); + } + + private boolean isFieldInInterface(IMember member) + throws JavaModelException { + return (member.getElementType() == IJavaElement.FIELD) + && member.getDeclaringType().isInterface(); + } + + private boolean isTopLevelType(IMember member) throws JavaModelException { + IType parent = member.getDeclaringType(); + return parent == null; + } +}