correction on ex9

This commit is contained in:
Claudio Maggioni 2023-01-09 18:25:05 +01:00
parent 2de11a50ec
commit 474c6eddb6
2 changed files with 6 additions and 25 deletions

View file

@ -2,34 +2,15 @@ package ex9;
import ch.usi.dag.disl.annotation.Before;
import ch.usi.dag.disl.marker.BodyMarker;
import ch.usi.dag.disl.marker.BytecodeMarker;
import ch.usi.dag.disl.staticcontext.InvocationStaticContext;
import ch.usi.dag.disl.staticcontext.MethodStaticContext;
public class Instrumentation {
@Before(marker = BytecodeMarker.class,
args = "invokevirtual, invokespecial, invokeinterface, invokestatic",
guard = IsNotConstructorOrStaticGuard.class,
scope = "ex9.MainThread.*")
static void logCall(final InvocationStaticContext isc) {
// this will log calls for all types of methods (including constructors and static initializers).
// However, constructors and static initializers will not be instrumented thanks to the included guard.
// Should calls to constructors and static methods not be instrumented, add the following line:
//
// if (isc.isConstructor()) return;
//
// and remove `invokestatic` from the BytecodeMarker argument list
Profiler.logCall(Thread.currentThread(), isc.getInternalName());
}
@Before(marker = BodyMarker.class,
guard = IsNotConstructorOrStaticGuard.class,
scope = "ex9.MainThread.run")
static void logThreadStart(final MethodStaticContext msc) {
// We separately instrument the Thread.run() method as there is no obvious way to instrument the caller of
// Thread.run(). Hence, we log the call at method start.
Profiler.logCall(Thread.currentThread(), msc.thisMethodFullName());
guard = IsNotConstructorOrStaticInitializerGuard.class,
scope = "ex9.MainThread.*")
static void logCall(final MethodStaticContext isc) {
Profiler.logCall(Thread.currentThread(), isc.thisMethodFullName());
}
}

View file

@ -3,9 +3,9 @@ package ex9;
import ch.usi.dag.disl.annotation.GuardMethod;
import ch.usi.dag.disl.staticcontext.MethodStaticContext;
public class IsNotConstructorOrStaticGuard {
public class IsNotConstructorOrStaticInitializerGuard {
@GuardMethod
public static boolean isNotConstructorOrStatic(final MethodStaticContext msc) {
return !msc.isMethodStatic() && !msc.isMethodConstructor();
return !msc.isMethodInitializer() && !msc.isMethodConstructor();
}
}