1 19 20 package edu.umd.cs.findbugs; 21 22 import java.util.LinkedList ; 23 import java.util.regex.Matcher ; 24 import java.util.regex.Pattern ; 25 26 import static edu.umd.cs.findbugs.util.Strings.replace; 27 28 42 public class ClassScreener implements IClassScreener { 43 private static final boolean DEBUG = SystemProperties.getBoolean("findbugs.classscreener.debug"); 44 45 47 private static final String SEP = "[/\\\\]"; private static final String START = "(?:^|"+SEP+")"; 50 52 private static final String JAVA_IDENTIFIER_PART = "[^./\\\\]"; 53 54 private LinkedList <Matcher > patternList; 55 56 63 public ClassScreener() { 64 this.patternList = new LinkedList <Matcher >(); 65 } 66 67 72 private static String dotsToRegex(String dotsName) { 73 78 return replace(replace(dotsName, "$", "\\$"), ".", SEP); 79 } 81 82 87 public void addAllowedClass(String className) { 88 String classRegex = START+dotsToRegex(className)+".class$"; 89 if (DEBUG) System.out.println("Class regex: " + classRegex); 90 patternList.add(Pattern.compile(classRegex).matcher("")); 91 } 92 93 99 public void addAllowedPackage(String packageName) { 100 if (packageName.endsWith(".")) { 101 packageName = packageName.substring(0, packageName.length() - 1); 102 } 103 104 String packageRegex = START+dotsToRegex(packageName)+SEP+JAVA_IDENTIFIER_PART+"+.class$"; 105 if (DEBUG) System.out.println("Package regex: " + packageRegex); 106 patternList.add(Pattern.compile(packageRegex).matcher("")); 107 } 108 109 116 public void addAllowedPrefix(String prefix) { 117 if (prefix.endsWith(".")) { 118 prefix = prefix.substring(0, prefix.length()-1); 119 } 120 if (DEBUG) System.out.println("Allowed prefix: " + prefix); 121 String packageRegex = START+dotsToRegex(prefix)+SEP; 122 if (DEBUG) System.out.println("Prefix regex: " + packageRegex); 123 patternList.add(Pattern.compile(packageRegex).matcher("")); 124 } 125 126 129 public boolean matches(String fileName) { 130 if (patternList.isEmpty()) 133 return true; 134 135 if (DEBUG) System.out.println("Matching: " + fileName); 136 137 for (Matcher matcher : patternList) { 139 if (DEBUG) System.out.print("\tTrying [" + matcher.pattern()); 140 matcher.reset(fileName); 141 if (matcher.find()) { 142 if (DEBUG) System.out.println("]: yes!"); 143 return true; 144 } 145 if (DEBUG) System.out.println("]: no"); 146 } 147 return false; 148 } 149 } 150 151 | Popular Tags |