diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java index f77595867..40c8454b1 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamer.java @@ -24,15 +24,15 @@ import org.springframework.core.annotation.AnnotationUtils; /** * Default implementation of SpanNamer that tries to get the span name as follows: - * + *
* * from the @SpanName annotation on the class if one is present. - * + *
* * from the @SpanName annotation on the method if passed object is of a {@link Method}. * type - * + *
* * from the toString() of the delegate if it's not the default * {@link Object#toString()}. - * + *
* * the default provided value. * * @author Marcin Grzejszczak @@ -41,7 +41,7 @@ import org.springframework.core.annotation.AnnotationUtils; */ public class DefaultSpanNamer implements SpanNamer { - private static boolean isDefaultToString(Object delegate, String spanName) { + private static boolean isDefaultToString(Object delegate) { try { return delegate.getClass().getMethod("toString").getDeclaringClass() == Object.class; } @@ -55,7 +55,7 @@ public class DefaultSpanNamer implements SpanNamer { SpanName annotation = annotation(object); String spanName = annotation != null ? annotation.value() : object.toString(); // If there is no overridden toString method we'll put a constant value - if (isDefaultToString(object, spanName)) { + if (annotation == null && isDefaultToString(object)) { return defaultValue; } return spanName; diff --git a/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamerTest.java b/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamerTest.java index 2c7403073..b5ddf0dc5 100644 --- a/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamerTest.java +++ b/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/internal/DefaultSpanNamerTest.java @@ -19,6 +19,8 @@ package org.springframework.cloud.sleuth.internal; import org.assertj.core.api.BDDAssertions; import org.junit.jupiter.api.Test; +import org.springframework.cloud.sleuth.SpanName; + class DefaultSpanNamerTest { @Test @@ -39,6 +41,12 @@ class DefaultSpanNamerTest { BDDAssertions.then(defaultValue).isEqualTo("mytostring"); } + @Test + void nameWithNoToStringAndAnnotation() { + String defaultValue = new DefaultSpanNamer().name(new NoToStringOverrideAndAnnotation(), "default value"); + BDDAssertions.then(defaultValue).isEqualTo("new-name"); + } + static class NoToStringOverride { } @@ -56,4 +64,9 @@ class DefaultSpanNamerTest { } + @SpanName("new-name") + static class NoToStringOverrideAndAnnotation { + + } + }