summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2012-07-26 11:40:13 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2012-07-26 11:54:47 +0200
commit9e04e2365a7210f7e671137d8f70e475688b0885 (patch)
tree6ff6517a65bcd4f954c916129822e755d3a340b3
parentad08f24448729009fc8d5ff0acf307a43b4cfe0a (diff)
downloadscala-9e04e2365a7210f7e671137d8f70e475688b0885.tar.gz
scala-9e04e2365a7210f7e671137d8f70e475688b0885.tar.bz2
scala-9e04e2365a7210f7e671137d8f70e475688b0885.zip
Instrument all classes in `instrumented` package.
Extend instrumenting infrastructure to instrument classes in `instrumented` package. This is useful because very often you need to put your classes into non-empty package. E.g. inliner doesn't work properly with empty package at the moment so in order to test any behaviour we need to put classes in some other package that is instrumented. Added testing code for that to instrumentation test-case. Review by @phaller.
-rw-r--r--src/partest/scala/tools/partest/javaagent/ASMTransformer.java4
-rw-r--r--test/files/instrumented/InstrumentationTest.check4
-rw-r--r--test/files/instrumented/InstrumentationTest.scala16
3 files changed, 23 insertions, 1 deletions
diff --git a/src/partest/scala/tools/partest/javaagent/ASMTransformer.java b/src/partest/scala/tools/partest/javaagent/ASMTransformer.java
index 643c683002..09cd485d6b 100644
--- a/src/partest/scala/tools/partest/javaagent/ASMTransformer.java
+++ b/src/partest/scala/tools/partest/javaagent/ASMTransformer.java
@@ -21,7 +21,9 @@ public class ASMTransformer implements ClassFileTransformer {
// we instrument all classes from empty package
(!className.contains("/") ||
// we instrument all classes from scala package
- className.startsWith("scala/"));
+ className.startsWith("scala/") ||
+ // we instrument all classes from `instrumented` package
+ className.startsWith("instrumented/"));
}
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {
diff --git a/test/files/instrumented/InstrumentationTest.check b/test/files/instrumented/InstrumentationTest.check
index 3652df270a..f0f447560a 100644
--- a/test/files/instrumented/InstrumentationTest.check
+++ b/test/files/instrumented/InstrumentationTest.check
@@ -1,4 +1,8 @@
true
Method call statistics:
+ 1 Foo1.<init>()V
+ 1 Foo1.someMethod()I
+ 1 instrumented/Foo2.<init>()V
+ 1 instrumented/Foo2.someMethod()I
1 scala/Predef$.println(Ljava/lang/Object;)V
1 scala/runtime/BoxesRunTime.boxToBoolean(Z)Ljava/lang/Boolean;
diff --git a/test/files/instrumented/InstrumentationTest.scala b/test/files/instrumented/InstrumentationTest.scala
index ec5314c624..0e53f80857 100644
--- a/test/files/instrumented/InstrumentationTest.scala
+++ b/test/files/instrumented/InstrumentationTest.scala
@@ -1,11 +1,27 @@
import scala.tools.partest.instrumented.Instrumentation._
+/** We check if classes put in empty package are properly instrumented */
+class Foo1 {
+ def someMethod = 0
+}
+
+/** We check if classes put in `instrumented` package are properly instrumented */
+package instrumented {
+ class Foo2 {
+ def someMethod = 0
+ }
+}
+
/** Tests if instrumentation itself works correctly */
object Test {
def main(args: Array[String]) {
// force predef initialization before profiling
Predef
startProfiling()
+ val foo1 = new Foo1
+ foo1.someMethod
+ val foo2 = new instrumented.Foo2
+ foo2.someMethod
// should box the boolean
println(true)
stopProfiling()