1 7 8 package com.sun.mirror.util; 9 10 11 import java.util.ArrayList ; 12 import java.util.Collection ; 13 14 import com.sun.mirror.declaration.Declaration; 15 import com.sun.mirror.declaration.Modifier; 16 17 import static com.sun.mirror.declaration.Modifier.*; 18 19 20 59 60 public class DeclarationFilter { 61 62 64 67 public static final DeclarationFilter FILTER_PUBLIC = 68 new AccessFilter(PUBLIC); 69 70 73 public static final DeclarationFilter FILTER_PROTECTED = 74 new AccessFilter(PROTECTED); 75 76 80 public static final DeclarationFilter FILTER_PUBLIC_OR_PROTECTED = 81 new AccessFilter(PUBLIC, PROTECTED); 82 83 87 public static final DeclarationFilter FILTER_PACKAGE = 88 new AccessFilter(); 89 90 93 public static final DeclarationFilter FILTER_PRIVATE = 94 new AccessFilter(PRIVATE); 95 96 97 100 public DeclarationFilter() { 101 } 102 103 104 105 107 114 public static DeclarationFilter getFilter( 115 final Collection <Modifier> mods) { 116 return new DeclarationFilter() { 117 public boolean matches(Declaration d) { 118 return d.getModifiers().containsAll(mods); 119 } 120 }; 121 } 122 123 134 public static DeclarationFilter getFilter( 135 final Class <? extends Declaration> kind) { 136 return new DeclarationFilter() { 137 public boolean matches(Declaration d) { 138 return kind.isInstance(d); 139 } 140 }; 141 } 142 143 151 public DeclarationFilter and(DeclarationFilter f) { 152 final DeclarationFilter f1 = this; 153 final DeclarationFilter f2 = f; 154 return new DeclarationFilter() { 155 public boolean matches(Declaration d) { 156 return f1.matches(d) && f2.matches(d); 157 } 158 }; 159 } 160 161 169 public DeclarationFilter or(DeclarationFilter f) { 170 final DeclarationFilter f1 = this; 171 final DeclarationFilter f2 = f; 172 return new DeclarationFilter() { 173 public boolean matches(Declaration d) { 174 return f1.matches(d) || f2.matches(d); 175 } 176 }; 177 } 178 179 186 public DeclarationFilter not() { 187 return new DeclarationFilter() { 188 public boolean matches(Declaration d) { 189 return !DeclarationFilter.this.matches(d); 190 } 191 }; 192 } 193 194 195 196 198 206 public boolean matches(Declaration decl) { 207 return true; 208 } 209 210 220 public <D extends Declaration> Collection <D> filter(Collection <D> decls) { 221 ArrayList <D> res = new ArrayList <D>(decls.size()); 222 for (D d : decls) { 223 if (matches(d)) { 224 res.add(d); 225 } 226 } 227 return res; 228 } 229 230 244 public <D extends Declaration> Collection <D> 245 filter(Collection <? extends Declaration> decls, Class <D> resType) { 246 ArrayList <D> res = new ArrayList <D>(decls.size()); 247 for (Declaration d : decls) { 248 if (resType.isInstance(d) && matches(d)) { 249 res.add(resType.cast(d)); 250 } 251 } 252 return res; 253 } 254 255 256 257 260 private static class AccessFilter extends DeclarationFilter { 261 262 private Modifier mod1 = null; 265 266 private Modifier mod2 = null; 268 269 AccessFilter() { 272 } 273 274 AccessFilter(Modifier m) { 276 mod1 = m; 277 } 278 279 AccessFilter(Modifier m1, Modifier m2) { 281 mod1 = m1; 282 mod2 = m2; 283 } 284 285 public boolean matches(Declaration d) { 286 Collection <Modifier> mods = d.getModifiers(); 287 if (mod1 == null) { return !(mods.contains(PUBLIC) || 289 mods.contains(PROTECTED) || 290 mods.contains(PRIVATE)); 291 } 292 return mods.contains(mod1) && 293 (mod2 == null || mods.contains(mod2)); 294 } 295 } 296 } 297 | Popular Tags |