diff options
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); } } } |