1 /*******************************************************************************
2 * Copyright (c) 2000, 2003 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Common Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/cpl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package net.sourceforge.phpdt.internal.ui.viewsupport;
13 import net.sourceforge.phpdt.core.Flags;
14 import net.sourceforge.phpdt.core.IField;
15 import net.sourceforge.phpdt.core.IJavaElement;
16 import net.sourceforge.phpdt.core.IMember;
17 import net.sourceforge.phpdt.core.IType;
18 import net.sourceforge.phpdt.core.JavaModelException;
20 import org.eclipse.jface.viewers.Viewer;
21 import org.eclipse.jface.viewers.ViewerFilter;
24 * Filter for the methods viewer.
25 * Changing a filter property does not trigger a refiltering of the viewer
27 public class MemberFilter extends ViewerFilter {
29 public static final int FILTER_NONPUBLIC= 1;
30 public static final int FILTER_STATIC= 2;
31 public static final int FILTER_FIELDS= 4;
33 private int fFilterProperties;
36 * Modifies filter and add a property to filter for
38 public final void addFilter(int filter) {
39 fFilterProperties |= filter;
42 * Modifies filter and remove a property to filter for
44 public final void removeFilter(int filter) {
45 fFilterProperties &= (-1 ^ filter);
48 * Tests if a property is filtered
50 public final boolean hasFilter(int filter) {
51 return (fFilterProperties & filter) != 0;
55 * @see ViewerFilter@isFilterProperty
57 public boolean isFilterProperty(Object element, Object property) {
61 * @see ViewerFilter@select
63 public boolean select(Viewer viewer, Object parentElement, Object element) {
65 if (hasFilter(FILTER_FIELDS) && element instanceof IField) {
68 if (element instanceof IMember) {
69 IMember member= (IMember)element;
70 if (member.getElementName().startsWith("<")) { // filter out <clinit> //$NON-NLS-1$
73 int flags= member.getFlags();
74 if (hasFilter(FILTER_STATIC) && (Flags.isStatic(flags) || isFieldInInterface(member)) && member.getElementType() != IJavaElement.TYPE) {
77 if (hasFilter(FILTER_NONPUBLIC) && !Flags.isPublic(flags) && !isMemberInInterface(member) && !isTopLevelType(member)) {
81 } catch (JavaModelException e) {
87 private boolean isMemberInInterface(IMember member) throws JavaModelException {
88 IType parent= member.getDeclaringType();
89 return parent != null && parent.isInterface();
92 private boolean isFieldInInterface(IMember member) throws JavaModelException {
93 return (member.getElementType() == IJavaElement.FIELD) && member.getDeclaringType().isInterface();
96 private boolean isTopLevelType(IMember member) throws JavaModelException {
97 IType parent= member.getDeclaringType();
98 return parent == null;