diff --git a/DiSLProject2022/src-profiler/ex10/Instrumentation.java b/DiSLProject2022/src-profiler/ex10/Instrumentation.java index f0fee68..58592d1 100644 --- a/DiSLProject2022/src-profiler/ex10/Instrumentation.java +++ b/DiSLProject2022/src-profiler/ex10/Instrumentation.java @@ -2,13 +2,11 @@ package ex10; import ch.usi.dag.disl.annotation.After; import ch.usi.dag.disl.annotation.Before; -import ch.usi.dag.disl.dynamiccontext.DynamicContext; import ch.usi.dag.disl.marker.BodyMarker; import ch.usi.dag.disl.staticcontext.ClassStaticContext; import ch.usi.dag.disl.staticcontext.MethodStaticContext; import java.lang.reflect.Method; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -26,8 +24,9 @@ public class Instrumentation { } @After(marker = BodyMarker.class, - scope = "ex10.Main.main") - static void instrumentMain() { + scope = "void ex10.Main.main", + guard = IsPublicStaticGuard.class) + static void instrumentMain() { final ClassLoader cls = ClassLoader.getSystemClassLoader(); final List classes = List.of("ex10.Player", "ex10.VideoGamePlayer"); for (final String clazzName : classes) { diff --git a/DiSLProject2022/src-profiler/ex10/IsPublicStaticGuard.java b/DiSLProject2022/src-profiler/ex10/IsPublicStaticGuard.java new file mode 100644 index 0000000..6377715 --- /dev/null +++ b/DiSLProject2022/src-profiler/ex10/IsPublicStaticGuard.java @@ -0,0 +1,11 @@ +package ex10; + +import ch.usi.dag.disl.annotation.GuardMethod; +import ch.usi.dag.disl.staticcontext.MethodStaticContext; + +public class IsPublicStaticGuard { + @GuardMethod + public static boolean isGuard(final MethodStaticContext msc) { + return msc.isMethodPublic() && msc.isMethodStatic(); + } +} diff --git a/DiSLProject2022/src-profiler/ex10/Profiler.java b/DiSLProject2022/src-profiler/ex10/Profiler.java index 3064a96..d6d0675 100644 --- a/DiSLProject2022/src-profiler/ex10/Profiler.java +++ b/DiSLProject2022/src-profiler/ex10/Profiler.java @@ -1,27 +1,24 @@ package ex10; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class Profiler { private static final ConcurrentMap> methodInvocations = new ConcurrentHashMap<>(); - private static final ConcurrentMap> methodDeclarations = new ConcurrentHashMap<>(); + private static final Map> methodDeclarations = new HashMap<>(); - - private static final ConcurrentMap> inheritedMethods = new ConcurrentHashMap<>(); + private static final Map> inheritedMethods = new HashMap<>(); static { Runtime.getRuntime().addShutdownHook(new Thread(() -> { for (final String className : methodInvocations.keySet()) { System.out.println("=== Class Name: " + className + " ==="); - for (final String method : methodDeclarations.get(className)) { + for (final String method : methodDeclarations.getOrDefault(className, Set.of())) { System.out.println("Declared: " + method); } - for (final String method : inheritedMethods.get(className)) { + for (final String method : inheritedMethods.getOrDefault(className, Set.of())) { System.out.println("Inherited: " + method); } for (final String method : methodInvocations.get(className)) { @@ -35,7 +32,7 @@ public class Profiler { private Profiler() { } - private static void register(final String className, final String methodName, final ConcurrentMap> methods) { + private static void register(final String className, final String methodName, final Map> methods) { methods.computeIfAbsent(className, ignored -> Collections.synchronizedSet(new HashSet<>())) .add(methodName); } diff --git a/DiSLProject2022/src-profiler/ex9/Instrumentation.java b/DiSLProject2022/src-profiler/ex9/Instrumentation.java index 9abec78..2b5d396 100644 --- a/DiSLProject2022/src-profiler/ex9/Instrumentation.java +++ b/DiSLProject2022/src-profiler/ex9/Instrumentation.java @@ -2,7 +2,6 @@ package ex9; import ch.usi.dag.disl.annotation.Before; import ch.usi.dag.disl.marker.BodyMarker; -import ch.usi.dag.disl.staticcontext.InvocationStaticContext; import ch.usi.dag.disl.staticcontext.MethodStaticContext; public class Instrumentation {