From 9626688524887c8422f683c988bcf9d7ea710f97 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 19:30:44 +0000 Subject: [PATCH 1/2] Initial plan From 995f307508b7bd5e897e62bf49e8f96537ca52bb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 19:38:29 +0000 Subject: [PATCH 2/2] Fix: labeled methods bypass trivial-method filter in ConfigCondition Agent-Logs-Url: https://github.com/getappmap/appmap-java/sessions/598cfeb7-c862-4cad-8a2b-776d6b11c993 Co-authored-by: kgilpin <86395+kgilpin@users.noreply.github.com> --- .../process/conditions/ConfigCondition.java | 8 ++++++- .../conditions/ConfigConditionTest.java | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/agent/src/main/java/com/appland/appmap/process/conditions/ConfigCondition.java b/agent/src/main/java/com/appland/appmap/process/conditions/ConfigCondition.java index 5bfef89d..9c0a6c8b 100644 --- a/agent/src/main/java/com/appland/appmap/process/conditions/ConfigCondition.java +++ b/agent/src/main/java/com/appland/appmap/process/conditions/ConfigCondition.java @@ -48,6 +48,12 @@ public Boolean match(CtBehavior behavior, Map matchResult) { return matched; } + private static final String LABELS_CLASS = "com.appland.appmap.annotation.Labels"; + + static boolean hasLabelsAnnotation(CtBehavior behavior) { + return behavior.hasAnnotation(LABELS_CLASS); + } + private boolean doMatch(CtBehavior behavior, Map matchResult) { CtClass declaringClass = behavior.getDeclaringClass(); String declaringClassName = declaringClass.getName(); @@ -57,7 +63,7 @@ private boolean doMatch(CtBehavior behavior, Map matchResult) { } } - if (!AppMapBehavior.isRecordable(behavior) || ignoreMethod(behavior)) { + if (!AppMapBehavior.isRecordable(behavior) || (!hasLabelsAnnotation(behavior) && ignoreMethod(behavior))) { return false; } diff --git a/agent/src/test/java/com/appland/appmap/process/conditions/ConfigConditionTest.java b/agent/src/test/java/com/appland/appmap/process/conditions/ConfigConditionTest.java index 4f492846..5e129dfd 100644 --- a/agent/src/test/java/com/appland/appmap/process/conditions/ConfigConditionTest.java +++ b/agent/src/test/java/com/appland/appmap/process/conditions/ConfigConditionTest.java @@ -110,6 +110,29 @@ Stream notGetters() { .setReturnType("java.lang.Integer").endMethod())); } + @Test + void testLabeledGetterHasLabelsAnnotation(ClassBuilder classBuilder) throws Exception { + MethodBuilder methodBuilder = classBuilder.beginMethod(); + methodBuilder.setName("getSomething") + .setBody("return Integer.valueOf(1);") + .setReturnType("java.lang.Integer") + .addAnnotation("com.appland.appmap.annotation.Labels") + .endMethod(); + assertTrue(ConfigCondition.hasLabelsAnnotation(methodBuilder.getBehavior())); + assertTrue(ConfigCondition.isGetter(methodBuilder.getBehavior())); + } + + @Test + void testUnlabeledGetterHasNoLabelsAnnotation(ClassBuilder classBuilder) throws Exception { + MethodBuilder methodBuilder = classBuilder.beginMethod(); + methodBuilder.setName("getSomething") + .setBody("return Integer.valueOf(1);") + .setReturnType("java.lang.Integer") + .endMethod(); + assertFalse(ConfigCondition.hasLabelsAnnotation(methodBuilder.getBehavior())); + assertTrue(ConfigCondition.isGetter(methodBuilder.getBehavior())); + } + @Test void testSetterMethod(ClassBuilder classBuilder) throws Exception { MethodBuilder methodBuilder = classBuilder.beginMethod();