Skip to content

Commit cf3f6d2

Browse files
committed
Merge branch '2.17' into Shounaks/2.17
2 parents 5ef9666 + 11d0611 commit cf3f6d2

35 files changed

+609
-281
lines changed

.github/dependabot.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
groups:
8+
github-actions:
9+
patterns:
10+
- "*"

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ jobs:
2222
strategy:
2323
fail-fast: false
2424
matrix:
25-
java_version: ['8', '11', '17']
25+
java_version: ['8', '11', '17', '21']
2626
os: ['ubuntu-20.04']
2727
env:
2828
JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
2929
steps:
30-
- uses: actions/checkout@v4.1.0
30+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
3131
- name: Set up JDK
32-
uses: actions/setup-java@v3
32+
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4.0.0
3333
with:
3434
distribution: 'temurin'
3535
java-version: ${{ matrix.java_version }}
@@ -57,7 +57,7 @@ jobs:
5757
run: ./mvnw -B -q -ff -ntp test
5858
- name: Publish code coverage
5959
if: github.event_name != 'pull_request' && matrix.java_version == '8'
60-
uses: codecov/codecov-action@v1
60+
uses: codecov/codecov-action@e0b68c6749509c5f83f984dd99a76a1c1a231044 # v4.0.1
6161
with:
6262
token: ${{ secrets.CODECOV_TOKEN }}
6363
file: ./target/site/jacoco/jacoco.xml

.mvn/wrapper/maven-wrapper.properties

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,18 @@
1-
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2-
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip
18+
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/JSONWriter.java

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.*;
44
import java.math.BigDecimal;
55
import java.math.BigInteger;
6+
import java.nio.file.Path;
67
import java.util.*;
78

89
import com.fasterxml.jackson.core.*;
@@ -217,21 +218,30 @@ public void writeField(String fieldName, Object value, int type) throws IOExcept
217218
writeBigIntegerField(fieldName, (BigInteger) value);
218219
return;
219220
case SER_NUMBER_FLOAT: // fall through
221+
case SER_NUMBER_FLOAT_WRAPPER:
222+
writeFloatField(fieldName, ((Float) value).floatValue());
223+
return;
220224
case SER_NUMBER_DOUBLE:
221-
writeDoubleField(fieldName, ((Number) value).doubleValue());
225+
case SER_NUMBER_DOUBLE_WRAPPER:
226+
writeDoubleField(fieldName, ((Double) value).doubleValue());
222227
return;
223228
case SER_NUMBER_BYTE: // fall through
224229
case SER_NUMBER_SHORT: // fall through
225-
case SER_NUMBER_INTEGER:
226230
writeIntField(fieldName, ((Number) value).intValue());
227231
return;
232+
case SER_NUMBER_INTEGER:
233+
case SER_NUMBER_INTEGER_WRAPPER:
234+
writeIntField(fieldName, ((Integer) value).intValue());
235+
return;
228236
case SER_NUMBER_LONG:
229-
writeLongField(fieldName, ((Number) value).longValue());
237+
case SER_NUMBER_LONG_WRAPPER:
238+
writeLongField(fieldName, ((Long) value).longValue());
230239
return;
231240

232241
// Scalar types:
233242

234243
case SER_BOOLEAN:
244+
case SER_BOOLEAN_WRAPPER:
235245
writeBooleanField(fieldName, ((Boolean) value).booleanValue());
236246
return;
237247
case SER_CHAR:
@@ -257,6 +267,9 @@ public void writeField(String fieldName, Object value, int type) throws IOExcept
257267
case SER_URI:
258268
writeStringLikeField(fieldName, value.toString(), type);
259269
return;
270+
case SER_PATH:
271+
writeStringLikeField(fieldName, ((Path) value).toUri().toString(), type);
272+
return;
260273

261274
// Others
262275

@@ -327,16 +340,24 @@ protected void _writeValue(Object value, int type) throws IOException
327340
// Number types:
328341

329342
case SER_NUMBER_FLOAT: // fall through
343+
case SER_NUMBER_FLOAT_WRAPPER: // fall through
344+
writeFloatValue(((Float) value).floatValue());
345+
return;
330346
case SER_NUMBER_DOUBLE:
331-
writeDoubleValue(((Number) value).doubleValue());
347+
case SER_NUMBER_DOUBLE_WRAPPER:
348+
writeDoubleValue(((Double) value).doubleValue());
332349
return;
333350
case SER_NUMBER_BYTE: // fall through
334351
case SER_NUMBER_SHORT: // fall through
335-
case SER_NUMBER_INTEGER:
336352
writeIntValue(((Number) value).intValue());
337353
return;
354+
case SER_NUMBER_INTEGER:
355+
case SER_NUMBER_INTEGER_WRAPPER:
356+
writeIntValue(((Integer) value).intValue());
357+
return;
338358
case SER_NUMBER_LONG:
339-
writeLongValue(((Number) value).longValue());
359+
case SER_NUMBER_LONG_WRAPPER:
360+
writeLongValue(((Long) value).longValue());
340361
return;
341362
case SER_NUMBER_BIG_DECIMAL:
342363
writeBigDecimalValue((BigDecimal) value);
@@ -348,6 +369,7 @@ protected void _writeValue(Object value, int type) throws IOException
348369
// Other scalar types:
349370

350371
case SER_BOOLEAN:
372+
case SER_BOOLEAN_WRAPPER:
351373
writeBooleanValue(((Boolean) value).booleanValue());
352374
return;
353375
case SER_CHAR:
@@ -375,6 +397,9 @@ protected void _writeValue(Object value, int type) throws IOException
375397
case SER_URI:
376398
writeStringLikeValue(value.toString(), type);
377399
return;
400+
case SER_PATH:
401+
writeStringLikeValue(((Path) value).toUri().toString(), type);
402+
return;
378403

