Skip to content

Commit ba1da0e

Browse files
Merge branch 'main' into json-of
2 parents 9f6d9f0 + ae9604c commit ba1da0e

38 files changed

+1151
-200
lines changed

.github/workflows/build.yml

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ jobs:
3838
runs-on: ubuntu-latest
3939

4040
steps:
41-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
41+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
4242
- name: "Set up JDK ${{ matrix.java }}"
43-
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
43+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
4444
with:
4545
distribution: 'temurin'
4646
java-version: ${{ matrix.java }}
@@ -49,6 +49,21 @@ jobs:
4949
# This also runs javadoc:jar to detect any issues with the Javadoc generated during release
5050
run: mvn verify javadoc:jar ${{ matrix.extra-mvn-args || '' }}
5151

52+
# Build a subset of the Gson API, see also https://github.com/google/gson/pull/2946
53+
build-gson-subset:
54+
name: Build Gson subset
55+
runs-on: ubuntu-latest
56+
steps:
57+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
58+
- name: Set up JDK
59+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
60+
with:
61+
distribution: 'temurin'
62+
java-version: 21
63+
cache: 'maven'
64+
- name: Build with Maven
65+
run: mvn clean test --projects gson --activate-profiles gson-subset
66+
5267
native-image-test:
5368
name: "GraalVM Native Image test (JDK ${{ matrix.java }})"
5469
strategy:
@@ -62,9 +77,9 @@ jobs:
6277
runs-on: ubuntu-latest
6378

6479
steps:
65-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
80+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
6681
- name: "Set up GraalVM"
67-
uses: graalvm/setup-graalvm@eec48106e0bf45f2976c2ff0c3e22395cced8243 # v1.4.2
82+
uses: graalvm/setup-graalvm@790e28947b79a9c09c3391c0f18bf8d0f102ed69 # v1.4.4
6883
with:
6984
java-version: ${{ matrix.java }}
7085
distribution: 'graalvm'
@@ -81,9 +96,9 @@ jobs:
8196
runs-on: ubuntu-latest
8297

8398
steps:
84-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
99+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
85100
- name: Set up JDK
86-
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
101+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
87102
with:
88103
distribution: 'temurin'
89104
java-version: 17

.github/workflows/check-android-compatibility.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ jobs:
2424
runs-on: ubuntu-latest
2525

2626
steps:
27-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
27+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2828

2929
- name: Set up JDK
30-
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
30+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
3131
with:
3232
distribution: 'temurin'
3333
java-version: '17'

.github/workflows/check-api-compatibility.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ jobs:
2525

2626
steps:
2727
- name: Check out old version
28-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
28+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2929
with:
3030
ref: ${{ github.event.pull_request.base.sha }}
3131
path: 'gson-old-japicmp'
3232

3333
- name: Set up JDK
34-
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
34+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
3535
with:
3636
distribution: 'temurin'
3737
java-version: '17'
@@ -46,15 +46,15 @@ jobs:
4646
mvn install -Dmaven.test.skip --projects '!metrics,!test-graal-native-image,!test-jpms,!test-shrinker'
4747
4848
- name: Check out new version
49-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
49+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
5050

5151
- name: Check API compatibility
5252
id: check-compatibility
5353
run: |
5454
mvn package japicmp:cmp --fail-at-end -Dmaven.test.skip --projects '!metrics,!test-graal-native-image,!test-jpms,!test-shrinker'
5555
5656
- name: Upload API differences artifacts
57-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
57+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
5858
# Run on workflow success (in that case differences report might include added methods and classes)
5959
# or when API compatibility check failed
6060
if: success() || ( failure() && steps.check-compatibility.outcome == 'failure' )

.github/workflows/cifuzz.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ jobs:
2525
dry-run: false
2626
output-sarif: true
2727
- name: Upload Crash
28-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
28+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
2929
if: failure() && steps.build.outcome == 'success'
3030
with:
3131
name: artifacts
3232
path: ./out/artifacts
3333
- name: Upload Sarif
3434
if: always() && steps.build.outcome == 'success'
35-
uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
35+
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
3636
with:
3737
# Path to SARIF file relative to the root of the repository
3838
sarif_file: cifuzz-sarif/results.sarif

