* Add CodeQL GitHub code scanning workflow
* Only compile main sources for code scanning
* Move test .proto files to test sources
`annotations.proto` also seems to be only relevant for tests because the test
explicitly registers them as extensions. By default the Proto adapter does not
consider them.
* Address some code scanning findings
* Fix some more findings
* Added test which shows that lenient JsonWriter fails writing infinite primitive doubles, but does not fail writing boxed doubles, as stated in #1090.
* Fixed JsonWriter#value(double) to write infinite and NaN values when lenient, as JsonWriter#value(Number) does. (fixes#1090)
When calling value() with a Boolean overload resolution would choose value(boolean) which would throw an NPE on null. The other boxed types are all numbers which would resolve to value(Number) and behave correctly.
Add a jsonValue(String value) method that takes a raw JSON string that
can be used to write the string directly to the underlying writer
without modification.
The intended use case for this is when building JSON that contains a
pre-serialized JSON string as a value in an object or array.
TWEETS
run vm htmlSafe ms linear runtime %
Before app_process true 68.7 ============================== 100%
After app_process true 35.9 =============== 52%
READER_LONG
run vm htmlSafe ms linear runtime %
Before app_process true 439.0 ============================== 100%
After app_process true 74.5 ===== 17%
I'd prefer to not support multiple top-level values, but we support it in JsonReader and it's easier to be consistent. Kevin Hayen's patch pointed me in the right direction here, but I needed to do more work to cover some of the edge cases.
Fixes issue 397.
Add setSerializeNulls() to JsonWriter, so nulls can be skipped from serialization. This does not yet impact JsonElementWriter.
One change in behavior: if the only value is skipped, we now emit "null" rather than "".
JsonWriter was using suboptimal escape characters for newlines etc: unicode escapes rather than \x escapes.
JsonObjectTest was banning empty and whitespace-only keys. These values are permitted as of r585.
Notable features:
- Efficiency. The parser is faster than the current javacc parser. It's also faster than popular libraries for JSON streaming.
- Toggle lenient/strict
- Toggle pretty/compact
- Friendly error messages on bad JSON
- GSON-quality Javadoc
- Non-execute prefix handling
This doesn't wire JsonReader up into Gson just yet. That's coming soon...