PageRenderTime 37ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/testability-explorer/src/main/java/com/google/test/metric/RegExpWhiteList.java

http://testability-explorer.googlecode.com/
Java | 63 lines | 48 code | 15 blank | 0 comment | 7 complexity | 2f7ec80817b305fcde2d8d80f99b6294 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.google.test.metric;
  2. import static java.util.regex.Pattern.compile;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. public class RegExpWhiteList implements WhiteList {
  8. class Predicate {
  9. private final Pattern pattern;
  10. public Predicate(String regExp) {
  11. pattern = compile(regExp);
  12. }
  13. boolean isClassWhitelisted(String className){
  14. Matcher matcher = pattern.matcher(className);
  15. return matcher.find() && matcher.start() == 0;
  16. }
  17. }
  18. class NotPredicate extends Predicate{
  19. public NotPredicate(String regExp) {
  20. super(regExp);
  21. }
  22. @Override
  23. boolean isClassWhitelisted(String className) {
  24. return ! super.isClassWhitelisted(className);
  25. }
  26. }
  27. private final List<Predicate> patterns = new ArrayList<Predicate>();
  28. public RegExpWhiteList(String... regexps) {
  29. for (String regExp : regexps) {
  30. addPackage(regExp);
  31. }
  32. }
  33. public boolean isClassWhiteListed(String className) {
  34. for (Predicate predicate : patterns) {
  35. if (predicate.isClassWhitelisted(className)) {
  36. return true;
  37. }
  38. }
  39. return false;
  40. }
  41. public void addPackage(String regExp) {
  42. if (regExp.startsWith("!")) {
  43. patterns.add(new NotPredicate(regExp.substring(1)));
  44. } else {
  45. patterns.add(new Predicate(regExp));
  46. }
  47. }
  48. }