Commit Graph

1323 Commits

Author SHA1 Message Date
Jake Wharton
d07040ce17 Merge pull request #1155 from square/jw/wrapper/2020-06-08
Add Maven wrapper
2020-06-10 08:32:38 -04:00
Jake Wharton
c63f7cc5d0 Add Maven wrapper 2020-06-08 20:09:58 -04:00
Tolriq
8c8c5977a7 R8 now have automatic detection of Class.forName and auto generate keep rules.
This makes application build with Moshi to keep unwanted Kotlin Metadata that have a huge impact on APK size.

After discussion with R8 team, there's currently no solution to avoid this other than using the trick in this PR.

Fixes https://github.com/square/moshi/issues/1115
2020-06-04 18:09:10 +02:00
Ryan Harter
dd8611a1d9 Merge pull request #1080 from square/z/resolveRealTypes
Fix resolution of types in superclass settable properties
2020-05-26 17:53:45 -05:00
Jake Wharton
0c85eae34a Merge pull request #1142 from sarthakz9/patch-1
small correction in given example
2020-05-18 09:46:41 -04:00
sarthak sehgal
976a891568 small correction in given example 2020-05-18 12:11:24 +05:30
Jake Wharton
db803ffa79 Merge pull request #1121 from angusholder/improve-collections-errors
Improve error when incorrectly trying to use a collection class like ArrayList instead of List
2020-04-09 21:23:41 -04:00
Graham Lea
d06758d092 Document thread safety 2020-04-09 21:22:49 -04:00
Angus Holder
2a9177168b Improved error when using collection classes by mistake
A new user of Moshi might try to make a class like

    data class Response (
        val users: ArrayList<User>
    )

Then when trying to create a JsonAdapter for it, they get an unhelpful error
message like

    Platform class java.util.ArrayList in java.util.ArrayList<java.lang.String>
    requires explicit JsonAdapter to be registered

which doesn't explain what they should do to fix the problem. In fact what it
hints towards is that the user should implement a JsonAdapter for ArrayList,
when really they just need to change the type to List!

Now the error looks like

    No JsonAdapter for java.util.ArrayList<java.lang.String>, you should use
    List instead of ArrayList (Moshi only supports the collection interfaces
    by default).
