Skip to content

Commit 6e1b5ab

Browse files
authored
[api] Baggage nullable annotations (open-telemetry#5840)
1 parent 1c01770 commit 6e1b5ab

File tree

4 files changed

+47
-43
lines changed

4 files changed

+47
-43
lines changed

src/OpenTelemetry.Api/.publicApi/Stable/PublicAPI.Shipped.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
#nullable enable
2-
~OpenTelemetry.Baggage.GetBaggage() -> System.Collections.Generic.IReadOnlyDictionary<string, string>
3-
~OpenTelemetry.Baggage.GetBaggage(string name) -> string
4-
~OpenTelemetry.Baggage.GetEnumerator() -> System.Collections.Generic.Dictionary<string, string>.Enumerator
5-
~OpenTelemetry.Baggage.RemoveBaggage(string name) -> OpenTelemetry.Baggage
6-
~OpenTelemetry.Baggage.SetBaggage(params System.Collections.Generic.KeyValuePair<string, string>[] baggageItems) -> OpenTelemetry.Baggage
7-
~OpenTelemetry.Baggage.SetBaggage(string name, string value) -> OpenTelemetry.Baggage
8-
~OpenTelemetry.Baggage.SetBaggage(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> baggageItems) -> OpenTelemetry.Baggage
92
~OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.AsyncLocalRuntimeContextSlot(string name) -> void
103
~OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Value.get -> object
114
~OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Value.set -> void
@@ -16,14 +9,6 @@
169
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.ThreadLocalRuntimeContextSlot(string name) -> void
1710
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Value.get -> object
1811
~OpenTelemetry.Context.ThreadLocalRuntimeContextSlot<T>.Value.set -> void
19-
~override OpenTelemetry.Baggage.Equals(object obj) -> bool
20-
~static OpenTelemetry.Baggage.Create(System.Collections.Generic.Dictionary<string, string> baggageItems = null) -> OpenTelemetry.Baggage
21-
~static OpenTelemetry.Baggage.GetBaggage(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> System.Collections.Generic.IReadOnlyDictionary<string, string>
22-
~static OpenTelemetry.Baggage.GetBaggage(string name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> string
23-
~static OpenTelemetry.Baggage.GetEnumerator(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> System.Collections.Generic.Dictionary<string, string>.Enumerator
24-
~static OpenTelemetry.Baggage.RemoveBaggage(string name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
25-
~static OpenTelemetry.Baggage.SetBaggage(string name, string value, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
26-
~static OpenTelemetry.Baggage.SetBaggage(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> baggageItems, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
2712
~static OpenTelemetry.Context.RuntimeContext.ContextSlotType.get -> System.Type
2813
~static OpenTelemetry.Context.RuntimeContext.ContextSlotType.set -> void
2914
~static OpenTelemetry.Context.RuntimeContext.GetSlot<T>(string slotName) -> OpenTelemetry.Context.RuntimeContextSlot<T>
@@ -49,6 +34,13 @@ OpenTelemetry.Baggage.Baggage() -> void
4934
OpenTelemetry.Baggage.ClearBaggage() -> OpenTelemetry.Baggage
5035
OpenTelemetry.Baggage.Count.get -> int
5136
OpenTelemetry.Baggage.Equals(OpenTelemetry.Baggage other) -> bool
37+
OpenTelemetry.Baggage.GetBaggage() -> System.Collections.Generic.IReadOnlyDictionary<string!, string!>!
38+
OpenTelemetry.Baggage.GetBaggage(string! name) -> string?
39+
OpenTelemetry.Baggage.GetEnumerator() -> System.Collections.Generic.Dictionary<string!, string!>.Enumerator
40+
OpenTelemetry.Baggage.RemoveBaggage(string! name) -> OpenTelemetry.Baggage
41+
OpenTelemetry.Baggage.SetBaggage(params System.Collections.Generic.KeyValuePair<string!, string?>[]! baggageItems) -> OpenTelemetry.Baggage
42+
OpenTelemetry.Baggage.SetBaggage(string! name, string? value) -> OpenTelemetry.Baggage
43+
OpenTelemetry.Baggage.SetBaggage(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, string?>>! baggageItems) -> OpenTelemetry.Baggage
5244
OpenTelemetry.BaseProvider
5345
OpenTelemetry.BaseProvider.~BaseProvider() -> void
5446
OpenTelemetry.BaseProvider.BaseProvider() -> void
@@ -171,6 +163,7 @@ OpenTelemetry.Trace.TracerProvider.GetTracer(string! name, string? version = nul
171163
OpenTelemetry.Trace.TracerProvider.TracerProvider() -> void
172164
OpenTelemetry.Trace.TracerProviderBuilder
173165
OpenTelemetry.Trace.TracerProviderBuilder.TracerProviderBuilder() -> void
166+
override OpenTelemetry.Baggage.Equals(object? obj) -> bool
174167
override OpenTelemetry.Baggage.GetHashCode() -> int
175168
override OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Get() -> T
176169
override OpenTelemetry.Context.AsyncLocalRuntimeContextSlot<T>.Set(T value) -> void
@@ -201,10 +194,17 @@ override OpenTelemetry.Trace.Status.ToString() -> string!
201194
override OpenTelemetry.Trace.TracerProvider.Dispose(bool disposing) -> void
202195
static OpenTelemetry.ActivityContextExtensions.IsValid(this System.Diagnostics.ActivityContext ctx) -> bool
203196
static OpenTelemetry.Baggage.ClearBaggage(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
197+
static OpenTelemetry.Baggage.Create(System.Collections.Generic.Dictionary<string!, string!>? baggageItems = null) -> OpenTelemetry.Baggage
204198
static OpenTelemetry.Baggage.Current.get -> OpenTelemetry.Baggage
205199
static OpenTelemetry.Baggage.Current.set -> void
200+
static OpenTelemetry.Baggage.GetBaggage(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> System.Collections.Generic.IReadOnlyDictionary<string!, string!>!
201+
static OpenTelemetry.Baggage.GetBaggage(string! name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> string?
202+
static OpenTelemetry.Baggage.GetEnumerator(OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> System.Collections.Generic.Dictionary<string!, string!>.Enumerator
206203
static OpenTelemetry.Baggage.operator !=(OpenTelemetry.Baggage left, OpenTelemetry.Baggage right) -> bool
207204
static OpenTelemetry.Baggage.operator ==(OpenTelemetry.Baggage left, OpenTelemetry.Baggage right) -> bool
205+
static OpenTelemetry.Baggage.RemoveBaggage(string! name, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
206+
static OpenTelemetry.Baggage.SetBaggage(string! name, string? value, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
207+
static OpenTelemetry.Baggage.SetBaggage(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string!, string?>>! baggageItems, OpenTelemetry.Baggage baggage = default(OpenTelemetry.Baggage)) -> OpenTelemetry.Baggage
208208
static OpenTelemetry.Context.Propagation.PropagationContext.operator !=(OpenTelemetry.Context.Propagation.PropagationContext left, OpenTelemetry.Context.Propagation.PropagationContext right) -> bool
209209
static OpenTelemetry.Context.Propagation.PropagationContext.operator ==(OpenTelemetry.Context.Propagation.PropagationContext left, OpenTelemetry.Context.Propagation.PropagationContext right) -> bool
210210
static OpenTelemetry.Context.Propagation.Propagators.DefaultTextMapPropagator.get -> OpenTelemetry.Context.Propagation.TextMapPropagator!

src/OpenTelemetry.Api/Baggage.cs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4+
#nullable enable
5+
46
using System.Diagnostics.CodeAnalysis;
57
using OpenTelemetry.Context;
68
using OpenTelemetry.Internal;
@@ -87,7 +89,7 @@ public static Baggage Current
8789
/// </summary>
8890
/// <param name="baggageItems">Baggage key/value pairs.</param>
8991
/// <returns><see cref="Baggage"/>.</returns>
90-
public static Baggage Create(Dictionary<string, string> baggageItems = null)
92+
public static Baggage Create(Dictionary<string, string>? baggageItems = null)
9193
{
9294
if (baggageItems == null)
9395
{
@@ -133,7 +135,7 @@ public static Dictionary<string, string>.Enumerator GetEnumerator(Baggage baggag
133135
/// <param name="baggage">Optional <see cref="Baggage"/>. <see cref="Current"/> is used if not specified.</param>
134136
/// <returns>Baggage item or <see langword="null"/> if nothing was found.</returns>
135137
[SuppressMessage("roslyn", "RS0026", Justification = "TODO: fix APIs that violate the backcompt requirement - multiple overloads with optional parameters: https://github.com/dotnet/roslyn/blob/main/docs/Adding%20Optional%20Parameters%20in%20Public%20API.md.")]
136-
public static string GetBaggage(string name, Baggage baggage = default)
138+
public static string? GetBaggage(string name, Baggage baggage = default)
137139
=> baggage == default ? Current.GetBaggage(name) : baggage.GetBaggage(name);
138140

139141
/// <summary>
@@ -145,7 +147,7 @@ public static string GetBaggage(string name, Baggage baggage = default)
145147
/// <returns>New <see cref="Baggage"/> containing the key/value pair.</returns>
146148
/// <remarks>Note: The <see cref="Baggage"/> returned will be set as the new <see cref="Current"/> instance.</remarks>
147149
[SuppressMessage("roslyn", "RS0026", Justification = "TODO: fix APIs that violate the backcompt requirement - multiple overloads with optional parameters: https://github.com/dotnet/roslyn/blob/main/docs/Adding%20Optional%20Parameters%20in%20Public%20API.md.")]
148-
public static Baggage SetBaggage(string name, string value, Baggage baggage = default)
150+
public static Baggage SetBaggage(string name, string? value, Baggage baggage = default)
149151
{
150152
var baggageHolder = EnsureBaggageHolder();
151153
lock (baggageHolder)
@@ -164,7 +166,7 @@ public static Baggage SetBaggage(string name, string value, Baggage baggage = de
164166
/// <returns>New <see cref="Baggage"/> containing the new key/value pairs.</returns>
165167
/// <remarks>Note: The <see cref="Baggage"/> returned will be set as the new <see cref="Current"/> instance.</remarks>
166168
[SuppressMessage("roslyn", "RS0026", Justification = "TODO: fix APIs that violate the backcompt requirement - multiple overloads with optional parameters: https://github.com/dotnet/roslyn/blob/main/docs/Adding%20Optional%20Parameters%20in%20Public%20API.md.")]
167-
public static Baggage SetBaggage(IEnumerable<KeyValuePair<string, string>> baggageItems, Baggage baggage = default)
169+
public static Baggage SetBaggage(IEnumerable<KeyValuePair<string, string?>> baggageItems, Baggage baggage = default)
168170
{
169171
var baggageHolder = EnsureBaggageHolder();
170172
lock (baggageHolder)
@@ -222,11 +224,11 @@ public IReadOnlyDictionary<string, string> GetBaggage()
222224
/// </summary>
223225
/// <param name="name">Baggage item name.</param>
224226
/// <returns>Baggage item or <see langword="null"/> if nothing was found.</returns>
225-
public string GetBaggage(string name)
227+
public string? GetBaggage(string name)
226228
{
227229
Guard.ThrowIfNullOrEmpty(name);
228230

229-
return this.baggage != null && this.baggage.TryGetValue(name, out string value)
231+
return this.baggage != null && this.baggage.TryGetValue(name, out string? value)
230232
? value
231233
: null;
232234
}
@@ -237,7 +239,7 @@ public string GetBaggage(string name)
237239
/// <param name="name">Baggage item name.</param>
238240
/// <param name="value">Baggage item value.</param>
239241
/// <returns>New <see cref="Baggage"/> containing the key/value pair.</returns>
240-
public Baggage SetBaggage(string name, string value)
242+
public Baggage SetBaggage(string name, string? value)
241243
{
242244
if (string.IsNullOrEmpty(value))
243245
{
@@ -247,7 +249,7 @@ public Baggage SetBaggage(string name, string value)
247249
return new Baggage(
248250
new Dictionary<string, string>(this.baggage ?? EmptyBaggage, StringComparer.OrdinalIgnoreCase)
249251
{
250-
[name] = value,
252+
[name] = value!,
251253
});
252254
}
253255

@@ -256,15 +258,15 @@ public Baggage SetBaggage(string name, string value)
256258
/// </summary>
257259
/// <param name="baggageItems">Baggage key/value pairs.</param>
258260
/// <returns>New <see cref="Baggage"/> containing the key/value pairs.</returns>
259-
public Baggage SetBaggage(params KeyValuePair<string, string>[] baggageItems)
260-
=> this.SetBaggage((IEnumerable<KeyValuePair<string, string>>)baggageItems);
261+
public Baggage SetBaggage(params KeyValuePair<string, string?>[] baggageItems)
262+
=> this.SetBaggage((IEnumerable<KeyValuePair<string, string?>>)baggageItems);
261263

262264
/// <summary>
263265
/// Returns a new <see cref="Baggage"/> which contains the new key/value pairs.
264266
/// </summary>
265267
/// <param name="baggageItems">Baggage key/value pairs.</param>
266268
/// <returns>New <see cref="Baggage"/> containing the key/value pairs.</returns>
267-
public Baggage SetBaggage(IEnumerable<KeyValuePair<string, string>> baggageItems)
269+
public Baggage SetBaggage(IEnumerable<KeyValuePair<string, string?>> baggageItems)
268270
{
269271
if (baggageItems?.Any() != true)
270272
{
@@ -281,7 +283,7 @@ public Baggage SetBaggage(IEnumerable<KeyValuePair<string, string>> baggageItems
281283
}
282284
else
283285
{
284-
newBaggage[item.Key] = item.Value;
286+
newBaggage[item.Key] = item.Value!;
285287
}
286288
}
287289

@@ -325,11 +327,11 @@ public bool Equals(Baggage other)
325327
return false;
326328
}
327329

328-
return baggageIsNullOrEmpty || this.baggage.SequenceEqual(other.baggage);
330+
return baggageIsNullOrEmpty || this.baggage!.SequenceEqual(other.baggage!);
329331
}
330332

331333
/// <inheritdoc/>
332-
public override bool Equals(object obj)
334+
public override bool Equals(object? obj)
333335
=> (obj is Baggage baggage) && this.Equals(baggage);
334336

335337
/// <inheritdoc/>

src/OpenTelemetry.Api/Context/Propagation/BaggagePropagator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public override PropagationContext Extract<T>(PropagationContext context, T carr
5656
{
5757
if (TryExtractBaggage(baggageCollection.ToArray(), out var baggage))
5858
{
59-
return new PropagationContext(context.ActivityContext, new Baggage(baggage));
59+
return new PropagationContext(context.ActivityContext, new Baggage(baggage!));
6060
}
6161
}
6262

test/OpenTelemetry.Api.Tests/BaggageTests.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4+
#nullable enable
5+
46
using Xunit;
57

68
namespace OpenTelemetry.Tests;
@@ -27,8 +29,8 @@ public void SetAndGetTest()
2729
{
2830
var list = new List<KeyValuePair<string, string>>(2)
2931
{
30-
new KeyValuePair<string, string>(K1, V1),
31-
new KeyValuePair<string, string>(K2, V2),
32+
new(K1, V1),
33+
new(K2, V2),
3234
};
3335

3436
Baggage.SetBaggage(K1, V1);
@@ -44,20 +46,20 @@ public void SetAndGetTest()
4446
Assert.Null(Baggage.GetBaggage("NO_KEY"));
4547
Assert.Equal(V2, Baggage.Current.GetBaggage(K2));
4648

47-
Assert.Throws<ArgumentException>(() => Baggage.GetBaggage(null));
49+
Assert.Throws<ArgumentException>(() => Baggage.GetBaggage(null!));
4850
}
4951

5052
[Fact]
5153
public void SetExistingKeyTest()
5254
{
5355
var list = new List<KeyValuePair<string, string>>(2)
5456
{
55-
new KeyValuePair<string, string>(K1, V1),
57+
new(K1, V1),
5658
};
5759

58-
Baggage.Current.SetBaggage(new KeyValuePair<string, string>(K1, V1));
60+
Baggage.Current.SetBaggage(new KeyValuePair<string, string?>(K1, V1));
5961
var baggage = Baggage.SetBaggage(K1, V1);
60-
Baggage.SetBaggage(new Dictionary<string, string> { [K1] = V1 }, baggage);
62+
Baggage.SetBaggage(new Dictionary<string, string?> { [K1] = V1 }, baggage);
6163

6264
Assert.Equal(list, Baggage.GetBaggage());
6365
}
@@ -78,7 +80,7 @@ public void SetNullValueTest()
7880
Assert.Empty(Baggage.SetBaggage(K1, null).GetBaggage());
7981

8082
Baggage.SetBaggage(K1, V1);
81-
Baggage.SetBaggage(new Dictionary<string, string>
83+
Baggage.SetBaggage(new Dictionary<string, string?>
8284
{
8385
[K1] = null,
8486
[K2] = V2,
@@ -94,7 +96,7 @@ public void RemoveTest()
9496
var empty2 = Baggage.RemoveBaggage(K1);
9597
Assert.True(empty == empty2);
9698

97-
var baggage = Baggage.SetBaggage(new Dictionary<string, string>
99+
var baggage = Baggage.SetBaggage(new Dictionary<string, string?>
98100
{
99101
[K1] = V1,
100102
[K2] = V2,
@@ -112,7 +114,7 @@ public void RemoveTest()
112114
[Fact]
113115
public void ClearTest()
114116
{
115-
var baggage = Baggage.SetBaggage(new Dictionary<string, string>
117+
var baggage = Baggage.SetBaggage(new Dictionary<string, string?>
116118
{
117119
[K1] = V1,
118120
[K2] = V2,
@@ -151,8 +153,8 @@ public void EnumeratorTest()
151153
{
152154
var list = new List<KeyValuePair<string, string>>(2)
153155
{
154-
new KeyValuePair<string, string>(K1, V1),
155-
new KeyValuePair<string, string>(K2, V2),
156+
new(K1, V1),
157+
new(K2, V2),
156158
};
157159

158160
var baggage = Baggage.SetBaggage(K1, V1);
@@ -207,7 +209,7 @@ public void CreateBaggageTest()
207209
["key2"] = "value2",
208210
["KEY2"] = "VALUE2",
209211
["KEY3"] = "VALUE3",
210-
["Key3"] = null,
212+
["Key3"] = null!, // Note: This causes Key3 to be removed
211213
});
212214

213215
Assert.Equal(2, baggage.Count);
@@ -232,7 +234,7 @@ public void EqualityTests()
232234

233235
baggage = Baggage.SetBaggage(K1, V1);
234236

235-
var baggage2 = Baggage.SetBaggage(null);
237+
var baggage2 = Baggage.SetBaggage(null!);
236238

237239
Assert.Equal(baggage, baggage2);
238240

0 commit comments

Comments
 (0)