Skip to content

Commit

Permalink
Instrument all classes in instrumented package.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
gkossakowski committed Jul 26, 2012
1 parent ad08f24 commit 9e04e23
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
Expand Up @@ -21,7 +21,9 @@ private boolean shouldTransform(String className) {
// 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) {
Expand Down
4 changes: 4 additions & 0 deletions 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;
16 changes: 16 additions & 0 deletions 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()
Expand Down

0 comments on commit 9e04e23

Please sign in to comment.