2020-04-09 21:19:13 -04:00
Jake Wharton
b413423d05 Merge pull request #1098 from square/jakew/json-value-writer/2020-02-14
Add JsonWriter.jsonValue API
2020-02-15 18:42:59 -05:00
Jake Wharton
0790296cc7 Add JsonWriter.jsonValue API
This is symmetric with JsonReader.readJsonValue in that it writes an Object comprised of maps, lists, and some scalars.
2020-02-15 18:38:39 -05:00
Zac Sweers
d64033ed94 Fix reflection names in generated proguard files (#1088)
* Fix reflection names in generated proguard files

Proguard wants to speak reflection names

* Opportunistic clean up proguard tests

This ensures we fail the test if there are any unexpected ones
2020-01-30 22:58:10 -05:00
Zac Sweers
1edcb77f76 Specify exactly which typevars are allowed to top level 2020-01-18 23:11:17 -05:00
Zac Sweers
76b4ec9f92 Add another twist 2020-01-18 23:10:40 -05:00
Zac Sweers
3f0d763ce1 Opportunistic - suppress RedundantExplicitType 2020-01-18 23:08:44 -05:00
Zac Sweers
4e84451d6e Resolve type arguments correctly for supertype settable properties
Resolves #1046
2020-01-18 22:52:18 -05:00
Zac Sweers
a73b932429 Always emit full types
Effectively reverts https://github.com/square/moshi/pull/1041
2020-01-18 22:47:56 -05:00
Zac Sweers
04f414f600 Add ComplexGenericsInheritanceTest 2020-01-18 22:46:54 -05:00
Zac Sweers
52cf86d609 Tweak README nullSafe() example (#1073)
Resolves #1003
2020-01-15 13:29:24 -05:00
Zac Sweers
4fbf89cd49 Fix mask count in proguard rule gen (#1075)
* Fix mask count in proguard rule generation

Signed,
Person that always forgets how to do modulo counting

* Update tests
2020-01-15 02:42:52 -05:00
Zac Sweers
9a10976aab Minor processor cleanups (#1070)
* Share cachedClassInspector across all rounds

* Don't proceed if previous round failed
2020-01-14 16:28:35 -05:00
Zac Sweers
89b166f9cd Use actual canonical name rather than implicit toString() (#1069) 2020-01-14 15:50:14 -05:00
Zac Sweers
e45d9e04bd Add missing semicolons (#1068) 2020-01-14 15:26:40 -05:00
Zac Sweers
debb7d3160 Generate proguard rules for code gen on demand (#1067)
* Extract target constructor signature into TargetConstructor.kt

We'll need this to know what the runtime types are for proguard rules

* Add ProguardConfig

* Wire in proguard config

* Write proguard configs out with adapters

* Add full tests

* Now remove the rules!

* Ignore on inline classes for now

* Pass adapter constructor params correctly
2020-01-14 14:59:10 -05:00
Zac Sweers
f891c8187b Check types parameter size in init (#1063)
* Add types size check in code gen

Resolves #932

* Add more useful message for mismatched generics lookup

* Add tests

* Style
2020-01-14 01:50:53 -05:00
Nicklas Ansman Giertz
cc4b5b3ad2 Improve the way Json.name is fetched for codegen (#1059)
* Improve the way Json.name is fetched for codegen

* Remove the comment for jsonName

* Add a test for json names with quotation marks

* Fix the broken tests
2020-01-10 21:32:23 -05:00
Zac Sweers
365e955381 Update to KotlinPoet 1.5.0 (#1062) 2020-01-10 21:05:21 -05:00
Zac Sweers
40a829ef18 Don't linebreak keys with spaces (#1053)
* Don't linebreak keys with spaces

Resolves #1052

* Update kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/AdapterGenerator.kt
2019-12-12 02:53:25 -05:00
Zac Sweers
c3a1ba711c Omit unnecessary generic type from standard constructor call (#1041)
These were redundant. Was `return Foo<T>(...)` and is now `return Foo(...)`
2019-12-05 22:37:38 +01:00
Zac Sweers
14cb9e4bbb Add LocalVariableName to common suppressions (#1040)
* Add LocalVariableName to common suppressions

NameAllocator will add underscores to names, which kotlin doesn't like for stylistic reasons

* Simplify structure a bit

Keeping track of template counts is error prone and would have failed only at runtime
2019-12-05 22:37:26 +01:00
Zac Sweers
791ff3211e Update to Kotlin compile testing 1.2.4 (#1014)
* Update to Kotlin compile testing 1.2.4

This allows us to un-toe-hold a test from before

* Fix trailing newline

* Add class-based alternative

* Use updated test API

* Update to 1.2.5

* Update to Kotlin 1.3.60
2019-12-05 22:37:02 +01:00
Zac Sweers
32c5d48ab1 Strip type annotations from TypeRenderer and asTypeBlock() (#1039)
Resolves #1033
2019-12-05 22:35:57 +01:00
Zac Sweers
0dfea712bb Always check for DefaultConstructorMarker class (#1038)
Reported by a Googler - We currently gate the lookup of the class on the presence of `Metadata`. However, `Metadata` might be justifiably stripped by Proguard/R8, even though `DefaultConstructorMarker` might still be present. This means Moshi's defaults invocation is likely broken on (at least) R8 builds without this.

Workaround until next release is to keep Metadata annotations
2019-11-24 22:52:59 -05:00
Jesse Wilson
b287596c60 [maven-release-plugin] prepare for next development iteration 2019-11-17 09:53:53 -05:00
Jesse Wilson
89a254d644 [maven-release-plugin] prepare release moshi-parent-1.9.2 2019-11-17 09:53:46 -05:00
Jesse Wilson
5e52af3645 Changelog for 1.9.2. 2019-11-17 09:51:12 -05:00
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