1 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 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 42 public final void addFilter(int filter) { 43 fFilterProperties |= filter; 44 } 45 48 public final void removeFilter(int filter) { 49 fFilterProperties &= (-1 ^ filter); 50 } 51 54 public final boolean hasFilter(int filter) { 55 return (fFilterProperties & filter) != 0; 56 } 57 58 61 public boolean isFilterProperty(Object element, Object property) { 62 return false; 63 } 64 67 public boolean select(Viewer viewer, Object parentElement, Object 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("<")) { 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 } 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 |