Skip to content

Commit 1c886f8

Browse files
authored
Polish gh-4081 (#5495)
1 parent d9e25af commit 1c886f8

File tree

3 files changed

+17
-27
lines changed

3 files changed

+17
-27
lines changed

micrometer-commons/src/main/java/io/micrometer/common/annotation/AnnotationHandler.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,10 @@
2323

2424
import java.lang.annotation.Annotation;
2525
import java.lang.reflect.Method;
26-
import java.util.Arrays;
27-
import java.util.List;
28-
import java.util.Map;
29-
import java.util.concurrent.ConcurrentHashMap;
26+
import java.util.*;
3027
import java.util.function.BiConsumer;
3128
import java.util.function.BiFunction;
3229
import java.util.function.Function;
33-
import java.util.function.Predicate;
3430

3531
/**
3632
* This class is able to find all methods annotated with the Micrometer annotations. All
@@ -138,15 +134,13 @@ private boolean methodsAreTheSame(Method mostSpecificMethod, Method method) {
138134
}
139135

140136
private void addAnnotatedArguments(T objectToModify, List<AnnotatedParameter> toBeAdded) {
141-
toBeAdded.stream()
142-
.map(container -> toKeyValue.apply(container.annotation, container.argument))
143-
.filter(distinctByKey(KeyValue::getKey))
144-
.forEach(keyValue -> keyValueConsumer.accept(keyValue, objectToModify));
145-
}
146-
147-
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
148-
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
149-
return item -> seen.putIfAbsent(keyExtractor.apply(item), Boolean.TRUE) == null;
137+
Set<String> seen = new HashSet<>();
138+
for (AnnotatedParameter container : toBeAdded) {
139+
KeyValue keyValue = toKeyValue.apply(container.annotation, container.argument);
140+
if (seen.add(keyValue.getKey())) {
141+
keyValueConsumer.accept(keyValue, objectToModify);
142+
}
143+
}
150144
}
151145

152146
public Function<Class<? extends ValueResolver>, ? extends ValueResolver> getResolverProvider() {

micrometer-commons/src/main/java/io/micrometer/common/annotation/AnnotationUtils.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
import java.lang.annotation.Annotation;
1919
import java.lang.reflect.Method;
2020
import java.lang.reflect.Parameter;
21-
import java.util.Arrays;
22-
import java.util.LinkedList;
21+
import java.util.ArrayList;
2322
import java.util.List;
2423

2524
/**
@@ -39,14 +38,12 @@ private AnnotationUtils() {
3938
static List<AnnotatedParameter> findAnnotatedParameters(Class<? extends Annotation> annotationClazz, Method method,
4039
Object[] args) {
4140
Parameter[] parameters = method.getParameters();
42-
List<AnnotatedParameter> result = new LinkedList<>();
41+
List<AnnotatedParameter> result = new ArrayList<>();
4342
for (int i = 0; i < parameters.length; i++) {
4443
Parameter parameter = parameters[i];
45-
Annotation[] annotations = parameter.getAnnotationsByType(annotationClazz);
46-
final int parameterIndex = i;
47-
Arrays.stream(annotations)
48-
.map(annotation -> new AnnotatedParameter(annotation, args[parameterIndex]))
49-
.forEach(result::add);
44+
for (Annotation annotation : parameter.getAnnotationsByType(annotationClazz)) {
45+
result.add(new AnnotatedParameter(annotation, args[i]));
46+
}
5047
}
5148
return result;
5249
}

micrometer-core/src/test/java/io/micrometer/core/aop/TimedAspectTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ void multipleMeterTagsWithinContainerWithExpression(AnnotatedTestClass annotated
546546
assertThat(registry.get("method.timed")
547547
.tag("value1", "value1: zxe")
548548
.tag("value2", "value2: qwe")
549-
.tag("value3", "value3: ZXEQWE")
549+
.tag("value3", "value3. overridden: ZXEQWE")
550550
.timer()
551551
.count()).isEqualTo(1);
552552
}
@@ -670,7 +670,7 @@ public void getMultipleAnnotationsForTagValueExpression(
670670
public void getMultipleAnnotationsWithContainerForTagValueExpression(@MeterTags({
671671
@MeterTag(key = "value1", expression = "'value1: ' + value1"),
672672
@MeterTag(key = "value2", expression = "'value2: ' + value2"), @MeterTag(key = "value3",
673-
expression = "'value3: ' + value1.toUpperCase + value2.toUpperCase") }) DataHolder param) {
673+
expression = "'value3. overridden: ' + value1.toUpperCase + value2.toUpperCase") }) DataHolder param) {
674674
}
675675

676676
}
@@ -697,13 +697,12 @@ public void getAnnotationForArgumentToString(Long param) {
697697
@Override
698698
public void getMultipleAnnotationsForTagValueExpression(
699699
@MeterTag(key = "value2", expression = "'value2. overridden: ' + value2") DataHolder param) {
700-
701700
}
702701

703702
@Timed
704703
@Override
705-
public void getMultipleAnnotationsWithContainerForTagValueExpression(DataHolder param) {
706-
704+
public void getMultipleAnnotationsWithContainerForTagValueExpression(@MeterTag(key = "value3",
705+
expression = "'value3. overridden: ' + value1.toUpperCase + value2.toUpperCase") DataHolder param) {
707706
}
708707

709708
}

0 commit comments

Comments
 (0)