Empty string means '.*' pattern

This commit is contained in:
Andrey Breslav
2013-05-12 10:44:19 +02:00
parent 90661e8706
commit 35f2993ec9
@@ -30,6 +30,7 @@ import java.util.regex.Pattern;
import static org.jetbrains.asm4.Opcodes.*;
public class InterceptionInstrumenter implements Instrumenter {
private static final Pattern ANYTHING = Pattern.compile(".*");
private final Map<String, ClassMatcher> classPatterns = new LinkedHashMap<String, ClassMatcher>();
private final Set<String> neverMatchedClassPatterns = new LinkedHashSet<String>();
@@ -55,8 +56,8 @@ public class InterceptionInstrumenter implements Instrumenter {
throw new IllegalArgumentException("Non-static field annotated @MethodInterceptor: " + field);
}
Pattern classPattern = Pattern.compile(annotation.className());
List<MethodInstrumenter> instrumenters = addClassPattern(classPattern.pattern());
Pattern classPattern = compilePattern(annotation.className());
List<MethodInstrumenter> instrumenters = addClassPattern(classPattern);
try {
Object interceptor = field.get(null);
@@ -93,11 +94,12 @@ public class InterceptionInstrumenter implements Instrumenter {
String nameFromAnnotation = annotation.methodName();
String methodName = nameFromAnnotation.isEmpty() ? field.getName() : nameFromAnnotation;
MethodInstrumenterImpl instrumenter = new MethodInstrumenterImpl(
Pattern.compile(methodName),
Pattern.compile(annotation.erasedSignature()),
annotation.allowMultipleMatches(),
enterData,
exitData);
compilePattern(methodName),
compilePattern(annotation.erasedSignature()),
annotation.allowMultipleMatches(),
enterData,
exitData
);
instrumenters.add(instrumenter);
neverMatchedInstrumenters.add(instrumenter);
}
@@ -108,12 +110,12 @@ public class InterceptionInstrumenter implements Instrumenter {
}
}
private List<MethodInstrumenter> addClassPattern(String classPattern) {
ClassMatcher classMatcher = classPatterns.get(classPattern);
private List<MethodInstrumenter> addClassPattern(Pattern classPattern) {
ClassMatcher classMatcher = classPatterns.get(classPattern.pattern());
if (classMatcher == null) {
classMatcher = new ClassMatcher(Pattern.compile(classPattern));
classPatterns.put(classPattern, classMatcher);
neverMatchedClassPatterns.add(classPattern);
classMatcher = new ClassMatcher(classPattern);
classPatterns.put(classPattern.pattern(), classMatcher);
neverMatchedClassPatterns.add(classPattern.pattern());
}
return classMatcher.instrumenters;
}
@@ -308,6 +310,11 @@ public class InterceptionInstrumenter implements Instrumenter {
}
}
private static Pattern compilePattern(String regex) {
if (regex.isEmpty()) return ANYTHING;
return Pattern.compile(regex);
}
private static class ClassMatcher {
private final Pattern classPattern;
private final List<MethodInstrumenter> instrumenters = new ArrayList<MethodInstrumenter>();