The attempted fix replaced a warning with a crash. I believe that a
warning is a better developer experience than a crash.
This reverts commit c0639316b1.
* Port Gson Types recursion fix for subtypeOf/supertypeOf
From a300148003
First step in resolving #338
* Port Gson Type resolve() recursion fix for type variables
From https://github.com/google/gson/pull/1128Resolves#338
* Capture adapter to make checkstyle happy
* Move RecursiveTypesResolveTest out of internal package
* Use moshi convention for tests
* 2 is not 1
Unlike `value(BufferedSource)`, this retains the push-based nature of JsonWriter and allows layering other sinks (such as a base64-encoding Sink for binary data). Since `value(BufferedSource)` is trivially replaced by reading the source into the value sink, it is deprecated.
* Report json name in code gen if different from property name
Resolves#800
* Unify required property name error message
* Report json name in kotlinjsonadapter, match code gen
* Upper case JSON
Co-Authored-By: Jake Wharton <jakew@google.com>
* Upper case JSON
Co-Authored-By: Jake Wharton <jakew@google.com>
* Don't keep constants
* Inline json name - property name comparison to util methods
* Remove unnecessary constructor keyword
* Consolidate non-null/missing property tests to parameterized suite
* Add custom json name tests for nonNull property checks
* Rename test to make maven happy
Maven won't run the test unless it ends with `Test` or `TestCase`
It's a programmer error to omit this, but vararg declaration allows you to. This checks that.
We could improve it to ensure matching lengths or bounds, but this is a good start.
* Don't try to access unsafe APIs on android 29+
Resolves#872. Not sure if we want to try caching some of these lookups
* Checkstyle
* Use correct inner class naming
Co-Authored-By: Jake Wharton <jakew@google.com>
* Name variable ignored
* Cache android check
* Differentiate local naming from properties with constructor defaults
* Remove constructor invocation and mask creation methods
We're inlining all this
* Add explanatory comment for why we use the default primitive value
* Inline mask generation and constructor invocation to generated adapters
* Remove unused argument
Co-Authored-By: Jake Wharton <jakew@google.com>
* Compute masks directly during code gen
* Opportunistic: remove extraneous double space from control flow
* Just mask and invert directly
* Don't re-wrap nullsafe/nonnull adapters if they are already one
nullSafe() is often called defensively, which can lead to a lot of layers of wrapping and checking. This avoids that overhead where possible.
* Add tests
* Add Util#invokeDefaultConstructor
* Add defaultPrimitiveValue
This will be used to initialize required properties for later invocation of the default constructor
* Move isTransient into PropertyGenerator
We will need this in order to know how to invoke constructors even if they have transient parameters
* Add notion of hasLocalIsPresentName to PropertyGenerator
* Switch to using invokeDefaultConstructor for any default property types
* Add code gen versions of default constructor test
* Fix mismatched names
* Use Arrays.copyOf
* Unwrap InvocationTargetException
* Use name allocator
* Rename createMask to createDefaultValuesParametersMask, use it directly
* Opportunistically clean up result variable holder
Only needs to be made if we have non-parameter instances, otherwise we can just return directly
* Fix mask name
* Remove unnecessary mod
* Switch to local lazily-initialized constructor reference
Not working because of some issue in kotlinpoet I don't understand
* Fix named usage
* Clean up debugging dots
* Add proguard/R8 rule for keeping defaults constructor in targets
* Make constructor lookup property private
* Add another defensive dot
* Rework invokeDefaultConstructor to accept vararg args
A little more idiomatic
* Update proguard rules
* Start MoshiKotlinExtensions
* Add Moshi.Builder.add() with reified typeOf
* Use non-shadowing name for addAdapter
* Implement KType.toType()
.javaType isn't implemented
* Don't re-wrap wrapped adapters
* Use new adapter functions in tests to smoke test
* Don't enable uses experimental in kotlin-reflect, only the test
* Use internal leniency API
* Use toType in addAdapter too
* Update error message in test
* Extract generatedJsonAdapterName to public API for other generators/consumers
* Fix kapt location in tests
* Add IDE-generated dependency-reduced-pom.xml to gitignore
This always bites me
* Add generator property to JsonClass and skip in processor
* Opportunistically fix formatting for generateAdapter doc
* Extract NullSafeJsonAdapter for delegate testing
* Add custom adapter tests
* Allow no-moshi constructors for generated adapters
* Fix rebase issue
* Use something other than nullSafe() for lenient check
This no longer propagates lenient
* Add missing copyrights
* Add top-level class note
* Add note about working against Moshi's generated signature
* Add missing bit to "requirements for"
* Note kotlin requirement relaxed in custom generators
* Style
Fail with a clear message. This is useful when iteratoring through an array, making assumptions about the size without using hasNext.
Also, disallow calling skipValue at the end of a document. This is a behavior change.
* Fall back to reflection when generated adapter is not found.
This is handy for development builds where kapt is disabled and models still have @JsonClass(generatedAdapter = true).
* Add test for Kotlin reflection fallback behavior.
This changes how we lookup and cache adapters. Previously we were pretty
optimistic about putting adapters in the cache; these adapters could have
depended upon stubs that were incomplete.
Now we're a lot more careful: we only put adapters in the cache if the
root object that triggered a set of recursive calls was constructed
successfully.
Closes: https://github.com/square/moshi/issues/679
This is a new API that makes it possible to do more interesting things
with composition. It's currently write-only; doing composition on reads
is much more difficult.