.github/workflows/codeql-analysis.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,19 @@ jobs:
3737

3838
steps:
3939
- name: Checkout repository
40-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
40+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
4141

4242
- name: Set up JDK
4343
if: ${{ matrix.language == 'java' }}
44-
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
44+
uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0
4545
with:
4646
distribution: 'temurin'
4747
java-version: '17'
4848
cache: 'maven'
4949

5050
# Initializes the CodeQL tools for scanning
5151
- name: Initialize CodeQL
52-
uses: github/codeql-action/init@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
52+
uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
5353
with:
5454
languages: ${{ matrix.language }}
5555
build-mode: ${{ matrix.build-mode }}
@@ -65,6 +65,6 @@ jobs:
6565
mvn compile
6666
6767
- name: Perform CodeQL Analysis
68-
uses: github/codeql-action/analyze@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
68+
uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
6969
with:
7070
category: "/language:${{ matrix.language }}"

.github/workflows/scorecard.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434

3535
steps:
3636
- name: "Checkout code"
37-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
37+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
3838
with:
3939
persist-credentials: false
4040

@@ -64,7 +64,7 @@ jobs:
6464
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
6565
# format to the repository Actions tab.
6666
- name: "Upload artifact"
67-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
67+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
6868
with:
6969
name: SARIF file
7070
path: results.sarif
@@ -73,6 +73,6 @@ jobs:
7373
# Upload the results to GitHub's code scanning dashboard (optional).
7474
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
7575
- name: "Upload to code-scanning"
76-
uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
76+
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
7777
with:
7878
sarif_file: results.sarif

gson/pom.xml

Lines changed: 130 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
<dependency>
5151
<groupId>com.google.errorprone</groupId>
5252
<artifactId>error_prone_annotations</artifactId>
53-
<version>2.43.0</version>
53+
<version>2.45.0</version>
5454
</dependency>
5555

