@Nullable private static List<WildcardMatcher> getArgumentMatchers(@Nullable String arguments) { if (arguments == null) { return null; } // remove parenthesis arguments = arguments.substring(1, arguments.length() - 1); final String[] splitArguments = StringUtils.split(arguments, ','); List<WildcardMatcher> matchers = new ArrayList<>(splitArguments.length); for (String argument : splitArguments) { matchers.add(caseSensitiveMatcher(argument.trim())); } return matchers; }
public static MethodMatcher of(String methodMatcher) { final Matcher matcher = METHOD_MATCHER_PATTERN.matcher(methodMatcher); if (!matcher.matches()) { throw new IllegalArgumentException("'" + methodMatcher + "'" + " is not a valid method matcher"); } final String modifier = matcher.group(2); final WildcardMatcher clazz = caseSensitiveMatcher(matcher.group(3)); final WildcardMatcher method = matcher.group(5) != null ? caseSensitiveMatcher(matcher.group(5)) : WildcardMatcher.matchAll(); final List<WildcardMatcher> args = getArgumentMatchers(matcher.group(6)); return new MethodMatcher(methodMatcher, getModifier(modifier), clazz, method, args); }
@Test void testMethodMatcherThreeArgs() { final MethodMatcher methodMatcher = MethodMatcher.of("* co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest#testMethodMatcher(java.lang.String, foo,bar)"); assertThat(methodMatcher).isNotNull(); assertThat(methodMatcher.getClassMatcher().getMatcher()).isEqualTo("co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest"); assertThat(methodMatcher.getMethodMatcher().getMatcher()).isEqualTo("testMethodMatcher"); assertThat(methodMatcher.getArgumentMatchers()).hasSize(3); assertThat(methodMatcher.getArgumentMatchers()).containsExactly(caseSensitiveMatcher("java.lang.String"), caseSensitiveMatcher("foo"), caseSensitiveMatcher("bar")); } }
@Test void testMethodMatcherTwoArgs() { final MethodMatcher methodMatcher = MethodMatcher.of("protected co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest#testMethodMatcher(*String, foo)"); assertThat(methodMatcher).isNotNull(); assertThat(methodMatcher.getClassMatcher().getMatcher()).isEqualTo("co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest"); assertThat(methodMatcher.getMethodMatcher().getMatcher()).isEqualTo("testMethodMatcher"); assertThat(methodMatcher.getArgumentMatchers()).hasSize(2); assertThat(methodMatcher.getArgumentMatchers()).containsExactly(caseSensitiveMatcher("*String"), caseSensitiveMatcher("foo")); }
@Test void testMethodMatcherOneArg() { final MethodMatcher methodMatcher = MethodMatcher.of("private co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest#test*Matcher(java.lang.String)"); assertThat(methodMatcher).isNotNull(); assertThat(methodMatcher.getClassMatcher().getMatcher()).isEqualTo("co.elastic.apm.agent.bci.methodmatching.MethodMatcherTest"); assertThat(methodMatcher.getMethodMatcher().getMatcher()).isEqualTo("test*Matcher"); assertThat(methodMatcher.getArgumentMatchers()).hasSize(1); assertThat(methodMatcher.getArgumentMatchers()).contains(caseSensitiveMatcher("java.lang.String")); }