aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/io/opencensus/internal/NullnessUtils.java12
-rw-r--r--api/src/main/java/io/opencensus/stats/Stats.java3
-rw-r--r--api/src/main/java/io/opencensus/tags/Tags.java3
-rw-r--r--api/src/main/java/io/opencensus/trace/Tracing.java3
-rw-r--r--contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/ContextTrampoline.java2
-rw-r--r--contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/TraceTrampoline.java2
-rw-r--r--contrib/zpages/src/main/java/io/opencensus/contrib/zpages/TracezZPageHandler.java8
-rw-r--r--exporters/trace/zipkin/src/main/java/io/opencensus/exporter/trace/zipkin/ZipkinExporterHandler.java4
-rw-r--r--impl/src/main/java/io/opencensus/impl/internal/DisruptorEventQueue.java2
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java12
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java12
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java10
-rw-r--r--impl_core/src/main/java/io/opencensus/implcore/trace/internal/ConcurrentIntrusiveList.java7
13 files changed, 63 insertions, 17 deletions
diff --git a/api/src/main/java/io/opencensus/internal/NullnessUtils.java b/api/src/main/java/io/opencensus/internal/NullnessUtils.java
index ca3419cd..0301b798 100644
--- a/api/src/main/java/io/opencensus/internal/NullnessUtils.java
+++ b/api/src/main/java/io/opencensus/internal/NullnessUtils.java
@@ -17,15 +17,25 @@
package io.opencensus.internal;
import io.opencensus.common.Function;
+import javax.annotation.Nullable;
/*>>>
import org.checkerframework.checker.nullness.qual.KeyForBottom;
*/
-/** Utility methods for working around Checker Framework issues. */
+/**
+ * Utility methods for suppressing nullness warnings and working around Checker Framework issues.
+ */
public final class NullnessUtils {
private NullnessUtils() {}
+ /** Suppress warnings about a nullable value. */
+ // TODO(sebright): Try to remove all uses of this method.
+ @SuppressWarnings("nullness")
+ public static <T> T castNonNull(@Nullable T arg) {
+ return arg;
+ }
+
/**
* Work around https://github.com/typetools/checker-framework/issues/1712 by removing {@code ?
* super} from a {@code Function}'s argument type.
diff --git a/api/src/main/java/io/opencensus/stats/Stats.java b/api/src/main/java/io/opencensus/stats/Stats.java
index d02780f8..0830313a 100644
--- a/api/src/main/java/io/opencensus/stats/Stats.java
+++ b/api/src/main/java/io/opencensus/stats/Stats.java
@@ -17,6 +17,7 @@
package io.opencensus.stats;
import com.google.common.annotations.VisibleForTesting;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.internal.Provider;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -26,7 +27,7 @@ public final class Stats {
private static final Logger logger = Logger.getLogger(Stats.class.getName());
private static final StatsComponent statsComponent =
- loadStatsComponent(StatsComponent.class.getClassLoader());
+ loadStatsComponent(NullnessUtils.castNonNull(StatsComponent.class.getClassLoader()));
/** Returns the default {@link StatsRecorder}. */
public static StatsRecorder getStatsRecorder() {
diff --git a/api/src/main/java/io/opencensus/tags/Tags.java b/api/src/main/java/io/opencensus/tags/Tags.java
index 593312ae..f480714d 100644
--- a/api/src/main/java/io/opencensus/tags/Tags.java
+++ b/api/src/main/java/io/opencensus/tags/Tags.java
@@ -17,6 +17,7 @@
package io.opencensus.tags;
import com.google.common.annotations.VisibleForTesting;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.internal.Provider;
import io.opencensus.tags.propagation.TagPropagationComponent;
import java.util.logging.Level;
@@ -27,7 +28,7 @@ public final class Tags {
private static final Logger logger = Logger.getLogger(Tags.class.getName());
private static final TagsComponent tagsComponent =
- loadTagsComponent(TagsComponent.class.getClassLoader());
+ loadTagsComponent(NullnessUtils.castNonNull(TagsComponent.class.getClassLoader()));
private Tags() {}
diff --git a/api/src/main/java/io/opencensus/trace/Tracing.java b/api/src/main/java/io/opencensus/trace/Tracing.java
index c68f66ad..8e575265 100644
--- a/api/src/main/java/io/opencensus/trace/Tracing.java
+++ b/api/src/main/java/io/opencensus/trace/Tracing.java
@@ -18,6 +18,7 @@ package io.opencensus.trace;
import com.google.common.annotations.VisibleForTesting;
import io.opencensus.common.Clock;
+import io.opencensus.internal.NullnessUtils;
import io.opencensus.internal.Provider;
import io.opencensus.trace.config.TraceConfig;
import io.opencensus.trace.export.ExportComponent;
@@ -29,7 +30,7 @@ import java.util.logging.Logger;
public final class Tracing {
private static final Logger logger = Logger.getLogger(Tracing.class.getName());
private static final TraceComponent traceComponent =
- loadTraceComponent(TraceComponent.class.getClassLoader());
+ loadTraceComponent(NullnessUtils.castNonNull(TraceComponent.class.getClassLoader()));
/**
* Returns the global {@link Tracer}.
diff --git a/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/ContextTrampoline.java b/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/ContextTrampoline.java
index dd250790..382a161d 100644
--- a/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/ContextTrampoline.java
+++ b/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/ContextTrampoline.java
@@ -31,6 +31,8 @@ package io.opencensus.contrib.agent.bootstrap;
* <p>{@code ContextTrampoline} is implemented as a static class to allow for easy and fast use from
* instrumented bytecode. We cannot use dependency injection for the instrumented bytecode.
*/
+// TODO(sebright): Fix the Checker Framework warnings.
+@SuppressWarnings("nullness")
public final class ContextTrampoline {
// Not synchronized to avoid any synchronization costs after initialization.
diff --git a/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/TraceTrampoline.java b/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/TraceTrampoline.java
index 975caf99..b4501b45 100644
--- a/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/TraceTrampoline.java
+++ b/contrib/agent/src/main/java/io/opencensus/contrib/agent/bootstrap/TraceTrampoline.java
@@ -35,6 +35,8 @@ import javax.annotation.Nullable;
* <p>{@code TraceTrampoline} is implemented as a static class to allow for easy and fast use from
* instrumented bytecode. We cannot use dependency injection for the instrumented bytecode.
*/
+// TODO(sebright): Fix the Checker Framework warnings.
+@SuppressWarnings("nullness")
public final class TraceTrampoline {
// Not synchronized to avoid any synchronization costs after initialization.
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 a1f3545b..7a42c2c7 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
@@ -370,7 +370,7 @@ final class TracezZPageHandler extends ZPageHandler {
.escape(
event.getEvent() instanceof Annotation
? renderAnnotation((Annotation) event.getEvent())
- : renderNetworkEvents((NetworkEvent) event.getEvent())));
+ : renderNetworkEvents((NetworkEvent) castNonNull(event.getEvent()))));
lastTimestampNanos = event.getTimestamp();
}
@@ -383,6 +383,12 @@ final class TracezZPageHandler extends ZPageHandler {
"", htmlEscaper().escape(renderAttributes(span.getAttributes().getAttributeMap())));
}
+ // TODO(sebright): Remove this method.
+ @SuppressWarnings("nullness")
+ private static <T> T castNonNull(@Nullable T arg) {
+ return arg;
+ }
+
// Emits the summary table with links to all samples.
private void emitSummaryTable(PrintWriter out, Formatter formatter)
throws UnsupportedEncodingException {
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 5f33c1ab..8e9443da 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
@@ -109,7 +109,11 @@ final class ZipkinExporterHandler extends SpanExporter.Handler {
static Span generateSpan(SpanData spanData, Endpoint localEndpoint) {
SpanContext context = spanData.getContext();
long startTimestamp = toEpochMicros(spanData.getStartTimestamp());
+
+ // TODO(sebright): Fix the Checker Framework warning.
+ @SuppressWarnings("nullness")
long endTimestamp = toEpochMicros(spanData.getEndTimestamp());
+
Span.Builder spanBuilder =
Span.newBuilder()
.traceId(encodeTraceId(context.getTraceId()))
diff --git a/impl/src/main/java/io/opencensus/impl/internal/DisruptorEventQueue.java b/impl/src/main/java/io/opencensus/impl/internal/DisruptorEventQueue.java
index 8b15c37b..02fa1b4c 100644
--- a/impl/src/main/java/io/opencensus/impl/internal/DisruptorEventQueue.java
+++ b/impl/src/main/java/io/opencensus/impl/internal/DisruptorEventQueue.java
@@ -173,6 +173,8 @@ public final class DisruptorEventQueue implements EventQueue {
*/
private static final class DisruptorEventHandler implements EventHandler<DisruptorEvent> {
@Override
+ // TODO(sebright): Fix the Checker Framework warning.
+ @SuppressWarnings("nullness")
public void onEvent(DisruptorEvent event, long sequence, boolean endOfBatch) {
event.getEntry().process();
}
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
index 04ed8f00..3d2d4d15 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/internal/NullnessUtils.java
@@ -17,15 +17,25 @@
package io.opencensus.implcore.internal;
import io.opencensus.common.Function;
+import javax.annotation.Nullable;
/*>>>
import org.checkerframework.checker.nullness.qual.KeyForBottom;
*/
-/** Utility methods for working around Checker Framework issues. */
+/**
+ * Utility methods for suppressing nullness warnings and working around Checker Framework issues.
+ */
public final class NullnessUtils {
private NullnessUtils() {}
+ /** Suppress warnings about a nullable value. */
+ // TODO(sebright): Try to remove all uses of this method.
+ @SuppressWarnings("nullness")
+ public static <T> T castNonNull(@Nullable T arg) {
+ return arg;
+ }
+
/**
* Work around https://github.com/typetools/checker-framework/issues/1712 by removing {@code ?
* super} from a {@code Function}'s argument type.
diff --git a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
index 2c545aff..7d251559 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/stats/MutableViewData.java
@@ -26,6 +26,7 @@ import io.opencensus.common.Duration;
import io.opencensus.common.Function;
import io.opencensus.common.Functions;
import io.opencensus.common.Timestamp;
+import io.opencensus.implcore.internal.NullnessUtils;
import io.opencensus.implcore.stats.MutableAggregation.MutableCount;
import io.opencensus.implcore.stats.MutableAggregation.MutableDistribution;
import io.opencensus.implcore.stats.MutableAggregation.MutableMean;
@@ -307,7 +308,7 @@ abstract class MutableViewData {
List<TagValue> tagValues = getTagValues(getTagMap(context), super.view.getColumns());
refreshBucketList(timestamp);
// It is always the last bucket that does the recording.
- buckets.peekLast().record(tagValues, value);
+ NullnessUtils.castNonNull(buckets.peekLast()).record(tagValues, value);
}
@Override
@@ -345,7 +346,7 @@ abstract class MutableViewData {
if (buckets.size() != N + 1) {
throw new AssertionError("Bucket list must have exactly " + (N + 1) + " buckets.");
}
- Timestamp startOfLastBucket = buckets.peekLast().getStart();
+ Timestamp startOfLastBucket = NullnessUtils.castNonNull(buckets.peekLast()).getStart();
// TODO(songya): decide what to do when time goes backwards
checkArgument(
now.compareTo(startOfLastBucket) >= 0,
@@ -361,7 +362,8 @@ abstract class MutableViewData {
Timestamp startOfNewBucket;
if (!buckets.isEmpty()) {
- startOfNewBucket = buckets.peekLast().getStart().addDuration(bucketDuration);
+ startOfNewBucket =
+ NullnessUtils.castNonNull(buckets.peekLast()).getStart().addDuration(bucketDuration);
} else {
// Initialize bucket list. Should only enter this block once.
startOfNewBucket = subtractDuration(now, totalDuration);
@@ -410,8 +412,8 @@ abstract class MutableViewData {
Aggregation aggregation,
Timestamp now) {
// Put fractional stats of the head (oldest) bucket.
- IntervalBucket head = buckets.peekFirst();
- IntervalBucket tail = buckets.peekLast();
+ IntervalBucket head = NullnessUtils.castNonNull(buckets.peekFirst());
+ IntervalBucket tail = NullnessUtils.castNonNull(buckets.peekLast());
double fractionTail = tail.getFraction(now);
// TODO(songya): decide what to do when time goes backwards
checkArgument(
diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java
index 9f72aa71..f80ba2bf 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java
@@ -22,6 +22,7 @@ import static com.google.common.base.Preconditions.checkState;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.EvictingQueue;
import io.opencensus.common.Clock;
+import io.opencensus.implcore.internal.NullnessUtils;
import io.opencensus.implcore.internal.TimestampConverter;
import io.opencensus.implcore.trace.internal.ConcurrentIntrusiveList.Element;
import io.opencensus.trace.Annotation;
@@ -249,14 +250,16 @@ public final class SpanImpl extends Span implements Element<SpanImpl> {
parentSpanId,
hasRemoteParent,
name,
- timestampConverter.convertNanoTime(startNanoTime),
+ NullnessUtils.castNonNull(timestampConverter).convertNanoTime(startNanoTime),
attributesSpanData,
annotationsSpanData,
networkEventsSpanData,
linksSpanData,
null, // Not supported yet.
hasBeenEnded ? getStatusWithDefault() : null,
- hasBeenEnded ? timestampConverter.convertNanoTime(endNanoTime) : null);
+ hasBeenEnded
+ ? NullnessUtils.castNonNull(timestampConverter).convertNanoTime(endNanoTime)
+ : null);
}
}
@@ -435,7 +438,8 @@ public final class SpanImpl extends Span implements Element<SpanImpl> {
}
List<TimedEvent<T>> eventsList = new ArrayList<TimedEvent<T>>(events.events.size());
for (EventWithNanoTime<T> networkEvent : events.events) {
- eventsList.add(networkEvent.toSpanDataTimedEvent(timestampConverter));
+ eventsList.add(
+ networkEvent.toSpanDataTimedEvent(NullnessUtils.castNonNull(timestampConverter)));
}
return SpanData.TimedEvents.create(eventsList, events.getNumberOfDroppedEvents());
}
diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/internal/ConcurrentIntrusiveList.java b/impl_core/src/main/java/io/opencensus/implcore/trace/internal/ConcurrentIntrusiveList.java
index 3eb76ae4..5b131756 100644
--- a/impl_core/src/main/java/io/opencensus/implcore/trace/internal/ConcurrentIntrusiveList.java
+++ b/impl_core/src/main/java/io/opencensus/implcore/trace/internal/ConcurrentIntrusiveList.java
@@ -18,6 +18,7 @@ package io.opencensus.implcore.trace.internal;
import static com.google.common.base.Preconditions.checkArgument;
+import io.opencensus.implcore.internal.NullnessUtils;
import io.opencensus.implcore.trace.internal.ConcurrentIntrusiveList.Element;
import java.util.ArrayList;
import java.util.Collection;
@@ -107,11 +108,11 @@ public final class ConcurrentIntrusiveList<T extends Element<T>> {
} else if (element.getNext() == null) {
// This is the last element, and there is at least another element because
// element.getPrev() != null.
- element.getPrev().setNext(null);
+ NullnessUtils.castNonNull(element.getPrev()).setNext(null);
element.setPrev(null);
} else {
- element.getPrev().setNext(element.getNext());
- element.getNext().setPrev(element.getPrev());
+ NullnessUtils.castNonNull(element.getPrev()).setNext(element.getNext());
+ NullnessUtils.castNonNull(element.getNext()).setPrev(element.getPrev());
element.setNext(null);
element.setPrev(null);
}