5656
<dependency>
@@ -211,7 +211,7 @@
211211
<dependency>
212212
<groupId>com.guardsquare</groupId>
213213
<artifactId>proguard-base</artifactId>
214-
<version>7.8.0</version>
214+
<version>7.8.2</version>
215215
</dependency>
216216
<dependency>
217217
<groupId>com.guardsquare</groupId>
@@ -235,7 +235,7 @@
235235
<plugin>
236236
<groupId>org.apache.maven.plugins</groupId>
237237
<artifactId>maven-resources-plugin</artifactId>
238-
<version>3.3.1</version>
238+
<version>3.4.0</version>
239239
<executions>
240240
<execution>
241241
<id>pre-obfuscate-class</id>
@@ -387,5 +387,132 @@
387387
</plugins>
388388
</build>
389389
</profile>
390+
391+
<!-- Profile for building a subset of Gson; can be executed with `mvn clean test -pl gson -P gson-subset` -->
392+
<profile>
393+
<id>gson-subset</id>
394+
<properties>
395+
<gsonSubsetSrcDir>${project.build.directory}/gson-subset-src</gsonSubsetSrcDir>
396+
</properties>
397+
<build>
398+
<plugins>
399+
<plugin>
400+
<groupId>org.apache.maven.plugins</groupId>
401+
<artifactId>maven-resources-plugin</artifactId>
402+
<executions>
403+
<execution>
404+
<id>prepare-gson-subset-src</id>
405+
<phase>process-sources</phase>
406+
<goals>
407+
<goal>copy-resources</goal>
408+
</goals>
409+
<configuration>
410+
<outputDirectory>${gsonSubsetSrcDir}</outputDirectory>
411+
<overwrite>true</overwrite>
412+
<resources>
413+
<resource>
414+
<directory>${project.build.sourceDirectory}</directory>
415+
<includes>
416+
<include>com/google/gson/FormattingStyle.java</include>
417+
<include>com/google/gson/JsonArray.java</include>
418+
<include>com/google/gson/JsonElement.java</include>
419+
<include>com/google/gson/JsonIOException.java</include>
420+
<include>com/google/gson/JsonNull.java</include>
421+
<include>com/google/gson/JsonObject.java</include>
422+
<include>com/google/gson/JsonParseException.java</include>
423+
<include>com/google/gson/JsonParser.java</include>
424+
<include>com/google/gson/JsonPrimitive.java</include>
425+
<include>com/google/gson/JsonStreamParser.java</include>
426+
<include>com/google/gson/JsonSyntaxException.java</include>
427+
<include>com/google/gson/Strictness.java</include>
428+
<include>com/google/gson/TypeAdapter.java</include>
429+
<include>com/google/gson/package-info.java</include>
430+
<include>com/google/gson/stream/JsonReader.java</include>
431+
<include>com/google/gson/stream/JsonScope.java</include>
432+
<include>com/google/gson/stream/JsonToken.java</include>
433+
<include>com/google/gson/stream/JsonWriter.java</include>
434+
<include>com/google/gson/stream/MalformedJsonException.java</include>
435+
<include>com/google/gson/stream/package-info.java</include>
436+
<!-- Internal classes used by the classes above -->
437+
<include>com/google/gson/internal/JsonReaderInternalAccess.java</include>
438+
<include>com/google/gson/internal/LazilyParsedNumber.java</include>
439+
<include>com/google/gson/internal/LinkedTreeMap.java</include>
440+
<include>com/google/gson/internal/NonNullElementWrapperList.java</include>
441+
<include>com/google/gson/internal/NumberLimits.java</include>
442+
<include>com/google/gson/internal/Streams.java</include>
443+
<include>com/google/gson/internal/TroubleshootingGuide.java</include>
444+
<include>com/google/gson/internal/bind/JsonElementTypeAdapter.java</include>
445+
<include>com/google/gson/internal/bind/JsonTreeReader.java</include>
446+
<include>com/google/gson/internal/bind/JsonTreeWriter.java</include>
447+
</includes>
448+
</resource>
449+
</resources>
450+
</configuration>
451+
</execution>
452+
</executions>
453+
</plugin>
454+
<plugin>
455+
<groupId>org.apache.maven.plugins</groupId>
456+
<artifactId>maven-compiler-plugin</artifactId>
457+
<executions>
458+
<execution>
459+
<!-- Overwrite default compilation execution; otherwise the default would run as well and maven-compiler-plugin
460+
seems to include `target/classes` as classpath for compilation, so custom compilation setup here would
461+
succeed even if classes are missing (because in that case they are taken from the classpath) -->
462+
<!-- Alternative would be to use a custom id here, e.g. 'gson-subset', and then run with
463+
`mvn ... compiler:compile@gson-subset` -->
464+
<id>default-compile</id>
465+
<configuration>
466+
<!-- Use custom source root dir; using the default `src/main/java` would otherwise implicitly
467+
compile needed classes, even if they are not explicitly listed in `<includes>` -->
468+
<compileSourceRoots>${gsonSubsetSrcDir}</compileSourceRoots>
469+
</configuration>
470+
</execution>
471+
<execution>
472+
<!-- Overwrite default test compilation execution, to only build a subset of the tests -->
473+
<id>default-testCompile</id>
474+
<phase>test-compile</phase>
475+
<goals>
476+
<goal>testCompile</goal>
477+
</goals>
478+
<configuration>
479+
<testIncludes>
480+
<testInclude>com/google/gson/internal/bind/JsonTreeReaderTest.java</testInclude>
481+
<testInclude>com/google/gson/internal/bind/JsonTreeWriterTest.java</testInclude>
482+
<testInclude>com/google/gson/internal/LazilyParsedNumberTest.java</testInclude>
483+
<testInclude>com/google/gson/internal/LinkedTreeMapSuiteTest.java</testInclude>
484+
<testInclude>com/google/gson/internal/LinkedTreeMapTest.java</testInclude>
485+
<testInclude>com/google/gson/internal/StreamsTest.java</testInclude>
486+
<testInclude>com/google/gson/stream/JsonReaderPathTest.java</testInclude>
487+
<testInclude>com/google/gson/stream/JsonReaderTest.java</testInclude>
488+
<testInclude>com/google/gson/stream/JsonWriterTest.java</testInclude>
489+
<testInclude>com/google/gson/JsonArrayAsListSuiteTest.java</testInclude>
490+
<testInclude>com/google/gson/JsonArrayAsListTest.java</testInclude>
491+
<testInclude>com/google/gson/JsonArrayTest.java</testInclude>
492+
<testInclude>com/google/gson/JsonNullTest.java</testInclude>
493+
<testInclude>com/google/gson/JsonObjectAsMapSuiteTest.java</testInclude>
494+
<testInclude>com/google/gson/JsonObjectAsMapTest.java</testInclude>
495+
<testInclude>com/google/gson/JsonObjectTest.java</testInclude>
496+
<testInclude>com/google/gson/JsonParserParameterizedTest.java</testInclude>
497+
<testInclude>com/google/gson/JsonPrimitiveTest.java</testInclude>
498+
<testInclude>com/google/gson/JsonStreamParserTest.java</testInclude>
499+
<testInclude>com/google/gson/SubsetTest.java</testInclude>
500+
<testInclude>com/google/gson/TypeAdapterTest.java</testInclude>
501+
</testIncludes>
502+
</configuration>
503+
</execution>
504+
</executions>
505+
</plugin>
506+
<!-- Skip ProGuard execution configured above for obfuscation tests; they cannot run for Gson subset -->
507+
<plugin>
508+
<groupId>com.github.wvengen</groupId>
509+
<artifactId>proguard-maven-plugin</artifactId>
510+
<configuration>
511+
<skip>true</skip>
512+
</configuration>
513+
</plugin>
514+
</plugins>
515+
</build>
516+
</profile>
390517
</profiles>
391518
</project>

