Skip to content

Commit a21f64d

Browse files
Resolve issues with covariant arguments
The most troublesome issue was the behaviour of NullAway while passing Map<String, Object> to an argument of type Map<String, @nullable Object>.
1 parent 8a139d0 commit a21f64d

5 files changed

Lines changed: 15 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog][keepachangelog], and this project adhe
66

77
## [Unreleased]
88

9+
### Fixed
10+
11+
- Change type from `Object` to `? extends Object` for generics in method arguments to support covariant arguments.
12+
913
## [1.4.0] - 2026-02-16
1014

1115
### Added

src/main/java/io/github/problem4j/core/AbstractProblem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public AbstractProblem(
142142
int status,
143143
@Nullable String detail,
144144
@Nullable URI instance,
145-
@Nullable Map<String, Object> extensions) {
145+
@Nullable Map<String, ? extends Object> extensions) {
146146
this.type = type;
147147
this.title = title;
148148
this.status = status;

src/main/java/io/github/problem4j/core/AbstractProblemBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ public ProblemBuilder extension(@Nullable String name, @Nullable Object value) {
191191
* @return this builder instance for chaining
192192
*/
193193
@Override
194-
public ProblemBuilder extensions(@Nullable Map<String, @Nullable Object> extensions) {
195-
if (extensions != null && !extensions.isEmpty()) {
194+
public ProblemBuilder extensions(@Nullable Map<String, ? extends @Nullable Object> extensions) {
195+
if (extensions != null) {
196196
extensions.forEach(
197197
(key, value) -> {
198198
if (value != null) {

src/main/java/io/github/problem4j/core/ProblemBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public interface ProblemBuilder {
115115
* @param extensions map of extension keys and values
116116
* @return this builder instance for chaining
117117
*/
118-
ProblemBuilder extensions(@Nullable Map<String, @Nullable Object> extensions);
118+
ProblemBuilder extensions(@Nullable Map<String, ? extends @Nullable Object> extensions);
119119

120120
/**
121121
* Adds single custom extension from {@link Problem.Extension}.
@@ -178,7 +178,7 @@ default ProblemBuilder extension(Problem.@Nullable Extension extension) {
178178
* @deprecated use {@link #extensions(Map)} instead
179179
*/
180180
@Deprecated
181-
default ProblemBuilder extension(@Nullable Map<String, @Nullable Object> extensions) {
181+
default ProblemBuilder extension(@Nullable Map<String, ? extends @Nullable Object> extensions) {
182182
return extensions(extensions);
183183
}
184184

src/main/java/io/github/problem4j/core/ProblemImpl.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ final class ProblemImpl extends AbstractProblem {
2929

3030
private static final long serialVersionUID = 1L;
3131

32-
ProblemImpl(String title, int status, @Nullable Map<String, Object> extensions) {
32+
ProblemImpl(String title, int status, @Nullable Map<String, ? extends Object> extensions) {
3333
super(BLANK_TYPE, title, status, null, null, extensions);
3434
}
3535

3636
ProblemImpl(
37-
String title, int status, @Nullable String detail, @Nullable Map<String, Object> extensions) {
37+
String title,
38+
int status,
39+
@Nullable String detail,
40+
@Nullable Map<String, ? extends Object> extensions) {
3841
super(BLANK_TYPE, title, status, detail, null, extensions);
3942
}
4043

@@ -44,7 +47,7 @@ final class ProblemImpl extends AbstractProblem {
4447
int status,
4548
@Nullable String detail,
4649
@Nullable URI instance,
47-
Map<String, Object> extensions) {
50+
@Nullable Map<String, ? extends Object> extensions) {
4851
super(type, title, status, detail, instance, extensions);
4952
}
5053

0 commit comments

Comments
 (0)