Inderjeet Singh
c25278b4d6
Created an alpha package that holds experimental feature.
...
Added support for JsonPostDeserializer that allows you to invoke postDeserialize methods on an Gson deserialized object.
2012-10-11 03:20:36 +00:00
Joel Leitch
14f16e2d0c
Adding Red-Black Tree implementation and tying it into the Gson bindings.
2012-10-11 03:15:49 +00:00
Jesse Wilson
2fef83799d
Optimizations and bug fixes for LinkedHashTreeMap.
...
The most interesting optimization is to replace ArrayDeque with a manual linked list that reuses the nodes 'parent' field. These optimizations save about 20%.
2012-09-17 03:30:20 +00:00
Jesse Wilson
aceadaecf1
Add a hashing layer to LinkedTreeMap. Instead of having 1 root node, the class now has several root nodes, one for each hash bucket in a hash table.
...
Compared to LinkedTreeMap, this is slower for small (size=5) maps: 124% slower to get() and 33% slower to create and populate. It's a win for large (size=500) maps: 46% faster to get() but 8% slower to create and populate. And it's a big win for very large (size=50,000) maps: 81% faster to get() and 46% faster to create and populate.
http://microbenchmarks.appspot.com/run/limpbizkit@gmail.com/com.google.common.collect.MapBenchmark
I'm going to follow this up with some simple optimizations: caching local fields and simplifying access. That should narrow the performance gap.
2012-09-17 00:19:44 +00:00
Jesse Wilson
a0493b9732
New code that can split an AVL tree into two AVL trees.
...
This is in preparation for a new feature where LinkedTreeMap will have multiple roots, each in its own hash bucket.
2012-09-15 06:13:33 +00:00
Jesse Wilson
01bd0d92e2
Tests for LinkedTreeMap with incompatible keys.
2012-09-12 05:06:48 +00:00
Jesse Wilson
a6ab854302
Fix a bug where we were unlinking nodes that shouldn't have been unlinked.
...
Found by Guava's awesome collections test suite!
2012-09-12 04:41:58 +00:00
Jesse Wilson
93e38901df
Draft of LinkedTreeMap. Its ordered like a LinkedHashMap but it doesn't do any hashing for DoS resistance.
...
Not yet adopted in our code.
Known critical bugs:
- throws ClassCastException when get() is called with a non-comparable key
- throws NullPointerException on get(null)
2012-09-10 20:04:38 +00:00
Jesse Wilson
b3b919770b
Change number parsing to use one big loop. This changes it to return JsonToken.STRING for very long (>8k digits) numbers.
2012-09-02 20:12:19 +00:00
Jesse Wilson
8daf3aaeb4
Inline position computation. This is uglier but faster.
2012-08-28 03:52:18 +00:00
Jesse Wilson
46b73632b0
Fix a bug where we weren't reading enough characters when a BOM was encountered.
2012-08-28 01:48:25 +00:00
Jesse Wilson
b0a172944a
More number parsing improvements.
2012-08-27 03:17:41 +00:00
Jesse Wilson
4c2980e6ff
Fix a bug in integer parsing.
2012-08-27 02:34:52 +00:00
Jesse Wilson
c7cb503cdb
Restore fast skips.
...
document api ns linear runtime
TWEETS GSON_STREAM 397568 =========
TWEETS GSON_SKIP 300058 =======
READER_SHORT GSON_STREAM 76632 =
READER_SHORT GSON_SKIP 57796 =
READER_LONG GSON_STREAM 894690 =====================
READER_LONG GSON_SKIP 565114 =============
2012-08-27 01:17:50 +00:00
Jesse Wilson
085856c128
Don't leave the JsonReader in an invalid state if nextInt(), nextDouble() or nextLong() fails. We now save a reference to the string before we parse it, and keep that referenced value if parsing fails.
2012-08-26 22:06:57 +00:00
Jesse Wilson
b96d2d9837
Support non-execute prefixes.
2012-08-26 19:31:06 +00:00
Jesse Wilson
46b4346505
Get JsonReader2 to the point that it's passing most tests.
...
Still missing:
- non-execute prefixes
- rolling back 'pos' when a double fails to parse
- octal prefix failures
2012-08-26 04:02:09 +00:00
Jesse Wilson
c5c65ba626
Add an experimental rewrite of JsonReader.
...
The motivating difference is that JsonReaderV2 tries to read each character at most once. This means that when it reads literals, it also attempts to decode them to a keyword (true/false/null) or a number.
This change also _doesn't_ read strings until demanded to do so. This should permit streaming access to strings down the road.
This code is not yet complete, nor is has it been properly optimized. And the implementation is also quite a mess! It is a work in progress.
2012-08-25 04:31:56 +00:00
Jesse Wilson
9c4b23b39a
JsonObject.deepCopy() for Gson.
2012-08-21 01:19:43 +00:00
Jesse Wilson
1a4f690335
Regretfully enable serialization for StringMap and LazilyParsedNumber.
...
One of our favorite users (my employer!) is stuck in a sad situation where they need to serialize objects returned from Gson; this is a workable escape hatch.
2012-08-15 14:58:26 +00:00
Inderjeet Singh
42e35e9f90
updated oss-parent version to 7 in gson-extras pom.
...
fixed some eclipse warnings.
2012-08-01 20:57:51 +00:00
Jesse Wilson
4aaa4bf20c
StringMap was suffering because the string's hashCode was not cached. Address this by preferring the regular String.hashCode until hash collision problems start to occur.
2012-07-10 18:46:01 +00:00
Jesse Wilson
4816941f0d
Address code review comments on r1154
2012-07-02 20:32:38 +00:00
Inderjeet Singh
6575cdebca
When EOF is encountered prematurely, Streams.parse() (and JsonParser) now throw JsonSyntaxException.
2012-07-02 18:36:54 +00:00
Inderjeet Singh
582b0a0c9c
Fixed issue 443 by relying on Streams.parse() to return a JsonNull on empty documents and throw a JsonParseException otherwise.
2012-06-30 18:48:11 +00:00
Jesse Wilson
dc4e43bb23
Permit users to define type adapters for primitive types and strings.
...
Also expose an API to get the field naming strategy.
2012-06-30 02:37:49 +00:00
Inderjeet Singh
e9b576c456
removed unused import
2012-05-06 07:19:23 +00:00
Inderjeet Singh
83e5a4937c
Renamed Gson.getNextAdapter to getDelegateAdapter.
...
Deleted testParameterizedMapSubclassDeserialization which we decided to not fix.
Added simple tests for getDelegateAdapter
2012-04-12 18:49:27 +00:00
Jesse Wilson
3df2db1f16
Don't permit a type adapter for String to be registered.
2012-04-12 18:27:48 +00:00
Jesse Wilson
7b61e784c0
Remove testParameterizedMapSubclassDeserialization that never passed. We'll eventually add an equivalent to the extras/ package.
2012-04-12 18:15:56 +00:00
Jesse Wilson
9be0fd9ecc
Make the BigDecimal and BigInteger type adapters user-overrideable.
2012-03-18 17:55:15 +00:00
Inderjeet Singh
14ebcc4ead
fixed eclipse warnings
2012-03-11 21:43:38 +00:00
Inderjeet Singh
15c2ae7548
Updated map subclass deserialization test to illustrate a failing condition.
...
Gson currently uses LinkedHashMap for an instance if a Map subclass does not define a default constructor.
2012-03-11 21:37:13 +00:00
Jesse Wilson
751c69c655
Support null values in StringMap
2012-03-11 15:19:01 +00:00
Jesse Wilson
15e7819e9a
Fix testStringEndingInSlash by fixing nextNonWhitespace to always return the character at buffer[pos-1].
2012-02-16 22:49:53 +00:00
Jesse Wilson
2c8bec27d4
Permit multiple top-level values in JsonWriter in lenient mode. Also fix some cases where we don't throw the right thing on a closed JsonWriter.
...
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.
2012-02-12 20:42:16 +00:00
Jesse Wilson
f40ac23e88
Write a test recommended by missing code coverage on TypeAdapter
2012-02-11 20:16:05 +00:00
Jesse Wilson
7b75efd09e
Write some tests prescribed by missing code coverage. I found a bug where our nonexecute prefix code causes a problem.
2012-02-11 20:15:39 +00:00
Jesse Wilson
a0afec71ff
Test case to demonstrate no such crash as reported in issue 408.
2012-02-11 18:19:54 +00:00
Jesse Wilson
bb8dca71c4
Restore ability of instance creators to create collection and map types. We inadvertently lost this in Gson 2.0 and 2.1. Nobody noticed!
2012-01-01 15:46:33 +00:00
Jesse Wilson
323dfa0af5
Be strict in TypeAdapter's toJson/fromJson methods
2012-01-01 12:36:42 +00:00
Jesse Wilson
641590b5b6
Fill in some gaps in ExclusionStrategy's test.
...
Changes to GsonInternalAccess should have broken exclusion strategies, but didn't. Adding these tests cause the expected breaks.
2012-01-01 12:34:47 +00:00
Jesse Wilson
4057b98bab
Implement all but the most difficult part of graph type adapter's deserialization. The catch is we want to return an instance that we don't have yet. It's on the stack, but we don't have a handle to it because it's inside the 'nextTypeAdapter' who is busy populating its fields.
2011-12-30 08:27:24 +00:00
Jesse Wilson
4cb1b88115
Test for registerTypeHierarchyAdapter() using Date.class
...
Fixes issue 352.
2011-12-29 07:27:33 +00:00
Jesse Wilson
6d2cf4a853
Test for excludeFieldsWithModifiers().
...
Fixes issue 324.
2011-12-29 07:17:36 +00:00
Jesse Wilson
8d5de3136c
Inline character unescaping. This saves ~10% on the READER_LONG benchmark.
2011-12-25 07:09:46 +00:00
Inderjeet Singh
2cd3f9707f
Incorporated feedback from r1082
2011-12-23 16:11:12 +00:00
Inderjeet Singh
bd937fe7b5
A type adapter for Class that throws an UnsupportedOperationException.
2011-12-22 22:31:43 +00:00
Jesse Wilson
13c1946621
More tests that skipValue() is no less strict.
2011-12-21 21:43:55 +00:00
Jesse Wilson
b28e518c7e
Hide toJson/fromJson APIs for the 2.1 release.
2011-12-21 21:30:18 +00:00