From 35f2993ec94a690077239126e9e82672feab0d40 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 12 May 2013 10:44:19 +0200 Subject: [PATCH] Empty string means '.*' pattern --- .../InterceptionInstrumenter.java | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java index 39311f59573..52867d92d83 100644 --- a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java +++ b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/InterceptionInstrumenter.java @@ -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 classPatterns = new LinkedHashMap(); private final Set neverMatchedClassPatterns = new LinkedHashSet(); @@ -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 instrumenters = addClassPattern(classPattern.pattern()); + Pattern classPattern = compilePattern(annotation.className()); + List 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 addClassPattern(String classPattern) { - ClassMatcher classMatcher = classPatterns.get(classPattern); + private List 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 instrumenters = new ArrayList();