[Propagators] Nullable annotations (#5767)

This commit is contained in:
Piotr Kiełkowicz 2024-08-28 18:56:15 +02:00 committed by GitHub
parent 1b3f1894d9
commit ba8a0e4c13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 141 additions and 84 deletions

View File

@ -1,7 +1,4 @@
#nullable enable
~abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
~abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Fields.get -> System.Collections.Generic.ISet<string>
~abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
~OpenTelemetry.Baggage.GetBaggage() -> System.Collections.Generic.IReadOnlyDictionary<string, string>
~OpenTelemetry.Baggage.GetBaggage(string name) -> string
~OpenTelemetry.Baggage.GetEnumerator() -> System.Collections.Generic.Dictionary<string, string>.Enumerator
@ -14,26 +11,12 @@
~OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Value.set -> void
~OpenTelemetry.Context.IRuntimeContextSlotValueAccessor.Value.get -> object
~OpenTelemetry.Context.IRuntimeContextSlotValueAccessor.Value.set -> void
~OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.CompositeTextMapPropagator(System.Collections.Generic.IEnumerable<OpenTelemetry.Context.Propagation.TextMapPropagator> propagators) -> void
~OpenTelemetry.Context.RuntimeContextSlot<T>.Name.get -> string
~OpenTelemetry.Context.RuntimeContextSlot<T>.RuntimeContextSlot(string name) -> void
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.ThreadLocalRuntimeContextSlot(string name) -> void
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Value.get -> object
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Value.set -> void
~override OpenTelemetry.Baggage.Equals(object obj) -> bool
~override OpenTelemetry.Context.Propagation.B3Propagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
~override OpenTelemetry.Context.Propagation.B3Propagator.Fields.get -> System.Collections.Generic.ISet<string>
~override OpenTelemetry.Context.Propagation.B3Propagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
~override OpenTelemetry.Context.Propagation.BaggagePropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
~override OpenTelemetry.Context.Propagation.BaggagePropagator.Fields.get -> System.Collections.Generic.ISet<string>
~override OpenTelemetry.Context.Propagation.BaggagePropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
~override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
~override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Fields.get -> System.Collections.Generic.ISet<string>
~override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
~override OpenTelemetry.Context.Propagation.PropagationContext.Equals(object obj) -> bool
~override OpenTelemetry.Context.Propagation.TraceContextPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
~override OpenTelemetry.Context.Propagation.TraceContextPropagator.Fields.get -> System.Collections.Generic.ISet<string>
~override OpenTelemetry.Context.Propagation.TraceContextPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
~static OpenTelemetry.Baggage.Create(System.Collections.Generic.Dictionary<string, string> baggageItems = null) -> OpenTelemetry.Baggage
~static OpenTelemetry.Baggage.GetBaggage(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> System.Collections.Generic.IReadOnlyDictionary<string, string>
~static OpenTelemetry.Baggage.GetBaggage(string name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> string
@ -41,7 +24,6 @@
~static OpenTelemetry.Baggage.RemoveBaggage(string name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
~static OpenTelemetry.Baggage.SetBaggage(string name, string value, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
~static OpenTelemetry.Baggage.SetBaggage(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> baggageItems, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
~static OpenTelemetry.Context.Propagation.Propagators.DefaultTextMapPropagator.get -> OpenTelemetry.Context.Propagation.TextMapPropagator
~static OpenTelemetry.Context.RuntimeContext.ContextSlotType.get -> System.Type
~static OpenTelemetry.Context.RuntimeContext.ContextSlotType.set -> void
~static OpenTelemetry.Context.RuntimeContext.GetSlot<T>(string slotName) -> OpenTelemetry.Context.RuntimeContextSlot<T>
@ -50,6 +32,9 @@
~static OpenTelemetry.Context.RuntimeContext.RegisterSlot<T>(string slotName) -> OpenTelemetry.Context.RuntimeContextSlot<T>
~static OpenTelemetry.Context.RuntimeContext.SetValue(string slotName, object value) -> void
~static OpenTelemetry.Context.RuntimeContext.SetValue<T>(string slotName, T value) -> void
abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Fields.get -> System.Collections.Generic.ISet<string!>?
abstract OpenTelemetry.Context.Propagation.TextMapPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
abstract OpenTelemetry.Context.RuntimeContextSlot<T>.Get() -> T
abstract OpenTelemetry.Context.RuntimeContextSlot<T>.Set(T value) -> void
abstract OpenTelemetry.Logs.LoggerProviderBuilder.AddInstrumentation<TInstrumentation>(System.Func<TInstrumentation>! instrumentationFactory) -> OpenTelemetry.Logs.LoggerProviderBuilder!
@ -73,6 +58,7 @@ OpenTelemetry.Context.IRuntimeContextSlotValueAccessor
OpenTelemetry.Context.Propagation.B3Propagator
OpenTelemetry.Context.Propagation.B3Propagator.B3Propagator() -> void
OpenTelemetry.Context.Propagation.B3Propagator.B3Propagator(bool singleHeader) -> void
OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.CompositeTextMapPropagator(System.Collections.Generic.IEnumerable<OpenTelemetry.Context.Propagation.TextMapPropagator!>! propagators) -> void
OpenTelemetry.Context.Propagation.BaggagePropagator
OpenTelemetry.Context.Propagation.BaggagePropagator.BaggagePropagator() -> void
OpenTelemetry.Context.Propagation.CompositeTextMapPropagator
@ -188,7 +174,20 @@ OpenTelemetry.Trace.TracerProviderBuilder.TracerProviderBuilder() -> void
override OpenTelemetry.Baggage.GetHashCode() -> int
override OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Get() -> T
override OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Set(T value) -> void
override OpenTelemetry.Context.Propagation.B3Propagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Context.Propagation.B3Propagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Context.Propagation.B3Propagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
override OpenTelemetry.Context.Propagation.BaggagePropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Context.Propagation.BaggagePropagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Context.Propagation.BaggagePropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Context.Propagation.CompositeTextMapPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
override OpenTelemetry.Context.Propagation.PropagationContext.GetHashCode() -> int
override OpenTelemetry.Context.Propagation.PropagationContext.Equals(object? obj) -> bool
override OpenTelemetry.Context.Propagation.TraceContextPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Context.Propagation.TraceContextPropagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Context.Propagation.TraceContextPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
override OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Dispose(bool disposing) -> void
override OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Get() -> T
override OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Set(T value) -> void
@ -208,6 +207,7 @@ static OpenTelemetry.Baggage.operator !=(OpenTelemetry.Baggage left, OpenTelemet
static OpenTelemetry.Baggage.operator ==(OpenTelemetry.Baggage left, OpenTelemetry.Baggage right) -> bool
static OpenTelemetry.Context.Propagation.PropagationContext.operator !=(OpenTelemetry.Context.Propagation.PropagationContext left, OpenTelemetry.Context.Propagation.PropagationContext right) -> bool
static OpenTelemetry.Context.Propagation.PropagationContext.operator ==(OpenTelemetry.Context.Propagation.PropagationContext left, OpenTelemetry.Context.Propagation.PropagationContext right) -> bool
static OpenTelemetry.Context.Propagation.Propagators.DefaultTextMapPropagator.get -> OpenTelemetry.Context.Propagation.TextMapPropagator!
static OpenTelemetry.Trace.ActivityExtensions.GetStatus(this System.Diagnostics.Activity? activity) -> OpenTelemetry.Trace.Status
static OpenTelemetry.Trace.ActivityExtensions.RecordException(this System.Diagnostics.Activity? activity, System.Exception? ex, in System.Diagnostics.TagList tags) -> void
static OpenTelemetry.Trace.ActivityExtensions.RecordException(this System.Diagnostics.Activity? activity, System.Exception? ex) -> void

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
using System.Text;
using OpenTelemetry.Internal;
@ -66,7 +68,7 @@ public sealed class B3Propagator : TextMapPropagator
/// <inheritdoc/>
[Obsolete("Use B3Propagator class from OpenTelemetry.Extensions.Propagators namespace, shipped as part of OpenTelemetry.Extensions.Propagators package.")]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
{
if (context.ActivityContext.IsValid())
@ -146,7 +148,7 @@ public sealed class B3Propagator : TextMapPropagator
}
}
private static PropagationContext ExtractFromMultipleHeaders<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
private static PropagationContext ExtractFromMultipleHeaders<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
try
{
@ -179,7 +181,8 @@ public sealed class B3Propagator : TextMapPropagator
}
var traceOptions = ActivityTraceFlags.None;
if (SampledValues.Contains(getter(carrier, XB3Sampled)?.FirstOrDefault())
var xb3Sampled = getter(carrier, XB3Sampled)?.FirstOrDefault();
if ((xb3Sampled != null && SampledValues.Contains(xb3Sampled))
|| FlagsValue.Equals(getter(carrier, XB3Flags)?.FirstOrDefault(), StringComparison.Ordinal))
{
traceOptions |= ActivityTraceFlags.Recorded;
@ -196,7 +199,7 @@ public sealed class B3Propagator : TextMapPropagator
}
}
private static PropagationContext ExtractFromSingleHeader<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
private static PropagationContext ExtractFromSingleHeader<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
try
{
@ -206,7 +209,7 @@ public sealed class B3Propagator : TextMapPropagator
return context;
}
var parts = header.Split(XB3CombinedDelimiter);
var parts = header!.Split(XB3CombinedDelimiter);
if (parts.Length < 2 || parts.Length > 4)
{
return context;

View File

@ -1,6 +1,11 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
#if NET
using System.Diagnostics.CodeAnalysis;
#endif
using System.Net;
using System.Text;
using OpenTelemetry.Internal;
@ -24,7 +29,7 @@ public class BaggagePropagator : TextMapPropagator
public override ISet<string> Fields => new HashSet<string> { BaggageHeaderName };
/// <inheritdoc/>
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
if (context.Baggage != default)
{
@ -46,16 +51,16 @@ public class BaggagePropagator : TextMapPropagator
try
{
Dictionary<string, string> baggage = null;
var baggageCollection = getter(carrier, BaggageHeaderName);
if (baggageCollection?.Any() ?? false)
{
TryExtractBaggage(baggageCollection.ToArray(), out baggage);
if (TryExtractBaggage(baggageCollection.ToArray(), out var baggage))
{
return new PropagationContext(context.ActivityContext, new Baggage(baggage));
}
}
return new PropagationContext(
context.ActivityContext,
baggage == null ? context.Baggage : new Baggage(baggage));
return new PropagationContext(context.ActivityContext, context.Baggage);
}
catch (Exception ex)
{
@ -102,11 +107,16 @@ public class BaggagePropagator : TextMapPropagator
}
}
internal static bool TryExtractBaggage(string[] baggageCollection, out Dictionary<string, string> baggage)
internal static bool TryExtractBaggage(
string[] baggageCollection,
#if NET
[NotNullWhen(true)]
#endif
out Dictionary<string, string>? baggage)
{
int baggageLength = -1;
bool done = false;
Dictionary<string, string> baggageDictionary = null;
Dictionary<string, string>? baggageDictionary = null;
foreach (var item in baggageCollection)
{

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using OpenTelemetry.Internal;
namespace OpenTelemetry.Context.Propagation;
@ -43,7 +45,7 @@ public class CompositeTextMapPropagator : TextMapPropagator
}
else
{
ISet<string> fields = this.propagators[0].Fields;
ISet<string>? fields = this.propagators[0].Fields;
var output = fields is not null
? new HashSet<string>(fields)
@ -66,7 +68,7 @@ public class CompositeTextMapPropagator : TextMapPropagator
public override ISet<string> Fields => this.allFields;
/// <inheritdoc/>
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
for (int i = 0; i < this.propagators.Count; i++)
{

View File

@ -1,15 +1,17 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
namespace OpenTelemetry.Context.Propagation;
internal sealed class NoopTextMapPropagator : TextMapPropagator
{
private static readonly PropagationContext DefaultPropagationContext = default;
public override ISet<string> Fields => null;
public override ISet<string>? Fields => null;
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
return DefaultPropagationContext;
}

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
namespace OpenTelemetry.Context.Propagation;
@ -53,7 +55,7 @@ public readonly struct PropagationContext : IEquatable<PropagationContext>
}
/// <inheritdoc/>
public override bool Equals(object obj) => (obj is PropagationContext context) && this.Equals(context);
public override bool Equals(object? obj) => (obj is PropagationContext context) && this.Equals(context);
/// <inheritdoc/>
public override int GetHashCode()

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
namespace OpenTelemetry.Context.Propagation;
/// <summary>

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
namespace OpenTelemetry.Context.Propagation;
/// <summary>
@ -15,12 +17,12 @@ public abstract class TextMapPropagator
/// * allow pre-allocation of fields, especially in systems like gRPC Metadata
/// * allow a single-pass over an iterator (ex OpenTracing has no getter in TextMap).
/// </summary>
public abstract ISet<string> Fields { get; }
public abstract ISet<string>? Fields { get; }
/// <summary>
/// Injects the context into a carrier.
/// </summary>
/// <typeparam name="T">Type of an object to set context on. Typically HttpRequest or similar.</typeparam>
/// <typeparam name="T">Type of object to set context on. Typically,HttpRequest or similar.</typeparam>
/// <param name="context">The default context to transmit over the wire.</param>
/// <param name="carrier">Object to set context on. Instance of this object will be passed to setter.</param>
/// <param name="setter">Action that will set name and value pair on the object.</param>
@ -29,10 +31,10 @@ public abstract class TextMapPropagator
/// <summary>
/// Extracts the context from a carrier.
/// </summary>
/// <typeparam name="T">Type of object to extract context from. Typically HttpRequest or similar.</typeparam>
/// <typeparam name="T">Type of object to extract context from. Typically, HttpRequest or similar.</typeparam>
/// <param name="context">The default context to be used if Extract fails.</param>
/// <param name="carrier">Object to extract context from. Instance of this object will be passed to the getter.</param>
/// <param name="getter">Function that will return string value of a key with the specified name.</param>
/// <returns>Context from it's text representation.</returns>
public abstract PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter);
/// <returns>Context from its text representation.</returns>
public abstract PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter);
}

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Buffers;
using System.Diagnostics;
using System.Runtime.CompilerServices;
@ -34,7 +36,7 @@ public class TraceContextPropagator : TextMapPropagator
public override ISet<string> Fields => new HashSet<string> { TraceState, TraceParent };
/// <inheritdoc/>
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
if (context.ActivityContext.IsValid())
{
@ -72,7 +74,7 @@ public class TraceContextPropagator : TextMapPropagator
return context;
}
string tracestate = null;
string? tracestate = null;
var tracestateCollection = getter(carrier, TraceState);
if (tracestateCollection?.Any() ?? false)
{
@ -122,7 +124,7 @@ public class TraceContextPropagator : TextMapPropagator
setter(carrier, TraceParent, traceparent);
string tracestateStr = context.ActivityContext.TraceState;
string? tracestateStr = context.ActivityContext.TraceState;
if (tracestateStr?.Length > 0)
{
setter(carrier, TraceState, tracestateStr);
@ -224,7 +226,7 @@ public class TraceContextPropagator : TextMapPropagator
{
tracestateResult = string.Empty;
char[] rentedArray = null;
char[]? rentedArray = null;
Span<char> traceStateBuffer = stackalloc char[128]; // 256B
Span<char> keyLookupBuffer = stackalloc char[96]; // 192B (3x32 keys)
int keys = 0;
@ -379,7 +381,7 @@ public class TraceContextPropagator : TextMapPropagator
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static void GrowBuffer(ref char[] array, ref Span<char> buffer)
static void GrowBuffer(ref char[]? array, ref Span<char> buffer)
{
var newBuffer = ArrayPool<char>.Shared.Rent(buffer.Length * 2);

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
using System.Text;
using OpenTelemetry.Internal;
@ -56,7 +58,7 @@ internal static class TraceStateUtilsNew
var keyStr = key.ToString();
if (names.Add(keyStr))
{
tracestate.Add(new KeyValuePair<string, string>(keyStr, value.ToString()));
tracestate!.Add(new KeyValuePair<string, string>(keyStr, value.ToString()));
}
else
{
@ -82,7 +84,7 @@ internal static class TraceStateUtilsNew
if (!isValid)
{
tracestate.Clear();
tracestate!.Clear();
return false;
}
@ -96,7 +98,7 @@ internal static class TraceStateUtilsNew
return false;
}
internal static string GetString(IEnumerable<KeyValuePair<string, string>> traceState)
internal static string GetString(IEnumerable<KeyValuePair<string, string>>? traceState)
{
if (traceState == null || !traceState.Any())
{

View File

@ -85,13 +85,14 @@ public readonly struct SpanContext : IEquatable<SpanContext>
{
get
{
if (string.IsNullOrEmpty(this.ActivityContext.TraceState))
var traceState = this.ActivityContext.TraceState;
if (string.IsNullOrEmpty(traceState))
{
return Enumerable.Empty<KeyValuePair<string, string>>();
}
var traceStateResult = new List<KeyValuePair<string, string>>();
TraceStateUtilsNew.AppendTraceState(this.ActivityContext.TraceState, traceStateResult);
TraceStateUtilsNew.AppendTraceState(traceState!, traceStateResult);
return traceStateResult;
}
}

View File

@ -1,11 +1,12 @@
#nullable enable
OpenTelemetry.Extensions.Propagators.B3Propagator
OpenTelemetry.Extensions.Propagators.B3Propagator.B3Propagator() -> void
OpenTelemetry.Extensions.Propagators.B3Propagator.B3Propagator(bool singleHeader) -> void
OpenTelemetry.Extensions.Propagators.JaegerPropagator
OpenTelemetry.Extensions.Propagators.JaegerPropagator.JaegerPropagator() -> void
override OpenTelemetry.Extensions.Propagators.B3Propagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Extensions.Propagators.B3Propagator.Fields.get -> System.Collections.Generic.ISet<string>
override OpenTelemetry.Extensions.Propagators.B3Propagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string, System.Collections.Generic.IEnumerable<string>> getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Fields.get -> System.Collections.Generic.ISet<string>
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string, string> setter) -> void
override OpenTelemetry.Extensions.Propagators.B3Propagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Extensions.Propagators.B3Propagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Extensions.Propagators.B3Propagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Extract<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Func<T, string!, System.Collections.Generic.IEnumerable<string!>?>! getter) -> OpenTelemetry.Context.Propagation.PropagationContext
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Fields.get -> System.Collections.Generic.ISet<string!>!
override OpenTelemetry.Extensions.Propagators.JaegerPropagator.Inject<T>(OpenTelemetry.Context.Propagation.PropagationContext context, T carrier, System.Action<T, string!, string!>! setter) -> void

View File

@ -62,7 +62,7 @@ public sealed class B3Propagator : TextMapPropagator
public override ISet<string> Fields => AllFields;
/// <inheritdoc/>
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
if (context.ActivityContext.IsValid())
{
@ -138,7 +138,7 @@ public sealed class B3Propagator : TextMapPropagator
}
}
private static PropagationContext ExtractFromMultipleHeaders<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
private static PropagationContext ExtractFromMultipleHeaders<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
try
{
@ -171,7 +171,8 @@ public sealed class B3Propagator : TextMapPropagator
}
var traceOptions = ActivityTraceFlags.None;
if (SampledValues.Contains(getter(carrier, XB3Sampled)?.FirstOrDefault())
var xb3Sampled = getter(carrier, XB3Sampled)?.FirstOrDefault();
if ((xb3Sampled != null && SampledValues.Contains(xb3Sampled))
|| FlagsValue.Equals(getter(carrier, XB3Flags)?.FirstOrDefault(), StringComparison.Ordinal))
{
traceOptions |= ActivityTraceFlags.Recorded;
@ -188,7 +189,7 @@ public sealed class B3Propagator : TextMapPropagator
}
}
private static PropagationContext ExtractFromSingleHeader<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
private static PropagationContext ExtractFromSingleHeader<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
try
{
@ -198,7 +199,7 @@ public sealed class B3Propagator : TextMapPropagator
return context;
}
var parts = header.Split(XB3CombinedDelimiter);
var parts = header!.Split(XB3CombinedDelimiter);
if (parts.Length < 2 || parts.Length > 4)
{
return context;

View File

@ -26,7 +26,7 @@ public class JaegerPropagator : TextMapPropagator
public override ISet<string> Fields => new HashSet<string> { JaegerHeader };
/// <inheritdoc/>
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
if (context.ActivityContext.IsValid())
{
@ -56,7 +56,7 @@ public class JaegerPropagator : TextMapPropagator
return context;
}
var jaegerHeaderParsed = TryExtractTraceContext(jaegerHeader, out var traceId, out var spanId, out var traceOptions);
var jaegerHeaderParsed = TryExtractTraceContext(jaegerHeader!, out var traceId, out var spanId, out var traceOptions);
if (!jaegerHeaderParsed)
{

View File

@ -5,9 +5,6 @@
<PackageTags>$(PackageTags);distributed-tracing;AspNet;AspNetCore;B3</PackageTags>
<MinVerTagPrefix>core-</MinVerTagPrefix>
<IncludeInstrumentationHelpers>true</IncludeInstrumentationHelpers>
<!-- this is temporary. will remove in future PR. -->
<Nullable>disable</Nullable>
</PropertyGroup>
<ItemGroup>

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
using Xunit;
using Xunit.Abstractions;
@ -24,8 +26,12 @@ public class B3PropagatorTest
private static readonly Func<IDictionary<string, string>, string, IEnumerable<string>> Getter =
(d, k) =>
{
d.TryGetValue(k, out var v);
return new string[] { v };
if (d.TryGetValue(k, out var v))
{
return [v];
}
return [];
};
private readonly B3Propagator b3propagator = new();

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Net;
using Xunit;
@ -11,8 +13,12 @@ public class BaggagePropagatorTest
private static readonly Func<IDictionary<string, string>, string, IEnumerable<string>> Getter =
(d, k) =>
{
d.TryGetValue(k, out var v);
return new string[] { v };
if (d.TryGetValue(k, out var v))
{
return [v];
}
return [];
};
private static readonly Func<IList<KeyValuePair<string, string>>, string, IEnumerable<string>> GetterList =
@ -38,7 +44,7 @@ public class BaggagePropagatorTest
[Fact]
public void ValidateDefaultCarrierExtraction()
{
var propagationContext = this.baggage.Extract<string>(default, null, null);
var propagationContext = this.baggage.Extract<string>(default, null!, null!);
Assert.Equal(default, propagationContext);
}
@ -46,7 +52,7 @@ public class BaggagePropagatorTest
public void ValidateDefaultGetterExtraction()
{
var carrier = new Dictionary<string, string>();
var propagationContext = this.baggage.Extract(default, carrier, null);
var propagationContext = this.baggage.Extract(default, carrier, null!);
Assert.Equal(default, propagationContext);
}

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
using Xunit;
@ -33,7 +35,7 @@ public class CompositePropagatorTest
[Fact]
public void CompositePropagator_NullTextMapPropagators()
{
Assert.Throws<ArgumentNullException>(() => new CompositeTextMapPropagator(null));
Assert.Throws<ArgumentNullException>(() => new CompositeTextMapPropagator(null!));
}
[Fact]
@ -46,7 +48,7 @@ public class CompositePropagatorTest
[Fact]
public void CompositePropagator_NullTextMapPropagator()
{
var compositePropagator = new CompositeTextMapPropagator([null]);
var compositePropagator = new CompositeTextMapPropagator([null!]);
Assert.Empty(compositePropagator.Fields);
}

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using Xunit;
namespace OpenTelemetry.Context.Propagation.Tests;

View File

@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using System.Diagnostics;
namespace OpenTelemetry.Context.Propagation.Tests;
@ -27,7 +29,7 @@ public class TestPropagator : TextMapPropagator
public override ISet<string> Fields => new HashSet<string>() { this.idHeaderName, this.stateHeaderName };
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>> getter)
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
{
Interlocked.Increment(ref this.extractCount);
@ -37,7 +39,7 @@ public class TestPropagator : TextMapPropagator
}
var id = getter(carrier, this.idHeaderName);
if (!id.Any())
if (id == null || !id.Any())
{
return context;
}

View File

@ -1,15 +1,24 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
#nullable enable
using Xunit;
namespace OpenTelemetry.Context.Propagation.Tests;
public class TracestateUtilsTests
{
[Fact]
public void NullTracestate()
{
var tracestateEntries = new List<KeyValuePair<string, string>>();
Assert.False(TraceStateUtilsNew.AppendTraceState(null!, tracestateEntries));
Assert.Empty(tracestateEntries);
}
[Theory]
[InlineData("")]
[InlineData(null)]
[InlineData(" ")]
[InlineData("\t")]
public void EmptyTracestate(string tracestate)

View File

@ -25,8 +25,12 @@ public class B3PropagatorTest
private static readonly Func<IDictionary<string, string>, string, IEnumerable<string>> Getter =
(d, k) =>
{
d.TryGetValue(k, out var v);
return new string[] { v };
if (d.TryGetValue(k, out var v))
{
return [v];
}
return [];
};
private readonly B3Propagator b3propagator = new();
@ -354,6 +358,7 @@ public class B3PropagatorTest
[Fact]
public void Fields_list()
{
Assert.Equivalent(this.b3propagator.Fields, new List<string> { B3Propagator.XB3TraceId, B3Propagator.XB3SpanId, B3Propagator.XB3ParentSpanId, B3Propagator.XB3Sampled, B3Propagator.XB3Flags, B3Propagator.XB3Flags });
ContainsExactly(
this.b3propagator.Fields,
new List<string> { B3Propagator.XB3TraceId, B3Propagator.XB3SpanId, B3Propagator.XB3ParentSpanId, B3Propagator.XB3Sampled, B3Propagator.XB3Flags });

View File

@ -77,7 +77,7 @@ public class JaegerPropagatorTest
var headers = new Dictionary<string, string[]>();
// act
var result = new JaegerPropagator().Extract(propagationContext, headers, null);
var result = new JaegerPropagator().Extract(propagationContext, headers, null!);
// assert
Assert.Equal(propagationContext, result);
@ -183,7 +183,7 @@ public class JaegerPropagatorTest
var headers = new Dictionary<string, string>();
// act
new JaegerPropagator().Inject(propagationContext, headers, null);
new JaegerPropagator().Inject(propagationContext, headers, null!);
// assert
Assert.Empty(headers);

View File

@ -2,8 +2,6 @@
<PropertyGroup>
<TargetFrameworks>$(TargetFrameworksForTests)</TargetFrameworks>
<!-- this is temporary. will remove in future PR. -->
<Nullable>disable</Nullable>
</PropertyGroup>
<ItemGroup>