From 9c195fa0985718f534bf88aab6897387e422afce Mon Sep 17 00:00:00 2001 From: yewton Date: Fri, 11 Oct 2024 23:19:28 +0900 Subject: [PATCH] Correctly set field name for @TargetMethodOrField Fixes #694 --- .../org/openjdk/btrace/instr/Instrumentor.java | 16 ++++++++-------- .../src/test/btrace/onmethod/FieldGetAfter.java | 4 ++-- .../btrace/onmethod/FieldGetAfterStatic.java | 4 ++-- .../src/test/btrace/onmethod/FieldGetBefore.java | 2 +- .../btrace/onmethod/FieldGetBeforeStatic.java | 2 +- .../src/test/btrace/onmethod/FieldSetAfter.java | 2 +- .../btrace/onmethod/FieldSetAfterStatic.java | 2 +- .../src/test/btrace/onmethod/FieldSetBefore.java | 2 +- .../btrace/onmethod/FieldSetBeforeStatic.java | 2 +- .../btrace/onmethod/leveled/FieldGetAfter.java | 4 ++-- .../onmethod/leveled/FieldGetAfterStatic.java | 4 ++-- .../btrace/onmethod/leveled/FieldGetBefore.java | 2 +- .../onmethod/leveled/FieldGetBeforeStatic.java | 2 +- .../btrace/onmethod/leveled/FieldSetAfter.java | 2 +- .../onmethod/leveled/FieldSetAfterStatic.java | 2 +- .../btrace/onmethod/leveled/FieldSetBefore.java | 2 +- .../onmethod/leveled/FieldSetBeforeStatic.java | 2 +- .../src/test/btrace/OnMethodTest.java | 12 ++++++++++++ .../src/test/java/resources/Main.java | 6 +++++- .../test/java/tests/BTraceFunctionalTests.java | 6 +++++- 20 files changed, 50 insertions(+), 30 deletions(-) diff --git a/btrace-instr/src/main/java/org/openjdk/btrace/instr/Instrumentor.java b/btrace-instr/src/main/java/org/openjdk/btrace/instr/Instrumentor.java index cfb13e82b..5908f42f3 100644 --- a/btrace-instr/src/main/java/org/openjdk/btrace/instr/Instrumentor.java +++ b/btrace-instr/src/main/java/org/openjdk/btrace/instr/Instrumentor.java @@ -966,8 +966,8 @@ && matches(targetFieldName, name)) { getMethodOrFieldName( om.isTargetMethodOrFieldFqn(), opcode, - targetClassName, - targetFieldName, + owner, + name, desc)), constArg(om.getClassNameParameter(), className.replace('/', '.')), constArg(om.getMethodParameter(), getName(om.isMethodFqn())), @@ -1015,8 +1015,8 @@ && matches(targetFieldName, name)) { getMethodOrFieldName( om.isTargetMethodOrFieldFqn(), opcode, - targetClassName, - targetFieldName, + owner, + name, desc)), localVarArg(om.getReturnParameter(), fldType, returnValIndex), constArg(om.getClassNameParameter(), className.replace('/', '.')), @@ -1085,8 +1085,8 @@ && matches(targetFieldName, name)) { getMethodOrFieldName( om.isTargetMethodOrFieldFqn(), opcode, - targetClassName, - targetFieldName, + owner, + name, desc)), constArg(om.getClassNameParameter(), className.replace('/', '.')), constArg(om.getMethodParameter(), getName(om.isMethodFqn())), @@ -1129,8 +1129,8 @@ && matches(targetFieldName, name)) { getMethodOrFieldName( om.isTargetMethodOrFieldFqn(), opcode, - targetClassName, - targetFieldName, + owner, + name, desc)), constArg(om.getClassNameParameter(), className.replace('/', '.')), constArg(om.getMethodParameter(), getName(om.isMethodFqn())), diff --git a/btrace-instr/src/test/btrace/onmethod/FieldGetAfter.java b/btrace-instr/src/test/btrace/onmethod/FieldGetAfter.java index 595d8ad82..d8d7155d5 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldGetAfter.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldGetAfter.java @@ -46,8 +46,8 @@ public class FieldGetAfter { location = @Location( value = Kind.FIELD_GET, - clazz = "resources.OnMethodTest", - field = "field", + clazz = "/^resources.OnMethodTest$/", + field = "/^field$/", where = Where.AFTER)) public static void args( @Self Object self, diff --git a/btrace-instr/src/test/btrace/onmethod/FieldGetAfterStatic.java b/btrace-instr/src/test/btrace/onmethod/FieldGetAfterStatic.java index dba3bc84f..c548c9a74 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldGetAfterStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldGetAfterStatic.java @@ -46,8 +46,8 @@ public class FieldGetAfterStatic { location = @Location( value = Kind.FIELD_GET, - clazz = "resources.OnMethodTest", - field = "sField", + clazz = "/^resources.OnMethodTest$/", + field = "/^sField$/", where = Where.AFTER)) public static void args( @Self Object self, diff --git a/btrace-instr/src/test/btrace/onmethod/FieldGetBefore.java b/btrace-instr/src/test/btrace/onmethod/FieldGetBefore.java index d311e92fa..37004dde4 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldGetBefore.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldGetBefore.java @@ -41,7 +41,7 @@ public class FieldGetBefore { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "field", - location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "field")) + location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "/^field$/")) public static void args( @Self Object self, @TargetInstance Object inst, @TargetMethodOrField String fldName) { println("args"); diff --git a/btrace-instr/src/test/btrace/onmethod/FieldGetBeforeStatic.java b/btrace-instr/src/test/btrace/onmethod/FieldGetBeforeStatic.java index 536b53176..6bb14a345 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldGetBeforeStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldGetBeforeStatic.java @@ -41,7 +41,7 @@ public class FieldGetBeforeStatic { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "staticField", - location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "sField")) + location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "/^sField$/")) public static void args( @Self Object self, @TargetInstance Object inst, @TargetMethodOrField String fldName) { println("args"); diff --git a/btrace-instr/src/test/btrace/onmethod/FieldSetAfter.java b/btrace-instr/src/test/btrace/onmethod/FieldSetAfter.java index bb1ebcdfd..29cce722b 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldSetAfter.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldSetAfter.java @@ -46,7 +46,7 @@ public class FieldSetAfter { @Location( value = Kind.FIELD_SET, clazz = "resources.OnMethodTest", - field = "field", + field = "/^field$/", where = Where.AFTER)) public static void args( @Self Object self, diff --git a/btrace-instr/src/test/btrace/onmethod/FieldSetAfterStatic.java b/btrace-instr/src/test/btrace/onmethod/FieldSetAfterStatic.java index f915fd9ff..ccb224f2a 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldSetAfterStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldSetAfterStatic.java @@ -46,7 +46,7 @@ public class FieldSetAfterStatic { @Location( value = Kind.FIELD_SET, clazz = "resources.OnMethodTest", - field = "sField", + field = "/^sField$/", where = Where.AFTER)) public static void args( @Self Object self, diff --git a/btrace-instr/src/test/btrace/onmethod/FieldSetBefore.java b/btrace-instr/src/test/btrace/onmethod/FieldSetBefore.java index bc71da99f..916b4583c 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldSetBefore.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldSetBefore.java @@ -41,7 +41,7 @@ public class FieldSetBefore { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "field", - location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "field")) + location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "/^field$/")) public static void args( @Self Object self, @TargetInstance Object inst, diff --git a/btrace-instr/src/test/btrace/onmethod/FieldSetBeforeStatic.java b/btrace-instr/src/test/btrace/onmethod/FieldSetBeforeStatic.java index 31c666340..3fd80d4ae 100644 --- a/btrace-instr/src/test/btrace/onmethod/FieldSetBeforeStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/FieldSetBeforeStatic.java @@ -41,7 +41,7 @@ public class FieldSetBeforeStatic { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "staticField", - location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "sField")) + location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "/^sField$/")) public static void args( @Self Object self, @TargetInstance Object inst, diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfter.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfter.java index a1bccb39d..e2e9b21aa 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfter.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfter.java @@ -47,8 +47,8 @@ public class FieldGetAfter { location = @Location( value = Kind.FIELD_GET, - clazz = "resources.OnMethodTest", - field = "field", + clazz = "/^resources.OnMethodTest$/", + field = "/^field$/", where = Where.AFTER), enableAt = @Level(">=1")) public static void args( diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfterStatic.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfterStatic.java index 4f8e2c3cd..a6acc9db7 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfterStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetAfterStatic.java @@ -47,8 +47,8 @@ public class FieldGetAfterStatic { location = @Location( value = Kind.FIELD_GET, - clazz = "resources.OnMethodTest", - field = "sField", + clazz = "/^resources.OnMethodTest$/", + field = "/^sField$/", where = Where.AFTER), enableAt = @Level(">=1")) public static void args( diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBefore.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBefore.java index d9ae7febd..9ba58e654 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBefore.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBefore.java @@ -42,7 +42,7 @@ public class FieldGetBefore { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "field", - location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "field"), + location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "/^field$/"), enableAt = @Level(">=1")) public static void args( @Self Object self, @TargetInstance Object inst, @TargetMethodOrField String fldName) { diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBeforeStatic.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBeforeStatic.java index 609dfee88..b98e7bd34 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBeforeStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldGetBeforeStatic.java @@ -42,7 +42,7 @@ public class FieldGetBeforeStatic { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "staticField", - location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "sField"), + location = @Location(value = Kind.FIELD_GET, clazz = "/.*\\.OnMethodTest/", field = "/^sField$/"), enableAt = @Level(">=1")) public static void args( @Self Object self, @TargetInstance Object inst, @TargetMethodOrField String fldName) { diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfter.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfter.java index 35715a786..b0661d50e 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfter.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfter.java @@ -47,7 +47,7 @@ public class FieldSetAfter { @Location( value = Kind.FIELD_SET, clazz = "resources.OnMethodTest", - field = "field", + field = "/^field$/", where = Where.AFTER), enableAt = @Level(">=1")) public static void args( diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfterStatic.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfterStatic.java index d59e16afb..324c2928e 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfterStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetAfterStatic.java @@ -47,7 +47,7 @@ public class FieldSetAfterStatic { @Location( value = Kind.FIELD_SET, clazz = "resources.OnMethodTest", - field = "sField", + field = "/^sField$/", where = Where.AFTER), enableAt = @Level(">=1")) public static void args( diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBefore.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBefore.java index 3dcc5d87c..9d99bc850 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBefore.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBefore.java @@ -42,7 +42,7 @@ public class FieldSetBefore { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "field", - location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "field"), + location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "/^field$/"), enableAt = @Level(">=1")) public static void args( @Self Object self, diff --git a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBeforeStatic.java b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBeforeStatic.java index a67d00f82..736efb9ba 100644 --- a/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBeforeStatic.java +++ b/btrace-instr/src/test/btrace/onmethod/leveled/FieldSetBeforeStatic.java @@ -42,7 +42,7 @@ public class FieldSetBeforeStatic { @OnMethod( clazz = "/.*\\.OnMethodTest/", method = "staticField", - location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "sField"), + location = @Location(value = Kind.FIELD_SET, clazz = "/.*\\.OnMethodTest/", field = "/^sField$/"), enableAt = @Level(">=1")) public static void args( @Self Object self, diff --git a/integration-tests/src/test/btrace/OnMethodTest.java b/integration-tests/src/test/btrace/OnMethodTest.java index a29827313..eb5b90f00 100644 --- a/integration-tests/src/test/btrace/OnMethodTest.java +++ b/integration-tests/src/test/btrace/OnMethodTest.java @@ -68,6 +68,18 @@ public static void args(@Self Object self, int i, String s) { println("prop: " + property("btrace.test")); } + @OnMethod(clazz = "resources.Main", method = "/^call.*/", + location = @Location(value = Kind.FIELD_GET, clazz = "resources.Main", field = "/^s?[fF]ield$/")) + public static void fieldGet(@TargetMethodOrField(fqn = true) String fldName) { + println("fieldGet: " + fldName); + } + + @OnMethod(clazz = "resources.Main", method = "/^call.*/", + location = @Location(value = Kind.FIELD_SET, clazz = "resources.Main", field = "/^s?[fF]ield$/")) + public static void fieldSet(@TargetMethodOrField(fqn = true) String fldName) { + println("fieldSet: " + fldName); + } + @OnTimer(500) public static void doRecurrent() { long x = 10; diff --git a/integration-tests/src/test/java/resources/Main.java b/integration-tests/src/test/java/resources/Main.java index b6b82d301..b300becd9 100644 --- a/integration-tests/src/test/java/resources/Main.java +++ b/integration-tests/src/test/java/resources/Main.java @@ -30,6 +30,8 @@ */ public class Main extends TestApp { private String id = "xxx"; + private String field; + private static String sField; public static void main(String[] args) throws Exception { Main i = new Main(); @@ -49,11 +51,13 @@ protected void startWork() { } private void callA() { + field = "AAA"; + sField = "BBB"; print("i=" + callB(1, "Hello World")); } private int callB(int i, String s) { - print("[" + i + "] = " + s); + print("[" + i + "] = " + s + ", field = " + field + ", sField = " + sField); return i + 1; } diff --git a/integration-tests/src/test/java/tests/BTraceFunctionalTests.java b/integration-tests/src/test/java/tests/BTraceFunctionalTests.java index 8bc36ee24..ab7605940 100644 --- a/integration-tests/src/test/java/tests/BTraceFunctionalTests.java +++ b/integration-tests/src/test/java/tests/BTraceFunctionalTests.java @@ -153,7 +153,7 @@ public void testOnMethod() throws Exception { test( "resources.Main", "btrace/OnMethodTest.java", - 10, + 14, new ResultValidator() { @Override public void validate(String stdout, String stderr, int retcode, String jfrFile) { @@ -164,6 +164,10 @@ public void validate(String stdout, String stderr, int retcode, String jfrFile) assertTrue(stdout.contains("{xxx}")); assertTrue(stdout.contains("heap:init")); assertTrue(stdout.contains("prop: test")); + assertTrue(stdout.contains("fieldSet: field java.lang.String resources.Main#field")); + assertTrue(stdout.contains("fieldSet: static field java.lang.String resources.Main#sField")); + assertTrue(stdout.contains("fieldGet: field java.lang.String resources.Main#field")); + assertTrue(stdout.contains("fieldGet: static field java.lang.String resources.Main#sField")); } }); }