KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > viewsupport > MemberFilter


1 /*******************************************************************************
2  * Copyright (c) 2000, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.ui.viewsupport;
12
13 import org.eclipse.jface.viewers.Viewer;
14 import org.eclipse.jface.viewers.ViewerFilter;
15
16 import org.eclipse.jdt.core.Flags;
17 import org.eclipse.jdt.core.IField;
18 import org.eclipse.jdt.core.IJavaElement;
19 import org.eclipse.jdt.core.IMember;
20 import org.eclipse.jdt.core.IType;
21 import org.eclipse.jdt.core.JavaModelException;
22
23 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
24
25 /**
26  * Filter for the methods viewer.
27  * Changing a filter property does not trigger a refiltering of the viewer
28  */

29 public class MemberFilter extends ViewerFilter {
30
31     public static final int FILTER_NONPUBLIC= 1;
32     public static final int FILTER_STATIC= 2;
33     public static final int FILTER_FIELDS= 4;
34     public static final int FILTER_LOCALTYPES= 8;
35     
36     private int fFilterProperties;
37
38
39     /**
40      * Modifies filter and add a property to filter for
41      */

42     public final void addFilter(int filter) {
43         fFilterProperties |= filter;
44     }
45     /**
46      * Modifies filter and remove a property to filter for
47      */

48     public final void removeFilter(int filter) {
49         fFilterProperties &= (-1 ^ filter);
50     }
51     /**
52      * Tests if a property is filtered
53      */

54     public final boolean hasFilter(int filter) {
55         return (fFilterProperties & filter) != 0;
56     }
57     
58     /*
59      * @see ViewerFilter#isFilterProperty(java.lang.Object, java.lang.String)
60      */

61     public boolean isFilterProperty(Object JavaDoc element, Object JavaDoc property) {
62         return false;
63     }
64     /*
65      * @see ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
66      */

67     public boolean select(Viewer viewer, Object JavaDoc parentElement, Object JavaDoc element) {
68         try {
69             if (element instanceof IMember) {
70                 IMember member= (IMember) element;
71                 int memberType= member.getElementType();
72                 
73                 if (hasFilter(FILTER_FIELDS) && memberType == IJavaElement.FIELD) {
74                     return false;
75                 }
76
77                 if (hasFilter(FILTER_LOCALTYPES) && memberType == IJavaElement.TYPE && isLocalType((IType) member)) {
78                     return false;
79                 }
80                 
81                 if (member.getElementName().startsWith("<")) { // filter out <clinit> //$NON-NLS-1$
82
return false;
83                 }
84                 int flags= member.getFlags();
85                 if (hasFilter(FILTER_STATIC) && (Flags.isStatic(flags) || isFieldInInterfaceOrAnnotation(member)) && memberType != IJavaElement.TYPE) {
86                     return false;
87                 }
88                 if (hasFilter(FILTER_NONPUBLIC) && !Flags.isPublic(flags) && !isMemberInInterfaceOrAnnotation(member) && !isTopLevelType(member) && !isEnumConstant(member)) {
89                     return false;
90                 }
91             }
92         } catch (JavaModelException e) {
93             // ignore
94
}
95         return true;
96     }
97     
98     private boolean isLocalType(IType type) {
99         IJavaElement parent= type.getParent();
100         return parent instanceof IMember && !(parent instanceof IType);
101     }
102     
103     private boolean isMemberInInterfaceOrAnnotation(IMember member) throws JavaModelException {
104         IType parent= member.getDeclaringType();
105         return parent != null && JavaModelUtil.isInterfaceOrAnnotation(parent);
106     }
107     
108     private boolean isFieldInInterfaceOrAnnotation(IMember member) throws JavaModelException {
109         return (member.getElementType() == IJavaElement.FIELD) && JavaModelUtil.isInterfaceOrAnnotation(member.getDeclaringType());
110     }
111     
112     private boolean isTopLevelType(IMember member) {
113         IType parent= member.getDeclaringType();
114         return parent == null;
115     }
116     
117     private boolean isEnumConstant(IMember member) throws JavaModelException {
118         return (member.getElementType() == IJavaElement.FIELD) && ((IField)member).isEnumConstant();
119     }
120 }
121
Popular Tags