gson/src/main/java/com/google/gson/ExclusionStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,13 @@ public interface ExclusionStrategy {
9999
* @param f the field object that is under test
100100
* @return true if the field should be ignored; otherwise false
101101
*/
102-
public boolean shouldSkipField(FieldAttributes f);
102+
boolean shouldSkipField(FieldAttributes f);
103103

104104
/**
105105
* Decides if a class should be serialized or deserialized
106106
*
107107
* @param clazz the class object that is under test
108108
* @return true if the class should be ignored; otherwise false
109109
*/
110-
public boolean shouldSkipClass(Class<?> clazz);
110+
boolean shouldSkipClass(Class<?> clazz);
111111
}

gson/src/main/java/com/google/gson/FieldNamingStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public interface FieldNamingStrategy {
3939
* @return the translated field name.
4040
* @since 1.3
4141
*/
42-
public String translateName(Field f);
42+
String translateName(Field f);
4343

4444
/**
4545
* Returns alternative names for this field when it is being deserialized. This is similar to

gson/src/main/java/com/google/gson/Gson.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ public Gson() {
370370
factories.add(TypeAdapters.BIT_SET_FACTORY);
371371
factories.add(DefaultDateTypeAdapter.DEFAULT_STYLE_FACTORY);
372372
factories.add(TypeAdapters.CALENDAR_FACTORY);
373+
TypeAdapterFactory javaTimeFactory = TypeAdapters.javaTimeTypeAdapterFactory();
374+
if (javaTimeFactory != null) {
375+
factories.add(javaTimeFactory);
376+
}
373377

374378
if (SqlTypesSupport.SUPPORTS_SQL_TYPES) {
375379
factories.add(SqlTypesSupport.TIME_FACTORY);

0 commit comments

Comments
 (0)