Skip to content

Commit 6b441ed

Browse files
committed
Fix #3906 by forcing Record constructors to be visible regardless of overrides
1 parent 3140bb7 commit 6b441ed

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/main/java/com/fasterxml/jackson/databind/cfg/MapperConfigBase.java

+5
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,11 @@ public final VisibilityChecker<?> getDefaultVisibilityChecker(Class<?> baseType,
832832
vc = VisibilityChecker.Std.allPublicInstance();
833833
} else {
834834
vc = getDefaultVisibilityChecker();
835+
// 20-May-2023, tatu: [databind#3906] Must reset visibility for Records
836+
// to avoid hiding Constructors
837+
if (ClassUtil.isRecordType(baseType)) {
838+
vc = vc.withCreatorVisibility(Visibility.NON_PRIVATE);
839+
}
835840
}
836841
AnnotationIntrospector intr = getAnnotationIntrospector();
837842
if (intr != null) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.fasterxml.jackson.databind.records;
2+
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.PropertyAccessor;
5+
import com.fasterxml.jackson.databind.*;
6+
7+
// [databind#3906]
8+
public class RecordCreatorVisibility3906Test extends BaseMapTest
9+
{
10+
// [databind#3906]
11+
record Record3906(String string, int integer) { }
12+
13+
// [databind#3906]
14+
public void testRecordCreatorVisibility3906() throws Exception {
15+
ObjectMapper mapper = jsonMapperBuilder()
16+
.visibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
17+
.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
18+
.build();
19+
Record3906 recordTest_deserialized = mapper.readValue("{}", Record3906.class);
20+
assertEquals(new Record3906(null, 0), recordTest_deserialized);
21+
}
22+
}

0 commit comments

Comments
 (0)