379404
case SER_ITERABLE:
380405
writeIterableValue((Iterable<?>) value);
@@ -582,6 +607,14 @@ protected void writeLongField(String fieldName, long v) throws IOException {
582607
_generator.writeNumberField(fieldName, v);
583608
}
584609

610+
protected void writeFloatValue(float v) throws IOException {
611+
_generator.writeNumber(v);
612+
}
613+
614+
protected void writeFloatField(String fieldName, float v) throws IOException {
615+
_generator.writeNumberField(fieldName, v);
616+
}
617+
585618
protected void writeDoubleValue(double v) throws IOException {
586619
_generator.writeNumber(v);
587620
}

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/SimpleValueReader.java

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.io.IOException;
77
import java.net.URI;
88
import java.net.URL;
9+
import java.nio.file.Paths;
910
import java.util.*;
1011

1112
import com.fasterxml.jackson.core.JsonParser;
@@ -60,6 +61,7 @@ public Object readNext(JSONReader reader, JsonParser p) throws IOException
6061
// cases default to "standard" handling which does range checks etc
6162

6263
case SER_NUMBER_INTEGER:
64+
case SER_NUMBER_INTEGER_WRAPPER:
6365
{
6466
int i = p.nextIntValue(-2);
6567
if (i != -2) {
@@ -69,6 +71,7 @@ public Object readNext(JSONReader reader, JsonParser p) throws IOException
6971
}
7072

7173
case SER_NUMBER_LONG:
74+
case SER_NUMBER_LONG_WRAPPER:
7275
{
7376
long l = p.nextLongValue(-2L);
7477
if (l != -2L) {
@@ -80,6 +83,7 @@ public Object readNext(JSONReader reader, JsonParser p) throws IOException
8083
// Other scalar types:
8184

8285
case SER_BOOLEAN:
86+
case SER_BOOLEAN_WRAPPER:
8387
{
8488
Boolean b = p.nextBooleanValue();
8589
if (b != null) {
@@ -115,8 +119,16 @@ public Object read(JSONReader reader, JsonParser p) throws IOException
115119

116120
// Number types:
117121

118-
case SER_NUMBER_FLOAT: // fall through
122+
case SER_NUMBER_FLOAT_WRAPPER:
123+
if (p.hasToken(JsonToken.VALUE_NULL)) {
124+
return null;
125+
}
126+
case SER_NUMBER_FLOAT:
119127
return Float.valueOf((float) p.getValueAsDouble());
128+
case SER_NUMBER_DOUBLE_WRAPPER:
129+
if (p.hasToken(JsonToken.VALUE_NULL)) {
130+
return null;
131+
}
120132
case SER_NUMBER_DOUBLE:
121133
return p.getValueAsDouble();
122134

@@ -125,8 +137,16 @@ public Object read(JSONReader reader, JsonParser p) throws IOException
125137

126138
case SER_NUMBER_SHORT: // fall through
127139
return (short) p.getValueAsInt();
140+
case SER_NUMBER_INTEGER_WRAPPER:
141+
if (p.hasToken(JsonToken.VALUE_NULL)) {
142+
return null;
143+
}
128144
case SER_NUMBER_INTEGER:
129145
return p.getValueAsInt();
146+
case SER_NUMBER_LONG_WRAPPER:
147+
if (p.hasToken(JsonToken.VALUE_NULL)) {
148+
return null;
149+
}
130150
case SER_NUMBER_LONG:
131151
return p.getValueAsLong();
132152

@@ -139,14 +159,16 @@ public Object read(JSONReader reader, JsonParser p) throws IOException
139159
// Other scalar types:
140160

141161
case SER_BOOLEAN:
162+
case SER_BOOLEAN_WRAPPER:
142163
switch (p.currentTokenId()) {
143164
case JsonTokenId.ID_TRUE:
144165
return Boolean.TRUE;
145166
case JsonTokenId.ID_FALSE:
146167
return Boolean.FALSE;
147168
case JsonTokenId.ID_NULL:
148-
// 07-Jul-2020, tatu: since `boolean` and `java.lang.Boolean` both handled
149-
// here, can not (alas!) separate yet
169+
if (_typeId == SER_BOOLEAN_WRAPPER) {
170+
return null;
171+
}
150172
return Boolean.FALSE;
151173

152174
case JsonTokenId.ID_STRING:
@@ -191,7 +213,7 @@ public Object read(JSONReader reader, JsonParser p) throws IOException
191213
try {
192214
return Class.forName(v);
193215
} catch (Exception e) {
194-
throw new JSONObjectException("Failed to bind java.lang.Class from value '"+v+"'");
216+
throw new JSONObjectException("Failed to bind `java.lang.Class` from value '"+v+"'");
195217
}
196218
}
197219
case SER_FILE:
@@ -218,6 +240,16 @@ public Object read(JSONReader reader, JsonParser p) throws IOException
218240
return null;
219241
}
220242
return URI.create(p.getValueAsString());
243+
case SER_PATH:
244+
if (p.hasToken(JsonToken.VALUE_NULL)) {
245+
return null;
246+
}
247+
String v = p.getValueAsString();
248+
try {
249+
return Paths.get(new URI(v));
250+
} catch (Exception e) {
251+
throw new JSONObjectException("Failed to bind `java.nio.file.Path` from value '"+v+"'");
252+
}
221253

222254
// case SER_MAP:
223255
// case SER_LIST:

0 commit comments

Comments
 (0)