Commit Graph

877 Commits

Author SHA1 Message Date
Joel Leitch
83e1f45653 Re-add non-comparable key tests to LinkedHashTreeMap. 2013-04-04 22:29:29 +00:00
Inderjeet Singh
c22ab9767d fixed https://code.google.com/p/google-gson/issues/detail?id=491 by adding OSGi entries for maven-source-plugin 2013-04-04 22:05:56 +00:00
Inderjeet Singh
edd6c19670 deleted unused enum and reordered imports 2013-04-04 21:40:05 +00:00
Joel Leitch
af6aa5f782 Use the LinkedHashTreeMap instead of LinkedTreeMap and delete the LinkedTreeMap version. 2013-04-04 21:31:23 +00:00
Inderjeet Singh
7d53113ebc fixed https://code.google.com/p/google-gson/issues/detail?id=509 by adding construction for EnumSet 2013-04-04 21:15:50 +00:00
Jesse Wilson
63142f621c Use the right method name in error messages.
Fixes issue 498.
2013-02-04 16:05:00 +00:00
Jesse Wilson
6a69c603c0 Permit serialization of "Class" fields, but only if they're null. 2013-02-04 15:52:51 +00:00
Joel Leitch
edf326e756 Tag member fields as transient since a LinkedHashMap is used for serialization. 2013-01-15 20:04:26 +00:00
Joel Leitch
5af92f1736 Additional changes to a map test with "null" string key. 2013-01-14 22:18:07 +00:00
Joel Leitch
6dc6b4be92 Fix object leak from ThreadLocal. 2013-01-14 22:05:28 +00:00
Joel Leitch
e5b9b8eb81 Minor addition to the JsonNullTest. 2013-01-14 18:40:23 +00:00
Joel Leitch
84201c015f Do not peek during a "skipValue" if a value has already been peeked. 2013-01-14 18:38:46 +00:00
Joel Leitch
3f2efac95e Stop blowing up on a null key, but rather return that the element is not found. 2013-01-09 23:37:38 +00:00
Joel Leitch
b0531e1649 Ensure "excluder" is added prior to user defined type adapters/factories.
- Added test expose bad behaviour.
2012-12-20 19:41:33 +00:00
Joel Leitch
6d90f0d894 Make JsonElement TypeAdapterFactory a type hierarchy factory. 2012-12-20 07:57:17 +00:00
Jesse Wilson
b4d51db776 Add a test case for a problem reported on the group.
https://groups.google.com/d/topic/google-gson/EBmOCa8kJPE/discussion
2012-10-29 16:30:33 +00:00
Joel Leitch
040bae34d7 Allowing instance creators to be registered with the raw type only (without specifying type parameters). 2012-10-24 20:40:44 +00:00
Jesse Wilson
af4879dbb7 Move interceptors from 'alpha' to 'extras'.
This makes the feature less risky to use! It now uses our
TypeAdapterFactory infrastructure rather than relying on
parallel infrastructure.
2012-10-23 17:36:30 +00:00
Jesse Wilson
1e18dce002 Don't subclass ThreadLocal.
This attempts to address issue 402, wherein subclassing ThreadLocal is pinning a reference to a class, which transitively pins the entire application in containers like Tomcat.
2012-10-23 02:41:34 +00:00
Jesse Wilson
22c835f2bc Fix compile warnings 2012-10-23 02:40:14 +00:00
Inderjeet Singh
fd4fbe4132 Added support for collections, maps, and arbitrary depth of type adapters for Intercept annotation.
Added more tests for the features.
2012-10-18 02:37:43 +00:00
Inderjeet Singh
714ac8e643 added tests for using intercept in fields and lists. These tests are currently failing. 2012-10-11 20:29:40 +00:00
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
084047d80b Reintroduce string pooling in JsonReader.
This makes Hotspot slower. From my before/after measurements using ParseBenchmark, times in microseconds:
  TWEETS: 350 -> 370 (+6%)
  READER_SHORT: 77 -> 76 (-1%)
  READER_LONG: 870 -> 940 (+8%)
  
But it makes Dalvik faster by a greater margin. These before/after measurements use times in milliseconds:
  TWEETS: 25 -> 20 (-20%)
  READER_SHORT: 5.6 -> 4.7 (-16%)
  READER_LONG: 52 -> 47 (-10%)
 
 It's a net win because we're saving a greater fraction of time, and because we're helping the platform that needs the most help. We're paying microseconds on Hotspot to gain milliseconds on Dalvik.
