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 507cb388478..c24a3e7d85b 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 @@ -98,8 +98,8 @@ public class InterceptionInstrumenter implements Instrumenter { compilePattern(annotation.erasedSignature()), annotation.allowMultipleMatches(), enterData, - exitData - ); + exitData, + annotation.logInterceptions()); instrumenters.add(instrumenter); neverMatchedInstrumenters.add(instrumenter); } @@ -205,6 +205,7 @@ public class InterceptionInstrumenter implements Instrumenter { for (MethodInstrumenter instrumenter : instrumenters) { if (instrumenter.isApplicable(name, desc)) { applicableInstrumenters.add(instrumenter); + instrumenter.reportApplication(cr.getClassName(), name, desc); checkMultipleMatches(instrumenter, name, desc); neverMatchedInstrumenters.remove(instrumenter); diff --git a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenter.java b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenter.java index 6310f311100..c67c39fa8c5 100644 --- a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenter.java +++ b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenter.java @@ -26,4 +26,6 @@ interface MethodInstrumenter { List getEnterData(); boolean allowsMultipleMatches(); + + void reportApplication(String className, String methodName, String methodDesc); } diff --git a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenterImpl.java b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenterImpl.java index 9d711d2472a..4ac32bb29fc 100644 --- a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenterImpl.java +++ b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInstrumenterImpl.java @@ -25,19 +25,22 @@ class MethodInstrumenterImpl implements MethodInstrumenter { private final boolean allowMultipleMatches; private final List enterData; private final List exitData; + private final boolean logApplications; public MethodInstrumenterImpl( Pattern namePattern, Pattern descPattern, boolean allowMultipleMatches, List enterData, - List exitData + List exitData, + boolean logApplications ) { this.namePattern = namePattern; this.descPattern = descPattern; this.allowMultipleMatches = allowMultipleMatches; this.enterData = enterData; this.exitData = exitData; + this.logApplications = logApplications; } @Override @@ -45,6 +48,13 @@ class MethodInstrumenterImpl implements MethodInstrumenter { return allowMultipleMatches; } + @Override + public void reportApplication(String className, String methodName, String methodDesc) { + if (logApplications) { + System.out.println(toString() + " applied to " + className + ":" + methodName + methodDesc); + } + } + @Override public boolean isApplicable(String name, String desc) { return namePattern.matcher(name).matches() && descPattern.matcher(desc).matches(); @@ -62,6 +72,6 @@ class MethodInstrumenterImpl implements MethodInstrumenter { @Override public String toString() { - return namePattern + " " + descPattern + (allowMultipleMatches ? "[multiple]" : ""); + return namePattern + " " + descPattern + (allowMultipleMatches ? " [multiple]" : ""); } } diff --git a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInterceptor.java b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInterceptor.java index 9f0790081d3..0740b17c54e 100644 --- a/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInterceptor.java +++ b/compiler/preloader/instrumentation/src/org/jetbrains/jet/preloading/instrumentation/MethodInterceptor.java @@ -35,4 +35,7 @@ public @interface MethodInterceptor { // if this is false, an exception is thrown when more than one method in the same class matches boolean allowMultipleMatches() default false; + + // if true, every method instrumented with this interceptor will be logged to stdout + boolean logInterceptions() default false; }