Skip to content

Commit a37b6f8

Browse files
committed
Adding getOrDefault methods to TagMap
1 parent fe96451 commit a37b6f8

File tree

2 files changed

+105
-29
lines changed

2 files changed

+105
-29
lines changed

internal-api/src/main/java/datadog/trace/api/TagMap.java

Lines changed: 90 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,24 @@ public static Ledger ledger(int size) {
123123

124124
boolean getBoolean(String tag);
125125

126+
boolean getBooleanOrDefault(String tag, boolean defaultValue);
127+
126128
int getInt(String tag);
127129

130+
int getIntOrDefault(String tag, int defaultValue);
131+
128132
long getLong(String tag);
129133

134+
long getLongOrDefault(String tag, long defaultValue);
135+
130136
float getFloat(String tag);
131137

138+
float getFloatOrDefault(String tag, float defaultValue);
139+
132140
double getDouble(String tag);
133141

142+
double getDoubleOrDefault(String tag, double defaultValue);
143+
134144
/**
135145
* Provides the corresponding Entry object - preferable w/ optimized TagMap if the Entry needs to
136146
* have its type checked
@@ -1162,26 +1172,46 @@ public final String getString(String tag) {
11621172
}
11631173

11641174
public final boolean getBoolean(String tag) {
1175+
return this.getBooleanOrDefault(tag, false);
1176+
}
1177+
1178+
public final boolean getBooleanOrDefault(String tag, boolean defaultValue) {
11651179
Entry entry = this.getEntry(tag);
1166-
return entry == null ? false : entry.booleanValue();
1180+
return entry == null ? defaultValue : entry.booleanValue();
11671181
}
11681182

11691183
public final int getInt(String tag) {
1184+
return getIntOrDefault(tag, 0);
1185+
}
1186+
1187+
public final int getIntOrDefault(String tag, int defaultValue) {
11701188
Entry entry = this.getEntry(tag);
1171-
return entry == null ? 0 : entry.intValue();
1189+
return entry == null ? defaultValue : entry.intValue();
11721190
}
11731191

11741192
public final long getLong(String tag) {
1193+
return this.getLongOrDefault(tag, 0L);
1194+
}
1195+
1196+
public final long getLongOrDefault(String tag, long defaultValue) {
11751197
Entry entry = this.getEntry(tag);
1176-
return entry == null ? 0L : entry.longValue();
1198+
return entry == null ? defaultValue : entry.longValue();
11771199
}
11781200

11791201
public final float getFloat(String tag) {
1202+
return this.getFloatOrDefault(tag, 0F);
1203+
}
1204+
1205+
public final float getFloatOrDefault(String tag, float defaultValue) {
11801206
Entry entry = this.getEntry(tag);
1181-
return entry == null ? 0F : entry.floatValue();
1207+
return entry == null ? defaultValue : entry.floatValue();
11821208
}
11831209

11841210
public final double getDouble(String tag) {
1211+
return this.getDoubleOrDefault(tag, 0D);
1212+
}
1213+
1214+
public final double getDoubleOrDefault(String tag, double defaultValue) {
11851215
Entry entry = this.getEntry(tag);
11861216
return entry == null ? 0D : entry.doubleValue();
11871217
}
@@ -2641,26 +2671,6 @@ public final <T, U> void forEach(
26412671
}
26422672
}
26432673

2644-
@Override
2645-
public final Object getObject(String tag) {
2646-
return this.get(tag);
2647-
}
2648-
2649-
@Override
2650-
public final boolean getBoolean(String tag) {
2651-
Object result = this.get(tag);
2652-
if (result == null) return false;
2653-
2654-
if (result instanceof Boolean) {
2655-
return (Boolean) result;
2656-
} else if (result instanceof Number) {
2657-
Number number = (Number) result;
2658-
return (number.intValue() != 0);
2659-
} else {
2660-
return true;
2661-
}
2662-
}
2663-
26642674
@Override
26652675
public final TagMap.Entry getAndSet(String tag, Object value) {
26662676
Object prior = this.put(tag, value);
@@ -2710,55 +2720,106 @@ public final TagMap.Entry getAndRemove(String tag) {
27102720
}
27112721

27122722
@Override
2713-
public final double getDouble(String tag) {
2723+
public final Object getObject(String tag) {
2724+
return this.get(tag);
2725+
}
2726+
2727+
@Override
2728+
public final boolean getBoolean(String tag) {
2729+
return this.getBooleanOrDefault(tag, false);
2730+
}
2731+
2732+
@Override
2733+
public final boolean getBooleanOrDefault(String tag, boolean defaultValue) {
2734+
Object result = this.get(tag);
2735+
if (result == null) {
2736+
return defaultValue;
2737+
} else if (result instanceof Boolean) {
2738+
return (Boolean) result;
2739+
} else if (result instanceof Number) {
2740+
Number number = (Number) result;
2741+
return (number.intValue() != 0);
2742+
} else {
2743+
// deliberately doesn't use defaultValue
2744+
return true;
2745+
}
2746+
}
2747+
2748+
@Override
2749+
public double getDouble(String tag) {
2750+
return this.getDoubleOrDefault(tag, 0D);
2751+
}
2752+
2753+
@Override
2754+
public final double getDoubleOrDefault(String tag, double defaultValue) {
27142755
Object value = this.get(tag);
2715-
if (value instanceof Number) {
2756+
if (value == null) {
2757+
return defaultValue;
2758+
} else if (value instanceof Number) {
27162759
return ((Number) value).doubleValue();
27172760
} else if (value instanceof Boolean) {
27182761
return ((Boolean) value) ? 1D : 0D;
27192762
} else {
2763+
// deliberately doesn't use defaultValue
27202764
return 0D;
27212765
}
27222766
}
27232767

27242768
@Override
27252769
public final long getLong(String tag) {
2770+
return this.getLongOrDefault(tag, 0L);
2771+
}
2772+
2773+
public final long getLongOrDefault(String tag, long defaultValue) {
27262774
Object value = this.get(tag);
27272775
if (value == null) {
2728-
return 0L;
2776+
return defaultValue;
27292777
} else if (value instanceof Number) {
27302778
return ((Number) value).longValue();
27312779
} else if (value instanceof Boolean) {
27322780
return ((Boolean) value) ? 1L : 0L;
27332781
} else {
2782+
// deliberately doesn't use defaultValue
27342783
return 0L;
27352784
}
27362785
}
27372786

27382787
@Override
27392788
public final float getFloat(String tag) {
2789+
return this.getFloatOrDefault(tag, 0F);
2790+
}
2791+
2792+
@Override
2793+
public final float getFloatOrDefault(String tag, float defaultValue) {
27402794
Object value = this.get(tag);
27412795
if (value == null) {
2742-
return 0F;
2796+
return defaultValue;
27432797
} else if (value instanceof Number) {
27442798
return ((Number) value).floatValue();
27452799
} else if (value instanceof Boolean) {
27462800
return ((Boolean) value) ? 1F : 0F;
27472801
} else {
2802+
// deliberately doesn't use defaultValue
27482803
return 0F;
27492804
}
27502805
}
27512806

27522807
@Override
27532808
public final int getInt(String tag) {
2809+
return this.getIntOrDefault(tag, 0);
2810+
}
2811+
2812+
@Override
2813+
public final int getIntOrDefault(String tag, int defaultValue) {
27542814
Object value = this.get(tag);
27552815
if (value == null) {
2756-
return 0;
2816+
return defaultValue;
27572817
} else if (value instanceof Number) {
27582818
return ((Number) value).intValue();
27592819
} else if (value instanceof Boolean) {
27602820
return ((Boolean) value) ? 1 : 0;
27612821
} else {
2822+
// deliberately doesn't use defaultValue
27622823
return 0;
27632824
}
27642825
}

internal-api/src/test/java/datadog/trace/api/TagMapTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ public void booleanEntry(TagMapType mapType) {
6060

6161
TagMap.Entry newEntry = map.getEntry("bool");
6262
assertEquals(second, newEntry.booleanValue());
63+
64+
assertEquals(false, map.getBoolean("unset"));
65+
assertEquals(true, map.getBooleanOrDefault("unset", true));
6366
}
6467

6568
@ParameterizedTest
@@ -87,6 +90,9 @@ public void intEntry(TagMapType mapType) {
8790

8891
TagMap.Entry newEntry = map.getEntry("int");
8992
assertEquals(second, newEntry.intValue());
93+
94+
assertEquals(0, map.getInt("unset"));
95+
assertEquals(21, map.getIntOrDefault("unset", 21));
9096
}
9197

9298
@ParameterizedTest
@@ -114,6 +120,9 @@ public void longEntry(TagMapType mapType) {
114120

115121
TagMap.Entry newEntry = map.getEntry("long");
116122
assertEquals(second, newEntry.longValue());
123+
124+
assertEquals(0L, map.getLong("unset"));
125+
assertEquals(21L, map.getLongOrDefault("unset", 21L));
117126
}
118127

119128
@ParameterizedTest
@@ -141,6 +150,9 @@ public void floatEntry(TagMapType mapType) {
141150

142151
TagMap.Entry newEntry = map.getEntry("float");
143152
assertEquals(second, newEntry.floatValue());
153+
154+
assertEquals(0F, map.getFloat("unset"));
155+
assertEquals(2.718F, map.getFloatOrDefault("unset", 2.718F));
144156
}
145157

146158
@ParameterizedTest
@@ -168,6 +180,9 @@ public void doubleEntry(TagMapType mapType) {
168180

169181
TagMap.Entry newEntry = map.getEntry("double");
170182
assertEquals(second, newEntry.doubleValue());
183+
184+
assertEquals(0D, map.getDouble("unset"));
185+
assertEquals(2.718D, map.getDoubleOrDefault("unset", 2.718D));
171186
}
172187

173188
@ParameterizedTest

0 commit comments

Comments
 (0)