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();