2012-09-10 16:13:33 +00:00
Inderjeet Singh
d1ff7bb397 Deleted spurious directory gson-codegen. The real codegen code is in trunk/codegen 2012-09-04 21:10:12 +00:00
Jesse Wilson
411c5c0b50 Follow up on r1197 and make deepCopy package-private. We don't want to use protected because some of the classes are non-final and protected shows up in the Javadocs. 2012-09-03 23:30:27 +00:00
Inderjeet Singh
a973837dd4 made deepCopy protected to eliminate it from the public API for now.
It will be in the subsequent release.
2012-09-03 08:34:37 +00:00
Jesse Wilson
8df7209074 Fix cut & paste issue in JsonToken Javadocs.
Fixes issue 463.
2012-09-02 21:29:30 +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
3920d95fac rename peekedInteger to peekedLong 2012-09-02 17:46:02 +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
980796005f Use a conventional for loop in nextQuotedValue() to make hotspot's job easier. 2012-08-27 04:42:39 +00:00
Jesse Wilson
bdf2cac6d4 Replace switch with if/else when processing whitespace. If/else is faster! 2012-08-27 04:17:29 +00:00
Jesse Wilson
b0a172944a More number parsing improvements. 2012-08-27 03:17:41 +00:00
Jesse Wilson
448063dde1 Fix a goof in number parsing. 2012-08-27 03:07:20 +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
e7bfd0c97d Promote JsonReader2 to be the main JsonReader implementation. 2012-08-26 19:34:46 +00:00
Jesse Wilson
553fa6b742 Prepare to replace JsonReader with JsonReader2 2012-08-26 19:33:49 +00:00
Jesse Wilson
b96d2d9837 Support non-execute prefixes. 2012-08-26 19:31:06 +00:00
Jesse Wilson
97cb326ad2 Delete an old version of the rewritten JsonReader 2012-08-26 04:04:22 +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
Jesse Wilson
35c13173b0 Switch on ints rather than enums in JsonReader.
Using enums was triggering this Android bug:
http://code.google.com/p/android/issues/detail?id=36349
2012-08-14 21:32:18 +00:00
Inderjeet Singh
7d901d34fb Beginning of a simple test related to codegen. 2012-08-02 01:35:45 +00:00
Jesse Wilson
3be354eb76 APT hello world. This generates an empty class for each class annotated @GeneratedTypeAdapter. 2012-08-01 22:58:04 +00:00
Inderjeet Singh
8cc703ed21 Added Gson dependency 2012-08-01 22:09:59 +00:00
Inderjeet Singh
6aad250f47 Initial creation of the codegen project 2012-08-01 22:06:29 +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
Inderjeet Singh
982c893d65 updated extras pom to latest plugin versions.
updated organization names for Jesse and Inder.
2012-08-01 20:54:37 +00:00
Jesse Wilson
f406d3cf89 Don't fall back when we're already in the slow case. 2012-07-10 23:45:20 +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
Inderjeet Singh
b36bedb423 Javadocs for 2.2.2 2012-07-03 01:09:24 +00:00
Inderjeet Singh
33de25f9fe [maven-release-plugin] prepare for next development iteration 2012-07-03 00:44:56 +00:00
Inderjeet Singh
66cb689aae [maven-release-plugin] prepare release gson-2.2.2 2012-07-03 00:44:47 +00:00
Inderjeet Singh
f412d7ede2 changed version to 2.2.2-SNAPSHOT 2012-07-03 00:31:00 +00:00
Inderjeet Singh
b946a229b6 deleted unused field. 2012-07-03 00:28:55 +00:00
Jesse Wilson
4816941f0d Address code review comments on r1154 2012-07-02 20:32:38 +00:00
Inderjeet Singh
ae9e63fc54 using ${project.version} in MANIFEST.MF instead of hardcoding version numbers. 2012-07-02 19:20:35 +00:00
Inderjeet Singh
ccaf531b36 Updated version to 2.3 in Export-Package 2012-07-02 19:17:50 +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
1c7aee40f3 Implement Flushable. 2012-06-30 02:46:26 +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
c3ada66749 2012-06-27 01:54:31 +00:00
Inderjeet Singh
7b329df351 2.2.1 javadocs 2012-05-11 18:52:43 +00:00
Inderjeet Singh
34a93c4049 [maven-release-plugin] prepare for next development iteration 2012-05-11 18:41:20 +00:00
Inderjeet Singh
ddbd0dff22 [maven-release-plugin] prepare release gson-2.2.1 2012-05-11 18:41:12 +00:00
Inderjeet Singh
90c6b29f4d revised to 2.2.1 2012-05-11 18:39:29 +00:00
Inderjeet Singh
e9b576c456 removed unused import 2012-05-06 07:19:23 +00:00
Inderjeet Singh
96a0fec6a1 Gson 2.2 Javadocs 2012-05-06 04:42:38 +00:00
Inderjeet Singh
61257f9b1c [maven-release-plugin] prepare for next development iteration 2012-05-06 00:31:39 +00:00
Inderjeet Singh
7129115986 [maven-release-plugin] prepare release gson-2.2 2012-05-06 00:30:39 +00:00
Inderjeet Singh
1492dd7d36 Preparing for release: updated export manifest to 2.2 2012-05-05 23:58:44 +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
392f29e859 Include protected members in Javadoc.
Fixes issue 430.
2012-04-12 18:34:17 +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
6d351fea07 Fix a documentation typo.
Fixes bug 423.
2012-04-12 18:09:07 +00:00
Jesse Wilson
a991e54157 Make fewer calls to out.write() when serializing strings. On one Android test, this improved serialization time of some documents by 83%.
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%
2012-04-12 13:24:37 +00:00
Inderjeet Singh
c890e31bba Simplified pom.xml by deleting plugins that we dont use. 2012-03-26 21:44:29 +00:00
Inderjeet Singh
72640e773b Updated version numbers for various maven artifacts 2012-03-26 21:39:18 +00:00
Jesse Wilson
9be0fd9ecc Make the BigDecimal and BigInteger type adapters user-overrideable. 2012-03-18 17:55:15 +00:00
Inderjeet Singh
5e3f5a6bbe Ensuring that the hash is unpredictable and well distributed.
We achieve this by using the same algorithm as the Perl version, but this implementation
is being written from scratch for license compliance.
2012-03-15 22:27:55 +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
4c629347da Only support string keys in string map. This rev passed all 655 applicable map tests in the Guava collections test suite. 2012-03-11 17:34:46 +00:00
Jesse Wilson
751c69c655 Support null values in StringMap 2012-03-11 15:19:01 +00:00
Jesse Wilson
ad3489f557 First steps to StringMap, an alternative to LinkedHashmap. 2012-03-11 13:54:41 +00:00