aboutsummaryrefslogtreecommitdiffstats
path: root/api/src
diff options
context:
space:
mode:
authorKristen Kozak <sebright@google.com>2017-12-19 20:02:00 -0800
committerKristen Kozak <sebright@google.com>2017-12-19 20:02:00 -0800
commit18cf999ddea65775db2a482e00cea05d52961077 (patch)
treeb78e58794a411fd83e39e6c2211efe664dcaa485 /api/src
parentbbe6b10f7c6b622b4ffd18e98f58d96a8eba3854 (diff)
downloadplatform_external_opencensus-java-18cf999ddea65775db2a482e00cea05d52961077.tar.gz
platform_external_opencensus-java-18cf999ddea65775db2a482e00cea05d52961077.tar.bz2
platform_external_opencensus-java-18cf999ddea65775db2a482e00cea05d52961077.zip
Work around a possible bug in the Checker Framework (issue #359).
The issue https://github.com/typetools/checker-framework/issues/1712 affects all uses of the visitor pattern in this project. This commit adds utility methods for working around the issue and calls them from all "match" methods.
Diffstat (limited to 'api/src')
-rw-r--r--api/src/main/java/io/opencensus/internal/NullnessUtils.java40
-rw-r--r--api/src/main/java/io/opencensus/stats/Aggregation.java9
-rw-r--r--api/src/main/java/io/opencensus/stats/AggregationData.java12
-rw-r--r--api/src/main/java/io/opencensus/stats/Measure.java5
-rw-r--r--api/src/main/java/io/opencensus/stats/Measurement.java6
-rw-r--r--api/src/main/java/io/opencensus/stats/View.java5
-rw-r--r--api/src/main/java/io/opencensus/stats/ViewData.java6
-rw-r--r--api/src/main/java/io/opencensus/trace/AttributeValue.java10
8 files changed, 73 insertions, 20 deletions
diff --git a/api/src/main/java/io/opencensus/internal/NullnessUtils.java b/api/src/main/java/io/opencensus/internal/NullnessUtils.java
new file mode 100644
index 00000000..ca3419cd
--- /dev/null
+++ b/api/src/main/java/io/opencensus/internal/NullnessUtils.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017, OpenCensus Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.opencensus.internal;
+
+import io.opencensus.common.Function;
+
+/*>>>
+import org.checkerframework.checker.nullness.qual.KeyForBottom;
+*/
+
+/** Utility methods for working around Checker Framework issues. */
+public final class NullnessUtils {
+ private NullnessUtils() {}
+
+ /**
+ * Work around https://github.com/typetools/checker-framework/issues/1712 by removing {@code ?
+ * super} from a {@code Function}'s argument type.
+ */
+ // TODO(sebright): Remove this method once the issue is fixed.
+ public static <A, B> Function<A, B> removeSuperFromFunctionParameterType(
+ Function<? super /*@KeyForBottom*/ A, B> function) {
+ @SuppressWarnings("unchecked")
+ Function<A, B> castFunction = (Function<A, B>) function;
+ return castFunction;
+ }
+}
diff --git a/api/src/main/java/io/opencensus/stats/Aggregation.java b/api/src/main/java/io/opencensus/stats/Aggregation.java
index 0fe905ce..7a612313 100644
--- a/api/src/main/java/io/opencensus/stats/Aggregation.java
+++ b/api/src/main/java/io/opencensus/stats/Aggregation.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.google.auto.value.AutoValue;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import javax.annotation.concurrent.Immutable;
/**
@@ -79,7 +80,7 @@ public abstract class Aggregation {
Function<? super Mean, T> p2,
Function<? super Distribution, T> p3,
Function<? super Aggregation, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<Sum, T>removeSuperFromFunctionParameterType(p0).apply(this);
}
}
@@ -111,7 +112,7 @@ public abstract class Aggregation {
Function<? super Mean, T> p2,
Function<? super Distribution, T> p3,
Function<? super Aggregation, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<Count, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
}
@@ -143,7 +144,7 @@ public abstract class Aggregation {
Function<? super Mean, T> p2,
Function<? super Distribution, T> p3,
Function<? super Aggregation, T> defaultFunction) {
- return p2.apply(this);
+ return NullnessUtils.<Mean, T>removeSuperFromFunctionParameterType(p2).apply(this);
}
}
@@ -179,7 +180,7 @@ public abstract class Aggregation {
Function<? super Mean, T> p2,
Function<? super Distribution, T> p3,
Function<? super Aggregation, T> defaultFunction) {
- return p3.apply(this);
+ return NullnessUtils.<Distribution, T>removeSuperFromFunctionParameterType(p3).apply(this);
}
}
}
diff --git a/api/src/main/java/io/opencensus/stats/AggregationData.java b/api/src/main/java/io/opencensus/stats/AggregationData.java
index 822c9296..bdf618bc 100644
--- a/api/src/main/java/io/opencensus/stats/AggregationData.java
+++ b/api/src/main/java/io/opencensus/stats/AggregationData.java
@@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.google.auto.value.AutoValue;
import com.google.common.collect.Lists;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import java.util.Collections;
import java.util.List;
import javax.annotation.concurrent.Immutable;
@@ -92,7 +93,7 @@ public abstract class AggregationData {
Function<? super MeanData, T> p3,
Function<? super DistributionData, T> p4,
Function<? super AggregationData, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<SumDataDouble, T>removeSuperFromFunctionParameterType(p0).apply(this);
}
}
@@ -131,7 +132,7 @@ public abstract class AggregationData {
Function<? super MeanData, T> p3,
Function<? super DistributionData, T> p4,
Function<? super AggregationData, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<SumDataLong, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
}
@@ -170,7 +171,7 @@ public abstract class AggregationData {
Function<? super MeanData, T> p3,
Function<? super DistributionData, T> p4,
Function<? super AggregationData, T> defaultFunction) {
- return p2.apply(this);
+ return NullnessUtils.<CountData, T>removeSuperFromFunctionParameterType(p2).apply(this);
}
}
@@ -217,7 +218,7 @@ public abstract class AggregationData {
Function<? super MeanData, T> p3,
Function<? super DistributionData, T> p4,
Function<? super AggregationData, T> defaultFunction) {
- return p3.apply(this);
+ return NullnessUtils.<MeanData, T>removeSuperFromFunctionParameterType(p3).apply(this);
}
}
@@ -317,7 +318,8 @@ public abstract class AggregationData {
Function<? super MeanData, T> p3,
Function<? super DistributionData, T> p4,
Function<? super AggregationData, T> defaultFunction) {
- return p4.apply(this);
+ return NullnessUtils.<DistributionData, T>removeSuperFromFunctionParameterType(p4)
+ .apply(this);
}
}
}
diff --git a/api/src/main/java/io/opencensus/stats/Measure.java b/api/src/main/java/io/opencensus/stats/Measure.java
index 209e946f..70210f4e 100644
--- a/api/src/main/java/io/opencensus/stats/Measure.java
+++ b/api/src/main/java/io/opencensus/stats/Measure.java
@@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkArgument;
import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.internal.StringUtil;
import javax.annotation.concurrent.Immutable;
@@ -99,7 +100,7 @@ public abstract class Measure {
Function<? super MeasureDouble, T> p0,
Function<? super MeasureLong, T> p1,
Function<? super Measure, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<MeasureDouble, T>removeSuperFromFunctionParameterType(p0).apply(this);
}
@Override
@@ -144,7 +145,7 @@ public abstract class Measure {
Function<? super MeasureDouble, T> p0,
Function<? super MeasureLong, T> p1,
Function<? super Measure, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<MeasureLong, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
@Override
diff --git a/api/src/main/java/io/opencensus/stats/Measurement.java b/api/src/main/java/io/opencensus/stats/Measurement.java
index 6e4b6597..954cf43a 100644
--- a/api/src/main/java/io/opencensus/stats/Measurement.java
+++ b/api/src/main/java/io/opencensus/stats/Measurement.java
@@ -18,6 +18,7 @@ package io.opencensus.stats;
import com.google.auto.value.AutoValue;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.stats.Measure.MeasureDouble;
import io.opencensus.stats.Measure.MeasureLong;
import javax.annotation.concurrent.Immutable;
@@ -62,7 +63,8 @@ public abstract class Measurement {
Function<? super MeasurementDouble, T> p0,
Function<? super MeasurementLong, T> p1,
Function<? super Measurement, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<MeasurementDouble, T>removeSuperFromFunctionParameterType(p0)
+ .apply(this);
}
}
@@ -90,7 +92,7 @@ public abstract class Measurement {
Function<? super MeasurementDouble, T> p0,
Function<? super MeasurementLong, T> p1,
Function<? super Measurement, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<MeasurementLong, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
}
}
diff --git a/api/src/main/java/io/opencensus/stats/View.java b/api/src/main/java/io/opencensus/stats/View.java
index e077baf4..4f852c77 100644
--- a/api/src/main/java/io/opencensus/stats/View.java
+++ b/api/src/main/java/io/opencensus/stats/View.java
@@ -22,6 +22,7 @@ import com.google.auto.value.AutoValue;
import com.google.common.annotations.VisibleForTesting;
import io.opencensus.common.Duration;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.internal.StringUtil;
import io.opencensus.tags.TagKey;
import java.util.ArrayList;
@@ -178,7 +179,7 @@ public abstract class View {
Function<? super Cumulative, T> p0,
Function<? super Interval, T> p1,
Function<? super AggregationWindow, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<Cumulative, T>removeSuperFromFunctionParameterType(p0).apply(this);
}
}
@@ -220,7 +221,7 @@ public abstract class View {
Function<? super Cumulative, T> p0,
Function<? super Interval, T> p1,
Function<? super AggregationWindow, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<Interval, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
}
}
diff --git a/api/src/main/java/io/opencensus/stats/ViewData.java b/api/src/main/java/io/opencensus/stats/ViewData.java
index c711e6f3..dc8fd555 100644
--- a/api/src/main/java/io/opencensus/stats/ViewData.java
+++ b/api/src/main/java/io/opencensus/stats/ViewData.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
import io.opencensus.common.Function;
import io.opencensus.common.Functions;
import io.opencensus.common.Timestamp;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.stats.Aggregation.Count;
import io.opencensus.stats.Aggregation.Distribution;
import io.opencensus.stats.Aggregation.Mean;
@@ -237,7 +238,8 @@ public abstract class ViewData {
Function<? super CumulativeData, T> p0,
Function<? super IntervalData, T> p1,
Function<? super AggregationWindowData, T> defaultFunction) {
- return p0.apply(this);
+ return NullnessUtils.<CumulativeData, T>removeSuperFromFunctionParameterType(p0)
+ .apply(this);
}
/** Constructs a new {@link CumulativeData}. */
@@ -271,7 +273,7 @@ public abstract class ViewData {
Function<? super CumulativeData, T> p0,
Function<? super IntervalData, T> p1,
Function<? super AggregationWindowData, T> defaultFunction) {
- return p1.apply(this);
+ return NullnessUtils.<IntervalData, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
/** Constructs a new {@link IntervalData}. */
diff --git a/api/src/main/java/io/opencensus/trace/AttributeValue.java b/api/src/main/java/io/opencensus/trace/AttributeValue.java
index 6c938bd6..2de8fc91 100644
--- a/api/src/main/java/io/opencensus/trace/AttributeValue.java
+++ b/api/src/main/java/io/opencensus/trace/AttributeValue.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.google.auto.value.AutoValue;
import io.opencensus.common.Function;
+import io.opencensus.internal.NullnessUtils;
import javax.annotation.concurrent.Immutable;
/**
@@ -100,7 +101,8 @@ public abstract class AttributeValue {
Function<? super Boolean, T> booleanFunction,
Function<? super Long, T> longFunction,
Function<Object, T> defaultFunction) {
- return stringFunction.apply(getStringValue());
+ return NullnessUtils.<String, T>removeSuperFromFunctionParameterType(stringFunction)
+ .apply(getStringValue());
}
abstract String getStringValue();
@@ -126,7 +128,8 @@ public abstract class AttributeValue {
Function<? super Boolean, T> booleanFunction,
Function<? super Long, T> longFunction,
Function<Object, T> defaultFunction) {
- return booleanFunction.apply(getBooleanValue());
+ return NullnessUtils.<Boolean, T>removeSuperFromFunctionParameterType(booleanFunction)
+ .apply(getBooleanValue());
}
abstract Boolean getBooleanValue();
@@ -152,7 +155,8 @@ public abstract class AttributeValue {
Function<? super Boolean, T> booleanFunction,
Function<? super Long, T> longFunction,
Function<Object, T> defaultFunction) {
- return longFunction.apply(getLongValue());
+ return NullnessUtils.<Long, T>removeSuperFromFunctionParameterType(longFunction)
+ .apply(getLongValue());
}
abstract Long getLongValue();