Commit Graph

1337 Commits

Author SHA1 Message Date
Zac Sweers
f49f677bfc Suppress common warnings in generated classes (#1028)
* Suppress common warnings in generated classes

Followup from #1023 (Resolves #1023 too). Since we can't do targeted deprecation suppressions, we can just stick with blanket deprecations suppressions for now. This also suppresses a couple other common issues with all our generated adapters.

Have just eyeballed the results for now, can add a proper test as a followup once #1014 is in

* Add redundant projection and re-enable -Werror

* Add tests for deprecation suppression

With -Werror enabled now we can actually check this
2019-11-17 09:40:49 -05:00
Jesse Wilson
f7dbde2114 Upgrade to KotlinPoet 1.4.4 (#1027)
This fixes support for reified inline types.
2019-11-16 22:54:29 -05:00
Zac Sweers
4241918d6b Handle enclosing visibility + cache metadata parsing (#1026)
* Only allow public or internal classes

* Ensure consistent ordering of supertypes

* Eagerly load supertype typespecs for reuse

* Add regression test for https://github.com/square/moshi/issues/1022

* Add MoshiCachedClassInspector, wire in

* Check visibility of enclosed types too

Resolves #1022

* Fix comments
2019-11-16 22:27:25 -05:00
Jesse Wilson
ca207b2e06 Revert "Don't allow toJson() serialization on polymorphic defau… (#1025)
This reverts commit 6323a0b7c8.

This makes it difficult for a client to take a server-provided value,
modify it, and send it back.
2019-11-16 22:04:57 -05:00
Andrew Orobator
fde0ce0eb5 Fixed typo in readme (#1018) 2019-11-12 17:12:58 -05:00
Zac Sweers
d25abb1ee5 Fix incorrect type variance being applied on generated adapters (#1010)
* Fix: force object type for type arguments

* Add outDeclaration regression test for #1009

* Create mapTypesUtility for reusing recursive type mapping

* Strip typevar variance where appropriate

Resolves #1009
2019-11-08 14:35:13 -08:00
Zac Sweers
3c0e3edff3 Merge pull request #994 from square/z/defaultToJson
Don't allow toJson() serialization on polymorphic default values
2019-11-03 15:32:50 -05:00
Zac Sweers
7cf365cdbf Fix nullable properties (#992)
* Fix missing nullability/annotations when unwrapping typealiases

Fixes #990

* Add extra nullable properties test + more nullability in alias test

* Add more complex typeAliasNullability test

* Recursively check nullability and track annotations in typealiases
2019-11-02 21:55:20 -04:00
Zac Sweers
fe34a577e7 Check against non-nullable known primitives when rendering class… (#993)
* Check against non-nullable known primitives when rendering class blocks

`Int?` will not equal `Int` in KotlinPoet, so this was always falling through to the default `::class.java` code.

Resolves #991

* Nix comment

* Flesh out test to include all primitives
2019-11-02 15:15:29 -04:00
Zac Sweers
c8c7121e76 Unwrap nested typealiases in code gen (#996)
* Add further nested typealias

* Recursively unwrap classnames

The unwrapped alias could be to something other than a classname!
2019-11-02 09:43:08 -04:00
Zac Sweers
6323a0b7c8 Don't allow toJson() serialization on polymorphic default values
This type explicitly indicates an unknown value. This is an explosive case, but an alternative could be to just write null into the writer?
2019-10-31 15:13:22 -04:00
Zac Sweers
541b53964c Add abstract function note to 1.9.1 changelog 2019-10-30 23:34:36 -04:00
Jesse Wilson
878e9a86d6 [maven-release-plugin] prepare for next development iteration 2019-10-30 23:26:50 -04:00
Jesse Wilson
0af27a39a6 [maven-release-plugin] prepare release moshi-parent-1.9.1 2019-10-30 23:26:43 -04:00
Jesse Wilson
6ec87f0fc1 Update changelog for 1.9.1. 2019-10-30 23:23:29 -04:00
Zac Sweers
092175ae90 Fix handling of typealiases in non-classname envs + wildcard fix… (#987)
* Correctly render non-classname wildcard types

Resolves #984
Resolves #985

* Add thorough typealias test

* Expand unwrapTypeAlias to parameterized and wildcard types

Resolves #983

* Disable Werror for now
2019-10-30 21:15:28 -04:00
Jesse Wilson
ac789070e8 Merge pull request #988 from square/z/regressionForAbstract
Add an abstract non-unit function regression for #974
2019-10-30 21:11:05 -04:00
Zac Sweers
9a0294c3a0 Handle non-property parameters in kotlin code gen (#982)
* Add parameter-only param in multi-masks test

* Add type to target parameters for later reference

* Ensure parameters are ordered

* Reword AdapterGenerator fromJson logic to use sealed FromJsonComponent

This allows us to handle parameter-only types separately (needed for mask index calculation). Resolves #979

* Add more tests
2019-10-30 21:06:04 -04:00
Zac Sweers
510d189e4e Add an abstract non-unit function regression for #974
Resolves #974 for good
2019-10-30 20:24:22 -04:00
Zac Sweers
a384bd0429 KotlinPoet 1.4.3 (#986)
KotlinPoet 1.4.3
2019-10-30 19:36:57 -04:00
Egor Andreevici
13c5ac5e26 KotlinPoet 1.4.3 2019-10-30 18:59:09 -04:00
Zac Sweers
0aacfc7430 Support 32+ parameter constructors in code gen (#978)
* Add MultipleMasksTest test

* Use multiple masks for constructors with more than 32 parameters

Resolves #977

* Add non-default arg to test

* Emit hex literals

* Simpler int math

* Don't allocate a mask if there's no properties
2019-10-30 16:48:00 -04:00
Zac Sweers
4f1c8a5eda Fix support for classes w/ multiple constructors in code gen (#976)
* Fix broken test

This test suite doesn't run on CI builds but fails locally since the method was moved

* Add multiple constructors test case

* Implement TypeName.asTypeBlock()

* Make DEFAULT_CONSTRUCTOR_MARKER public

* Look up constructor via getDeclaredConstructor with exact param types

Resolves #975

* Remove dead code
2019-10-30 00:39:08 -04:00
Jesse Wilson
6acebfaca6 More documentation on configuring Kotlin 2019-10-29 08:18:09 -04:00
Jesse Wilson
55441313cc Update changelog for 1.9.0. 2019-10-29 08:12:37 -04:00
Jesse Wilson
4637950bab [maven-release-plugin] prepare for next development iteration 2019-10-29 07:57:56 -04:00
Jesse Wilson
0c8005bcee [maven-release-plugin] prepare release moshi-parent-1.9.0 2019-10-29 07:57:49 -04:00
Zac Sweers
d5a43e35f3 Update to KotlinPoet 1.4.2 (#972)
* Unwrap typealiases

This was a change in 1.4.2 left over from moshi's prior metadata logic. We need the unwrapped type for class references

* Add toe-hold for testing shared adapter behavior

* Add regression test for abstractSuperProperties

* Kotlinpoet 1.4.2
2019-10-29 07:51:17 -04:00
Jesse Wilson
73bc12735e Merge pull request #970 from square/jwilson.1027.remove_new_k_apis
Don't add new public APIs for Kotlin type inference
2019-10-28 20:19:11 -04:00
Jesse Wilson
c72b856b05 Don't add new public APIs for Kotlin type inference
We can do a better job of this when we make the core Moshi module
depend on the Kotlin stdlib
2019-10-27 21:14:00 -04:00
Jesse Wilson
ed20823c2f Merge pull request #791 from square/eric.2019-01-15.multiple-transient-constructor-parameters
Support multiple transient properties in KotlinJsonAdapter.
2019-10-27 16:17:03 -04:00
Eric Cochran
efb0fc0923 Support multiple transient properties in KotlinJsonAdapter. 2019-10-27 14:11:33 -04:00
Jesse Wilson
5912dfaaf6 Merge pull request #966 from square/jwilson.1026.onlyonce
Look up kotlin.Metadata::class only once
2019-10-27 00:04:49 -04:00
Jesse Wilson
53b045eb86 Look up kotlin.Metadata::class only once 2019-10-26 23:59:27 -04:00
Jesse Wilson
c3cb07989e Merge pull request #965 from square/jwilson.1026.specify_ordering
Specify precedence when a subtype has multiple labels
2019-10-26 23:11:38 -04:00
Jesse Wilson
02cf66f129 Specify precedence when a subtype has multiple labels 2019-10-26 22:57:00 -04:00
Jesse Wilson
537b22f1c3 Merge pull request #964 from square/jwilson.1026.warn_dont_fail
Go back to using Unsafe APIs to create instances without constructors.
2019-10-26 22:08:49 -04:00
Jesse Wilson
eea2981fac Go back to using Unsafe APIs to create instances without constructors.
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.
2019-10-26 22:02:49 -04:00
Zac Sweers
2a79428891 Merge pull request #963 from jzbrooks/kotlin-enum-values
Keep synthesized values() for EnumJsonAdapter
2019-10-26 15:05:17 -04:00
Zac Sweers
01b7ea4ba2 Update to KotlinPoet 1.4.1/Kotlin 1.3.50 (#956)
* KotlinPoet 1.4.1 & Kotlin 1.3.50

KotlinPoet uses 1.3.50, so this just matches that now

* Remove now-unnecessary custom shade

This uses the same common package prefix in kotlinpoet now

* Add backwardReferencingTypeVars() regression test

Coverage for #955
2019-10-26 15:04:51 -04:00
Justin Brooks
8460155dc5 Keep synthesized values() for EnumJsonAdapter 2019-10-26 12:20:11 -05:00
Zac Sweers
870fee4332 Generate optimized toString() (#957)
* Generate optimized toString()

This optimizes `toString()` functions to emit separate strings for the enclosing prefix and the adapter name

Example:

```kotlin
override fun toString(): String = buildString {
    append("GeneratedJsonAdapter(").append("SmokeTestType").append(")") }
```

* Optimize with capacity and char
2019-10-19 16:11:51 -04:00
Jesse Wilson
2cf3f0204c Merge pull request #943 from square/jakew/value-sink/2019-09-27
Add JsonWriter.valueSink for streaming data
2019-10-17 23:45:38 -04:00
Burkhard Mittelbach
b4e6715248 Added codegen support for inline classes (#923)
* Added codegen support for inline classes

* moved to DualKotlinTest

* added test class consuming inline class
2019-10-16 18:17:23 -04:00
Zac Sweers
ae8b62b3ee Fix TypeVariable/WildcardType recursion causing stackoverflows (#948)
* 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/1128

Resolves #338

* Capture adapter to make checkstyle happy

* Move RecursiveTypesResolveTest out of internal package

* Use moshi convention for tests

* 2 is not 1
2019-10-15 18:01:48 -04:00
Jake Wharton
3816dbda74 Add JsonWriter.valueSink for streaming data
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.
2019-10-10 10:18:06 -04:00
Zac Sweers
dbed99d71b Fix @field:Json parameters annotations always taking precedence (#946)
* Add regression test for field json annotations

* Make json name null if absent rather than default to name

This fixes incorrect behavior where the parameter json name would always win out over the property value
2019-10-05 21:26:43 -04:00
Zac Sweers
9dc331f20c Update kotlin-compile-testing to 1.2.3
https://github.com/tschuchortdev/kotlin-compile-testing/releases/tag/1.2.3

* Check file extensions automatically when creating `SourceFile`s with the new factory functions
* Less noisy output/verbose flag actually works as intended
2019-10-05 20:29:03 -04:00
Burkhard Mittelbach
666d87be65 added test for internal property without backing field (#921) (#947) 2019-10-05 16:51:48 -04:00
Burkhard Mittelbach
f51de08caf added test for transient delegate in kotlin code gen (#922) (#942)
* added test for transient delegate in kotlin code gen (#922)

* cleanup spaces

Co-Authored-By: Zac Sweers <pandanomic@gmail.com>
2019-10-05 16:50:34 -04:00