Skip to content

Commit 307648b

Browse files
committed
Update release notes wrt #3419
1 parent fec520d commit 307648b

File tree

5 files changed

+52
-20
lines changed

5 files changed

+52
-20
lines changed

release-notes/CREDITS-2.x

+5
Original file line numberDiff line numberDiff line change
@@ -1432,3 +1432,8 @@ Matthieu Finiasz (finiasz@github)
14321432
ZeyuCai@github:
14331433
* Contributed #3314: Four Flaky Tests Detected in 2.14
14341434
(2.14.0)
1435+
1436+
Gary Morgan (morganga@github)
1437+
* Contributed #3419: Improve performance of `UnresolvedForwardReference` for
1438+
forward reference resolution
1439+
(2.14.0)

release-notes/VERSION-2.x

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ Project: jackson-databind
99
#3373: Change `TypeSerializerBase` to skip `generator.writeTypePrefix()`
1010
for `null` typeId
1111
#3405: Create DataTypeFeature abstraction (for JSTEP-7) with placeholder features
12+
#3419: Improve performance of `UnresolvedForwardReference` for forward reference
13+
resolution
14+
(contributed by Gary M)
1215
#3421: Implement `JsonNodeFeature.READ_NULL_PROPERTIES` to allow skipping of
1316
JSON `null` values on reading
1417

src/main/java/com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ public void checkUnresolvedObjectId() throws UnresolvedForwardReference
168168
continue;
169169
}
170170
if (exception == null) {
171-
exception = new UnresolvedForwardReference(getParser(), "Unresolved forward references for: ")._fillInStackTrace();
171+
exception = new UnresolvedForwardReference(getParser(), "Unresolved forward references for: ")
172+
.withStackTrace();
172173
}
173174
Object key = roid.getKey().key;
174175
for (Iterator<Referring> iterator = roid.referringProperties(); iterator.hasNext(); ) {

src/main/java/com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.java

+16-19
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,6 @@ public UnresolvedForwardReference(JsonParser p, String msg) {
3737
_unresolvedIds = new ArrayList<UnresolvedId>();
3838
}
3939

40-
/**
41-
* @deprecated Since 2.7
42-
*/
43-
@Deprecated // since 2.7
44-
public UnresolvedForwardReference(String msg, JsonLocation loc, ReadableObjectId roid) {
45-
super(msg, loc);
46-
_roid = roid;
47-
}
48-
49-
/**
50-
* @deprecated Since 2.7
51-
*/
52-
@Deprecated // since 2.7
53-
public UnresolvedForwardReference(String msg) {
54-
super(msg);
55-
_unresolvedIds = new ArrayList<UnresolvedId>();
56-
}
57-
5840
/*
5941
/**********************************************************
6042
/* Accessor methods
@@ -98,12 +80,27 @@ public String getMessage()
9880
return sb.toString();
9981
}
10082

83+
/**
84+
* This method is overridden to prevent filling of the stack trace when
85+
* constructors are called (unfortunately alternative constructors can
86+
* not be used due to historical reasons).
87+
* To explicitly fill in stack traces method {@link #withStackTrace()}
88+
* needs to be called after construction.
89+
*
90+
* @since 2.14
91+
*/
10192
@Override
10293
public synchronized UnresolvedForwardReference fillInStackTrace() {
10394
return this;
10495
}
10596

106-
public synchronized UnresolvedForwardReference _fillInStackTrace() {
97+
/**
98+
* "Mutant" factory method for filling in stack trace; needed since the default
99+
* constructors will not fill in stack trace.
100+
*
101+
* @since 2.14
102+
*/
103+
public UnresolvedForwardReference withStackTrace() {
107104
super.fillInStackTrace();
108105
return this;
109106
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.fasterxml.jackson.databind.exc;
2+
3+
import com.fasterxml.jackson.core.JsonFactory;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.databind.BaseMapTest;
6+
import com.fasterxml.jackson.databind.deser.UnresolvedForwardReference;
7+
8+
public class UnresolvedForwardReferenceTest extends BaseMapTest
9+
{
10+
private final JsonFactory JSON_F = sharedMapper().getFactory();
11+
12+
public void testWithAndWithoutStackTraces() throws Exception
13+
{
14+
try (JsonParser p = JSON_F.createParser("{}")) {
15+
UnresolvedForwardReference e = new UnresolvedForwardReference(p, "test");
16+
StackTraceElement[] stack = e.getStackTrace();
17+
assertEquals(0, stack.length);
18+
19+
e = e.withStackTrace();
20+
stack = e.getStackTrace();
21+
if (stack.length < 1) {
22+
fail("Should have filled in stack traces, only got: "+stack.length);
23+
}
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)