Skip to content

Commit b07ee6b

Browse files
committed
Improve nullability for gauges
Signed-off-by: Johnny Lim <[email protected]>
1 parent 8fee74e commit b07ee6b

File tree

4 files changed

+21
-31
lines changed

4 files changed

+21
-31
lines changed

implementations/micrometer-registry-dynatrace/src/test/java/io/micrometer/dynatrace/DynatraceMeterRegistryTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import java.nio.charset.StandardCharsets;
2626
import java.time.Duration;
27-
import java.util.Objects;
2827
import java.util.concurrent.CountDownLatch;
2928
import java.util.concurrent.ExecutorService;
3029
import java.util.concurrent.Executors;
@@ -69,7 +68,7 @@ void shouldSendProperRequest() throws Throwable {
6968
when(httpClient.send(isA(HttpSender.Request.class)))
7069
.thenReturn(new HttpSender.Response(202, "{ \"linesOk\": 3, \"linesInvalid\": 0, \"error\": null }"));
7170

72-
Double gauge = Objects.requireNonNull(meterRegistry.gauge("my.gauge", 42d));
71+
Double gauge = meterRegistry.gauge("my.gauge", 42d);
7372
Counter counter = meterRegistry.counter("my.counter");
7473
counter.increment(12d);
7574
Timer timer = meterRegistry.timer("my.timer");

micrometer-core/src/main/java/io/micrometer/core/instrument/MeterRegistry.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.micrometer.core.instrument;
1717

18+
import io.micrometer.common.lang.internal.Contract;
1819
import io.micrometer.common.util.internal.logging.InternalLogger;
1920
import io.micrometer.common.util.internal.logging.InternalLoggerFactory;
2021
import io.micrometer.common.util.internal.logging.WarnThenDebugLogger;
@@ -521,6 +522,7 @@ public More more() {
521522
* @return The state object that was passed in so the registration can be done as part
522523
* of an assignment statement.
523524
*/
525+
@Contract("_, _, null, _ -> null; _, _, !null, _ -> !null")
524526
public <T> @Nullable T gauge(String name, Iterable<Tag> tags, @Nullable T stateObject,
525527
ToDoubleFunction<T> valueFunction) {
526528
Gauge.builder(name, stateObject, valueFunction).tags(tags).register(this);
@@ -537,7 +539,7 @@ public More more() {
537539
* @return The number that was passed in so the registration can be done as part of an
538540
* assignment statement.
539541
*/
540-
public <T extends Number> @Nullable T gauge(String name, Iterable<Tag> tags, T number) {
542+
public <T extends Number> T gauge(String name, Iterable<Tag> tags, T number) {
541543
return gauge(name, tags, number, Number::doubleValue);
542544
}
543545

@@ -550,7 +552,7 @@ public More more() {
550552
* @return The number that was passed in so the registration can be done as part of an
551553
* assignment statement.
552554
*/
553-
public <T extends Number> @Nullable T gauge(String name, T number) {
555+
public <T extends Number> T gauge(String name, T number) {
554556
return gauge(name, emptyList(), number);
555557
}
556558

@@ -564,7 +566,7 @@ public More more() {
564566
* @return The state object that was passed in so the registration can be done as part
565567
* of an assignment statement.
566568
*/
567-
public <T> @Nullable T gauge(String name, T stateObject, ToDoubleFunction<T> valueFunction) {
569+
public <T> T gauge(String name, T stateObject, ToDoubleFunction<T> valueFunction) {
568570
return gauge(name, emptyList(), stateObject, valueFunction);
569571
}
570572

@@ -582,7 +584,7 @@ public More more() {
582584
* @return The Collection that was passed in so the registration can be done as part
583585
* of an assignment statement.
584586
*/
585-
public <T extends Collection<?>> @Nullable T gaugeCollectionSize(String name, Iterable<Tag> tags, T collection) {
587+
public <T extends Collection<?>> T gaugeCollectionSize(String name, Iterable<Tag> tags, T collection) {
586588
return gauge(name, tags, collection, Collection::size);
587589
}
588590

@@ -599,7 +601,7 @@ public More more() {
599601
* @return The Map that was passed in so the registration can be done as part of an
600602
* assignment statement.
601603
*/
602-
public <T extends Map<?, ?>> @Nullable T gaugeMapSize(String name, Iterable<Tag> tags, T map) {
604+
public <T extends Map<?, ?>> T gaugeMapSize(String name, Iterable<Tag> tags, T map) {
603605
return gauge(name, tags, map, Map::size);
604606
}
605607

micrometer-core/src/main/java/io/micrometer/core/instrument/Metrics.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package io.micrometer.core.instrument;
1717

1818
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
19-
import org.jspecify.annotations.Nullable;
2019

2120
import java.util.Collection;
2221
import java.util.Map;
@@ -145,7 +144,7 @@ public static More more() {
145144
* @return The number that was passed in so the registration can be done as part of an
146145
* assignment statement.
147146
*/
148-
public static <T> @Nullable T gauge(String name, Iterable<Tag> tags, T obj, ToDoubleFunction<T> valueFunction) {
147+
public static <T> T gauge(String name, Iterable<Tag> tags, T obj, ToDoubleFunction<T> valueFunction) {
149148
return globalRegistry.gauge(name, tags, obj, valueFunction);
150149
}
151150

@@ -159,7 +158,7 @@ public static More more() {
159158
* @return The number that was passed in so the registration can be done as part of an
160159
* assignment statement.
161160
*/
162-
public static <T extends Number> @Nullable T gauge(String name, Iterable<Tag> tags, T number) {
161+
public static <T extends Number> T gauge(String name, Iterable<Tag> tags, T number) {
163162
return globalRegistry.gauge(name, tags, number);
164163
}
165164

@@ -172,7 +171,7 @@ public static More more() {
172171
* @return The number that was passed in so the registration can be done as part of an
173172
* assignment statement.
174173
*/
175-
public static <T extends Number> @Nullable T gauge(String name, T number) {
174+
public static <T extends Number> T gauge(String name, T number) {
176175
return globalRegistry.gauge(name, number);
177176
}
178177

@@ -185,7 +184,7 @@ public static More more() {
185184
* @return The number that was passed in so the registration can be done as part of an
186185
* assignment statement.
187186
*/
188-
public static <T> @Nullable T gauge(String name, T obj, ToDoubleFunction<T> valueFunction) {
187+
public static <T> T gauge(String name, T obj, ToDoubleFunction<T> valueFunction) {
189188
return globalRegistry.gauge(name, obj, valueFunction);
190189
}
191190

@@ -203,8 +202,7 @@ public static More more() {
203202
* @return The number that was passed in so the registration can be done as part of an
204203
* assignment statement.
205204
*/
206-
public static <T extends Collection<?>> @Nullable T gaugeCollectionSize(String name, Iterable<Tag> tags,
207-
T collection) {
205+
public static <T extends Collection<?>> T gaugeCollectionSize(String name, Iterable<Tag> tags, T collection) {
208206
return globalRegistry.gaugeCollectionSize(name, tags, collection);
209207
}
210208

@@ -221,7 +219,7 @@ public static More more() {
221219
* @return The number that was passed in so the registration can be done as part of an
222220
* assignment statement.
223221
*/
224-
public static <T extends Map<?, ?>> @Nullable T gaugeMapSize(String name, Iterable<Tag> tags, T map) {
222+
public static <T extends Map<?, ?>> T gaugeMapSize(String name, Iterable<Tag> tags, T map) {
225223
return globalRegistry.gaugeMapSize(name, tags, map);
226224
}
227225

micrometer-test/src/main/java/io/micrometer/core/tck/MeterRegistryCompatibilityKit.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,6 @@ class GaugeTck {
388388
@DisplayName("gauges attached to a number are updated when their values are observed")
389389
void numericGauge() {
390390
AtomicInteger n = registry.gauge("my.gauge", new AtomicInteger());
391-
assertThat(n).isNotNull();
392391
n.set(1);
393392

394393
Gauge g = registry.get("my.gauge").gauge();
@@ -401,10 +400,7 @@ void numericGauge() {
401400
@Test
402401
@DisplayName("gauges attached to an object are updated when their values are observed")
403402
void objectGauge() {
404-
// TODO: remove requireNonNull: https://github.com/uber/NullAway/issues/1219
405-
List<String> list = Objects
406-
.requireNonNull(registry.gauge("my.gauge", emptyList(), new ArrayList<>(), List::size));
407-
assertThat(list).isNotNull();
403+
List<String> list = registry.gauge("my.gauge", emptyList(), new ArrayList<>(), List::size);
408404
list.addAll(Arrays.asList("a", "b"));
409405

410406
Gauge g = registry.get("my.gauge").gauge();
@@ -414,10 +410,7 @@ void objectGauge() {
414410
@Test
415411
@DisplayName("gauges can be directly associated with collection size")
416412
void collectionSizeGauge() {
417-
// TODO: remove requireNonNull: https://github.com/uber/NullAway/issues/1219
418-
List<String> list = Objects
419-
.requireNonNull(registry.gaugeCollectionSize("my.gauge", emptyList(), new ArrayList<>()));
420-
assertThat(list).isNotNull();
413+
List<String> list = registry.gaugeCollectionSize("my.gauge", emptyList(), new ArrayList<>());
421414
list.addAll(Arrays.asList("a", "b"));
422415

423416
Gauge g = registry.get("my.gauge").gauge();
@@ -427,9 +420,7 @@ void collectionSizeGauge() {
427420
@Test
428421
@DisplayName("gauges can be directly associated with map entry size")
429422
void mapSizeGauge() {
430-
// TODO: remove requireNonNull: https://github.com/uber/NullAway/issues/1219
431-
Map<String, Integer> map = requireNonNull(registry.gaugeMapSize("my.gauge", emptyList(), new HashMap<>()));
432-
assertThat(map).isNotNull();
423+
Map<String, Integer> map = registry.gaugeMapSize("my.gauge", emptyList(), new HashMap<>());
433424
map.put("a", 1);
434425

435426
Gauge g = registry.get("my.gauge").gauge();
@@ -464,8 +455,8 @@ void gaugesCannotBeRegisteredTwice() {
464455

465456
assertThat(registry.get("my.gauge").gauges()).hasSize(1);
466457
assertThat(registry.get("my.gauge").gauge().value()).isEqualTo(1);
467-
assertThat(n1).isNotNull().hasValue(1);
468-
assertThat(n2).isNotNull().hasValue(2);
458+
assertThat(n1).hasValue(1);
459+
assertThat(n2).hasValue(2);
469460
}
470461

471462
@Test
@@ -477,8 +468,8 @@ void gaugesCannotBeRegisteredEffectivelyTwice() {
477468

478469
assertThat(registry.get("my.gauge").gauges()).hasSize(1);
479470
assertThat(registry.get("my.gauge").gauge().value()).isEqualTo(1);
480-
assertThat(n1).isNotNull().hasValue(1);
481-
assertThat(n2).isNotNull().hasValue(2);
471+
assertThat(n1).hasValue(1);
472+
assertThat(n2).hasValue(2);
482473
}
483474

484475
}

0 commit comments

Comments
 (0)