diff options
6 files changed, 33 insertions, 19 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 364d5775..39cc492e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Add `AttributeValueDouble` to `AttributeValue`. - Add `createWithSender` to `JaegerTraceExporter` to allow use of `HttpSender` with extra configurations +- Add an API `Functions.returnToString()`. ## 0.16.1 - 2018-09-18 - Fix ClassCastException in Log4j log correlation diff --git a/api/src/main/java/io/opencensus/common/Functions.java b/api/src/main/java/io/opencensus/common/Functions.java index eb5984af..ea3457ca 100644 --- a/api/src/main/java/io/opencensus/common/Functions.java +++ b/api/src/main/java/io/opencensus/common/Functions.java @@ -53,6 +53,14 @@ public final class Functions { } }; + private static final Function<Object, /*@Nullable*/ String> RETURN_TO_STRING = + new Function<Object, /*@Nullable*/ String>() { + @Override + public /*@Nullable*/ String apply(Object input) { + return input == null ? null : input.toString(); + } + }; + /** * A {@code Function} that always ignores its argument and returns {@code null}. * @@ -82,6 +90,16 @@ public final class Functions { } /** + * A {@code Function} that always returns the {@link #toString()} value of the input. + * + * @return a {@code Function} that always returns the {@link #toString()} value of the input. + * @since 0.17 + */ + public static Function<Object, /*@Nullable*/ String> returnToString() { + return RETURN_TO_STRING; + } + + /** * A {@code Function} that always ignores its argument and throws an {@link * IllegalArgumentException}. * diff --git a/api/src/test/java/io/opencensus/common/FunctionsTest.java b/api/src/test/java/io/opencensus/common/FunctionsTest.java index e4d37569..55d58d4d 100644 --- a/api/src/test/java/io/opencensus/common/FunctionsTest.java +++ b/api/src/test/java/io/opencensus/common/FunctionsTest.java @@ -40,6 +40,14 @@ public class FunctionsTest { } @Test + public void testReturnToString() { + assertThat(Functions.returnToString().apply("input")).isEqualTo("input"); + assertThat(Functions.returnToString().apply(Boolean.FALSE)).isEqualTo("false"); + assertThat(Functions.returnToString().apply(Double.valueOf(123.45))).isEqualTo("123.45"); + assertThat(Functions.returnToString().apply(null)).isEqualTo(null); + } + + @Test public void testThrowIllegalArgumentException() { Function<Object, Void> f = Functions.throwIllegalArgumentException(); thrown.expect(IllegalArgumentException.class); diff --git a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java index 0da29d73..f6a36996 100644 --- a/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java +++ b/contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java @@ -654,12 +654,7 @@ final class TracezZPageHandler extends ZPageHandler { // The return type needs to be nullable when this function is used as an argument to 'match' in // attributeValueToString, because 'match' doesn't allow covariant return types. private static final Function<Object, /*@Nullable*/ String> returnToString = - new Function<Object, /*@Nullable*/ String>() { - @Override - public String apply(Object input) { - return input.toString(); - } - }; + Functions.returnToString(); @javax.annotation.Nullable private static String attributeValueToString(AttributeValue attributeValue) { diff --git a/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java b/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java index 1bbb665a..649a026f 100644 --- a/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java +++ b/exporters/trace/instana/src/main/java/io/opencensus/exporter/trace/instana/InstanaExporterHandler.java @@ -114,12 +114,7 @@ final class InstanaExporterHandler extends SpanExporter.Handler { // The return type needs to be nullable when this function is used as an argument to 'match' in // attributeValueToString, because 'match' doesn't allow covariant return types. private static final Function<Object, /*@Nullable*/ String> returnToString = - new Function<Object, /*@Nullable*/ String>() { - @Override - public String apply(Object input) { - return input.toString(); - } - }; + Functions.returnToString(); @javax.annotation.Nullable private static String attributeValueToString(AttributeValue attributeValue) { diff --git a/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java b/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java index 711dcaa9..70bc725c 100644 --- a/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java +++ b/exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java @@ -172,14 +172,11 @@ final class ZipkinExporterHandler extends SpanExporter.Handler { // The return type needs to be nullable when this function is used as an argument to 'match' in // attributeValueToString, because 'match' doesn't allow covariant return types. - private static final Function<Object, String> returnToString = - new Function<Object, String>() { - @Override - public String apply(Object input) { - return input.toString(); - } - }; + private static final Function<Object, /*@Nullable*/ String> returnToString = + Functions.returnToString(); + // TODO: Fix the Checker Framework warning. + @SuppressWarnings("nullness") private static String attributeValueToString(AttributeValue attributeValue) { return attributeValue.match( returnToString, |