aboutsummaryrefslogtreecommitdiff
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
parentbbe6b10f7c6b622b4ffd18e98f58d96a8eba3854 (diff)
downloadopencensus-java-18cf999ddea65775db2a482e00cea05d52961077.tar.gz
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.
-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
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java40
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/MutableAggregation.java10
10 files changed, 119 insertions, 24 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();
diff --git a/impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java b/impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java
new file mode 100644
index 00000000..04ed8f00
--- /dev/null
+++ b/impl_core/src/main/java/io/opencensus/implcore/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.implcore.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/impl_core/src/main/java/io/opencensus/implcore/stats/MutableAggregation.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableAggregation.java
index deabdce7..1a5771eb 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableAggregation.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableAggregation.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import io.opencensus.common.Function;
+import io.opencensus.implcore.internal.NullnessUtils;
import io.opencensus.stats.Aggregation;
import io.opencensus.stats.BucketBoundaries;
@@ -99,7 +100,7 @@ abstract class MutableAggregation {
Function<? super MutableCount, T> p1,
Function<? super MutableMean, T> p2,
Function<? super MutableDistribution, T> p3) {
- return p0.apply(this);
+ return NullnessUtils.<MutableSum, T>removeSuperFromFunctionParameterType(p0).apply(this);
}
}
@@ -145,7 +146,7 @@ abstract class MutableAggregation {
Function<? super MutableCount, T> p1,
Function<? super MutableMean, T> p2,
Function<? super MutableDistribution, T> p3) {
- return p1.apply(this);
+ return NullnessUtils.<MutableCount, T>removeSuperFromFunctionParameterType(p1).apply(this);
}
}
@@ -213,7 +214,7 @@ abstract class MutableAggregation {
Function<? super MutableCount, T> p1,
Function<? super MutableMean, T> p2,
Function<? super MutableDistribution, T> p3) {
- return p2.apply(this);
+ return NullnessUtils.<MutableMean, T>removeSuperFromFunctionParameterType(p2).apply(this);
}
}
@@ -355,7 +356,8 @@ abstract class MutableAggregation {
Function<? super MutableCount, T> p1,
Function<? super MutableMean, T> p2,
Function<? super MutableDistribution, T> p3) {
- return p3.apply(this);
+ return NullnessUtils.<MutableDistribution, T>removeSuperFromFunctionParameterType(p3)
+ .apply(this);
}
}
}