diff --git a/.gitignore b/.gitignore
index ae39c071..6bc6114c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*.iml
-.*
+.gradle
+.idea/
build/
java_pid*.hprof
local.properties
diff --git a/README.md b/README.md
index d08d85a6..8b3f31eb 100644
--- a/README.md
+++ b/README.md
@@ -76,15 +76,20 @@ We're looking forward to more platforms to support in the future. Contributions
You can find some **examples** in this repository to help you set up your generator environment.
-* [samples/generated-code](/samples/generated-code) Contains an example of an Android Library where the code is generated inside the `/scr/main/java` folder. You can use this example to see how the generated code will _look like_ (like [here](/samples/generated-code/src/main/java/com/yelp/codegen/generatecodesamples/apis/DefaultApi.kt))
+* [samples/generated-code](/samples/generated-code)* Contains an example of an Android Library where the code is generated inside the `/scr/main/java` folder. You can use this example to see how the generated code will _look like_ (like [here](/samples/generated-code/src/main/java/com/yelp/codegen/generatecodesamples/apis/DefaultApi.kt)).
-* [samples/groovy-android](/samples/groovy-android) Contains an example of an Android Library configured with a `build.gradle` file, using the classical Gradle/Groovy as scripting language.
+* [samples/groovy-android](/samples/groovy-android)* Contains an example of an Android Library configured with a `build.gradle` file, using the classical Gradle/Groovy as scripting language.
-* [samples/kotlin-android](/samples/kotlin-android) Contains an example of an Android Library configured with a `build.gradle.kts` file, using Kotlin as scripting language.
+* [samples/kotlin-android](/samples/kotlin-android)* Contains an example of an Android Library configured with a `build.gradle.kts` file, using Kotlin as scripting language.
-* [samples/kotlin-coroutines](/samples/kotlin-coroutines) Contains an example of an Android Library configured to output Kotlin Coroutines capable code.
+* [samples/kotlin-android-moshi-codegen](/samples/kotlin-android-moshi-codegen) Based on samples/kotlin-android but the configuration is using [`moshi-codegen`](https://github.com/square/moshi#codegen) for improved parsing performances and it defines proguard rules.
+
+* [samples/kotlin-coroutines](/samples/kotlin-coroutines)* Contains an example of an Android Library configured to output Kotlin Coroutines capable code.
+
+* [samples/junit-tests](/samples/junit-tests) This sample contains specs used to test edge cases and scenarios that have been reported in the issue tracker or that are worth testing. Tests are executed using [`moshi-codegen`](https://github.com/square/moshi#codegen).
+
+*: The project is using [`moshi-reflect`](https://github.com/square/moshi#reflection) to convert your Kotlin classes to and from JSON.
-* [samples/junit-tests](/samples/junit-tests) This sample contains specs used to test edge cases and scenarios that have been reported in the issue tracker or that are worth testing.
## How the generated code will look like
diff --git a/plugin/src/main/java/com/yelp/codegen/KotlinGenerator.kt b/plugin/src/main/java/com/yelp/codegen/KotlinGenerator.kt
index 75d0a78b..3f62f3d9 100644
--- a/plugin/src/main/java/com/yelp/codegen/KotlinGenerator.kt
+++ b/plugin/src/main/java/com/yelp/codegen/KotlinGenerator.kt
@@ -208,6 +208,7 @@ open class KotlinGenerator : SharedCodegen() {
// If there are any vars, we will mark them with the @Json annotation so we have to make sure to import it
if (codegenModel.vars.isNotEmpty() || codegenModel.isEnum) {
codegenModel.imports.add("com.squareup.moshi.Json")
+ codegenModel.imports.add("com.squareup.moshi.JsonClass")
}
// Add import for @XNullable annotation if there are any XNullable properties
diff --git a/plugin/src/main/resources/kotlin/data_class.mustache b/plugin/src/main/resources/kotlin/data_class.mustache
index 8cdc29ed..b94d32e8 100644
--- a/plugin/src/main/resources/kotlin/data_class.mustache
+++ b/plugin/src/main/resources/kotlin/data_class.mustache
@@ -4,7 +4,8 @@
* @property {{{name}}} {{description}}
{{/vars}}
*/
-{{#hasVars}}data {{/hasVars}}class {{classname}} {{#hasVars}}(
+{{#hasVars}}@JsonClass(generateAdapter = true)
+data {{/hasVars}}class {{classname}} {{#hasVars}}(
{{#requiredVars}}
{{>data_class_req_var}}{{^-last}},
{{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}},
@@ -17,6 +18,7 @@
* {{{description}}}
* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}}
*/
+ @JsonClass(generateAdapter = false)
enum class {{enumName}}(val value: {{complexType}}){ {{#allowableValues}}{{#enumVars}}
@Json(name = {{{value}}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}}{{/-last}}{{/enumVars}}{{/allowableValues}}
}
diff --git a/plugin/src/main/resources/kotlin/enum_class.mustache b/plugin/src/main/resources/kotlin/enum_class.mustache
index 6a49c5a4..64907f95 100644
--- a/plugin/src/main/resources/kotlin/enum_class.mustache
+++ b/plugin/src/main/resources/kotlin/enum_class.mustache
@@ -2,6 +2,7 @@
* {{{description}}}
* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}}
*/
+@JsonClass(generateAdapter = false)
enum class {{classname}}(val value: {{dataType}}){
{{#allowableValues}}{{#enumVars}} @Json(name = {{{value}}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}
{{/enumVars}}{{/allowableValues}}}
diff --git a/samples/junit-tests/.gitignore b/samples/junit-tests/.gitignore
new file mode 100644
index 00000000..d7b839b5
--- /dev/null
+++ b/samples/junit-tests/.gitignore
@@ -0,0 +1 @@
+/src/main/java
diff --git a/samples/junit-tests/build.gradle b/samples/junit-tests/build.gradle
index 01b9ddef..76b8a026 100644
--- a/samples/junit-tests/build.gradle
+++ b/samples/junit-tests/build.gradle
@@ -19,6 +19,7 @@ apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: "com.yelp.codegen.plugin"
apply plugin: "io.gitlab.arturbosch.detekt"
+apply plugin: "kotlin-kapt"
android {
compileSdkVersion = 28
@@ -43,6 +44,7 @@ dependencies {
implementation "com.squareup.retrofit2:retrofit:2.7.1"
implementation "com.squareup.retrofit2:converter-moshi:2.7.1"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.7.1"
+ kapt "com.squareup.moshi:moshi-kotlin-codegen:1.9.2"
// Date Support
implementation "com.jakewharton.threetenabp:threetenabp:1.2.2"
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/FormatResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/FormatResponses.kt
index ffb411d1..908db1cc 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/FormatResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/FormatResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import org.threeten.bp.LocalDate
import org.threeten.bp.ZonedDateTime
@@ -16,6 +17,7 @@ import org.threeten.bp.ZonedDateTime
* @property datetimeProperty
* @property enumProperty
*/
+@JsonClass(generateAdapter = true)
data class FormatResponses(
@Json(name = "date_property") @field:Json(name = "date_property") var dateProperty: LocalDate? = null,
@Json(name = "datetime_property") @field:Json(name = "datetime_property") var datetimeProperty: ZonedDateTime? = null,
@@ -25,6 +27,7 @@ data class FormatResponses(
*
* Values: VALUE1, VALUE2
*/
+ @JsonClass(generateAdapter = false)
enum class EnumPropertyEnum(val value: String) {
@Json(name = "VALUE1") VALUE1("VALUE1"),
@Json(name = "VALUE2") VALUE2("VALUE2")
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyArray.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyArray.kt
index 9ff43540..2cee1299 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyArray.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyArray.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import java.math.BigDecimal
/**
@@ -14,6 +15,7 @@ import java.math.BigDecimal
* @property numberArray
* @property stringArray
*/
+@JsonClass(generateAdapter = true)
data class PropertyArray(
@Json(name = "number_array") @field:Json(name = "number_array") var numberArray: List? = null,
@Json(name = "string_array") @field:Json(name = "string_array") var stringArray: List? = null
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyMap.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyMap.kt
index d9352b49..3fffe32f 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyMap.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/PropertyMap.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import java.math.BigDecimal
/**
@@ -15,6 +16,7 @@ import java.math.BigDecimal
* @property objectMap
* @property stringMap
*/
+@JsonClass(generateAdapter = true)
data class PropertyMap(
@Json(name = "number_map") @field:Json(name = "number_map") var numberMap: Map? = null,
@Json(name = "object_map") @field:Json(name = "object_map") var objectMap: Map? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/RequiredTypeResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/RequiredTypeResponses.kt
index da49f88d..afdfa951 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/RequiredTypeResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/RequiredTypeResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import java.math.BigDecimal
/**
@@ -17,6 +18,7 @@ import java.math.BigDecimal
* @property numberProperty
* @property stringProperty
*/
+@JsonClass(generateAdapter = true)
data class RequiredTypeResponses(
@Json(name = "boolean_property") @field:Json(name = "boolean_property") var booleanProperty: Boolean,
@Json(name = "enum_property") @field:Json(name = "enum_property") var enumProperty: RequiredTypeResponses.EnumPropertyEnum,
@@ -28,6 +30,7 @@ data class RequiredTypeResponses(
*
* Values: VALUE1, VALUE2
*/
+ @JsonClass(generateAdapter = false)
enum class EnumPropertyEnum(val value: String) {
@Json(name = "VALUE1") VALUE1("VALUE1"),
@Json(name = "VALUE2") VALUE2("VALUE2")
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/ReservedKeywords.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/ReservedKeywords.kt
index 4251ddef..2b5e00de 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/ReservedKeywords.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/ReservedKeywords.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
/**
*
@@ -17,6 +18,7 @@ import com.squareup.moshi.Json
* @property `var`
* @property `when`
*/
+@JsonClass(generateAdapter = true)
data class ReservedKeywords(
@Json(name = "class") @field:Json(name = "class") var `class`: String? = null,
@Json(name = "for") @field:Json(name = "for") var `for`: String? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TopLevelEnum.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TopLevelEnum.kt
index 4d9819e5..a5ca6d1d 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TopLevelEnum.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TopLevelEnum.kt
@@ -7,11 +7,13 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
/**
*
* Values: VALUE1,VALUE2
*/
+@JsonClass(generateAdapter = false)
enum class TopLevelEnum(val value: String) {
@Json(name = "TOP_LEVEL_VALUE1") VALUE1("TOP_LEVEL_VALUE1"),
@Json(name = "TOP_LEVEL_VALUE2") VALUE2("TOP_LEVEL_VALUE2")
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TypeResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TypeResponses.kt
index bd11fa0c..20547696 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TypeResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/TypeResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import java.math.BigDecimal
/**
@@ -16,6 +17,7 @@ import java.math.BigDecimal
* @property numberProperty
* @property stringProperty
*/
+@JsonClass(generateAdapter = true)
data class TypeResponses(
@Json(name = "boolean_property") @field:Json(name = "boolean_property") var booleanProperty: Boolean? = null,
@Json(name = "integer_property") @field:Json(name = "integer_property") var integerProperty: Int? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableFormatResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableFormatResponses.kt
index 5d6b003a..b09d5bbe 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableFormatResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableFormatResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import org.threeten.bp.LocalDate
import org.threeten.bp.ZonedDateTime
@@ -17,6 +18,7 @@ import org.threeten.bp.ZonedDateTime
* @property datetimeProperty
* @property doubleProperty
*/
+@JsonClass(generateAdapter = true)
data class XnullableFormatResponses(
@Json(name = "date_property") @field:Json(name = "date_property") @XNullable var dateProperty: LocalDate? = null,
@Json(name = "datetime_property") @field:Json(name = "datetime_property") @XNullable var datetimeProperty: ZonedDateTime? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyArray.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyArray.kt
index 0858110b..b9ca8f8b 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyArray.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyArray.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -15,6 +16,7 @@ import java.math.BigDecimal
* @property numberArray
* @property stringArray
*/
+@JsonClass(generateAdapter = true)
data class XnullablePropertyArray(
@Json(name = "number_array") @field:Json(name = "number_array") @XNullable var numberArray: List? = null,
@Json(name = "string_array") @field:Json(name = "string_array") @XNullable var stringArray: List? = null
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyMap.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyMap.kt
index 729245ff..bae00b6f 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyMap.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullablePropertyMap.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -16,6 +17,7 @@ import java.math.BigDecimal
* @property objectMap
* @property stringMap
*/
+@JsonClass(generateAdapter = true)
data class XnullablePropertyMap(
@Json(name = "number_map") @field:Json(name = "number_map") @XNullable var numberMap: Map? = null,
@Json(name = "object_map") @field:Json(name = "object_map") @XNullable var objectMap: Map? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyArray.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyArray.kt
index 5928498a..73bbbce9 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyArray.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyArray.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -15,6 +16,7 @@ import java.math.BigDecimal
* @property numberArray
* @property stringArray
*/
+@JsonClass(generateAdapter = true)
data class XnullableRequiredPropertyArray(
@Json(name = "number_array") @field:Json(name = "number_array") @XNullable var numberArray: List? = null,
@Json(name = "string_array") @field:Json(name = "string_array") @XNullable var stringArray: List? = null
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyMap.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyMap.kt
index a128e93d..f0e3ccc3 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyMap.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredPropertyMap.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -16,6 +17,7 @@ import java.math.BigDecimal
* @property objectMap
* @property stringMap
*/
+@JsonClass(generateAdapter = true)
data class XnullableRequiredPropertyMap(
@Json(name = "number_map") @field:Json(name = "number_map") @XNullable var numberMap: Map? = null,
@Json(name = "object_map") @field:Json(name = "object_map") @XNullable var objectMap: Map? = null,
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredTypeResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredTypeResponses.kt
index b5a62c72..5386889d 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredTypeResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableRequiredTypeResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -18,6 +19,7 @@ import java.math.BigDecimal
* @property numberProperty
* @property stringProperty
*/
+@JsonClass(generateAdapter = true)
data class XnullableRequiredTypeResponses(
@Json(name = "boolean_property") @field:Json(name = "boolean_property") @XNullable var booleanProperty: Boolean? = null,
@Json(name = "enum_property") @field:Json(name = "enum_property") @XNullable var enumProperty: XnullableRequiredTypeResponses.EnumPropertyEnum? = null,
@@ -29,6 +31,7 @@ data class XnullableRequiredTypeResponses(
*
* Values: VALUE1, VALUE2
*/
+ @JsonClass(generateAdapter = false)
enum class EnumPropertyEnum(val value: String) {
@Json(name = "VALUE1") VALUE1("VALUE1"),
@Json(name = "VALUE2") VALUE2("VALUE2")
diff --git a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableTypeResponses.kt b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableTypeResponses.kt
index dea572f2..27e60269 100644
--- a/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableTypeResponses.kt
+++ b/samples/junit-tests/src/main/java/com/yelp/codegen/generatecodesamples/models/XnullableTypeResponses.kt
@@ -7,6 +7,7 @@
package com.yelp.codegen.generatecodesamples.models
import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
import com.yelp.codegen.generatecodesamples.tools.XNullable
import java.math.BigDecimal
@@ -18,6 +19,7 @@ import java.math.BigDecimal
* @property numberProperty
* @property stringProperty
*/
+@JsonClass(generateAdapter = true)
data class XnullableTypeResponses(
@Json(name = "boolean_property") @field:Json(name = "boolean_property") @XNullable var booleanProperty: Boolean? = null,
@Json(name = "enum_property") @field:Json(name = "enum_property") @XNullable var enumProperty: XnullableTypeResponses.EnumPropertyEnum? = null,
@@ -29,6 +31,7 @@ data class XnullableTypeResponses(
*
* Values: VALUE1, VALUE2
*/
+ @JsonClass(generateAdapter = false)
enum class EnumPropertyEnum(val value: String) {
@Json(name = "VALUE1") VALUE1("VALUE1"),
@Json(name = "VALUE2") VALUE2("VALUE2")
diff --git a/samples/kotlin-android-moshi-codegen/.gitignore b/samples/kotlin-android-moshi-codegen/.gitignore
new file mode 100644
index 00000000..d7b839b5
--- /dev/null
+++ b/samples/kotlin-android-moshi-codegen/.gitignore
@@ -0,0 +1 @@
+/src/main/java
diff --git a/samples/kotlin-android-moshi-codegen/build.gradle.kts b/samples/kotlin-android-moshi-codegen/build.gradle.kts
new file mode 100644
index 00000000..c7a6e6f1
--- /dev/null
+++ b/samples/kotlin-android-moshi-codegen/build.gradle.kts
@@ -0,0 +1,60 @@
+plugins {
+ id("com.android.library") version "3.5.3"
+ kotlin("android") version "1.3.61"
+ id("com.yelp.codegen.plugin") version "1.3.0"
+ kotlin("kapt") version "1.3.61"
+}
+
+android {
+ compileSdkVersion(28)
+ defaultConfig {
+ minSdkVersion(21)
+ targetSdkVersion(28)
+ versionCode = 1
+ versionName = "1.0"
+ }
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = true
+ proguardFiles("moshi.pro")
+ }
+ }
+}
+
+dependencies {
+ // Kotlin
+ implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61")
+
+ // Moshi + OkHttp + Retrofit
+ implementation("com.squareup.moshi:moshi:1.9.2")
+ implementation("com.squareup.moshi:moshi-adapters:1.9.2")
+ implementation("com.squareup.moshi:moshi-kotlin:1.9.2")
+ implementation("com.squareup.okhttp3:okhttp:3.12.3")
+ implementation("com.squareup.retrofit2:retrofit:2.7.1")
+ implementation("com.squareup.retrofit2:converter-moshi:2.7.1")
+ implementation("com.squareup.retrofit2:adapter-rxjava2:2.7.1")
+ kapt("com.squareup.moshi:moshi-kotlin-codegen:1.9.2")
+
+ // Date Support
+ implementation("com.jakewharton.threetenabp:threetenabp:1.2.2")
+
+ // RxJava
+ implementation("io.reactivex.rxjava2:rxjava:2.2.17")
+ implementation("io.reactivex.rxjava2:rxandroid:2.1.1")
+}
+
+generateSwagger {
+ platform = "kotlin"
+ packageName = "com.yelp.codegen.samples"
+ specName = "sample_specs"
+ specVersion = "1.0.0"
+ inputFile = file("../sample_specs.json")
+ outputDir = file("./src/main/java/")
+ features {
+ headersToRemove = arrayOf("Accept-Language")
+ }
+}
+
+repositories {
+ mavenCentral()
+}
diff --git a/samples/kotlin-android-moshi-codegen/moshi.pro b/samples/kotlin-android-moshi-codegen/moshi.pro
new file mode 100644
index 00000000..454b3851
--- /dev/null
+++ b/samples/kotlin-android-moshi-codegen/moshi.pro
@@ -0,0 +1,65 @@
+# Original copy on:
+# * moshi: https://github.com/square/moshi/blob/moshi-parent-1.9.2/kotlin/reflect/src/main/resources/META-INF/proguard/moshi-kotlin.pro
+
+############################ moshi #####################################
+# JSR 305 annotations are for embedding nullability information.
+-dontwarn javax.annotation.**
+
+-keepclasseswithmembers class * {
+ @com.squareup.moshi.* ;
+}
+
+-keep @com.squareup.moshi.JsonQualifier interface *
+
+# Enum field names are used by the integrated EnumJsonAdapter.
+# values() is synthesized by the Kotlin compiler and is used by EnumJsonAdapter indirectly
+# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi.
+-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {
+ ;
+ **[] values();
+}
+
+# The name of @JsonClass types is used to look up the generated adapter.
+-keepnames @com.squareup.moshi.JsonClass class *
+
+# Retain generated target class's synthetic defaults constructor and keep DefaultConstructorMarker's
+# name. We will look this up reflectively to invoke the type's constructor.
+#
+# We can't _just_ keep the defaults constructor because Proguard/R8's spec doesn't allow wildcard
+# matching preceding parameters.
+-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
+-keepclassmembers @com.squareup.moshi.JsonClass @kotlin.Metadata class * {
+ synthetic (...);
+}
+
+# Retain generated JsonAdapters if annotated type is retained.
+-if @com.squareup.moshi.JsonClass class *
+-keep class <1>JsonAdapter {
+ (...);
+ ;
+}
+-if @com.squareup.moshi.JsonClass class **$*
+-keep class <1>_<2>JsonAdapter {
+ (...);
+ ;
+}
+-if @com.squareup.moshi.JsonClass class **$*$*
+-keep class <1>_<2>_<3>JsonAdapter {
+ (...);
+ ;
+}
+-if @com.squareup.moshi.JsonClass class **$*$*$*
+-keep class <1>_<2>_<3>_<4>JsonAdapter {
+ (...);
+ ;
+}
+-if @com.squareup.moshi.JsonClass class **$*$*$*$*
+-keep class <1>_<2>_<3>_<4>_<5>JsonAdapter {
+ (...);
+ ;
+}
+-if @com.squareup.moshi.JsonClass class **$*$*$*$*$*
+-keep class <1>_<2>_<3>_<4>_<5>_<6>JsonAdapter {
+ (...);
+ ;
+}
diff --git a/samples/kotlin-android-moshi-codegen/src/main/AndroidManifest.xml b/samples/kotlin-android-moshi-codegen/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..574a3c27
--- /dev/null
+++ b/samples/kotlin-android-moshi-codegen/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
diff --git a/samples/kotlin-coroutines/.gitignore b/samples/kotlin-coroutines/.gitignore
new file mode 100644
index 00000000..d7b839b5
--- /dev/null
+++ b/samples/kotlin-coroutines/.gitignore
@@ -0,0 +1 @@
+/src/main/java
diff --git a/settings.gradle.kts b/settings.gradle.kts
index c0fcffe8..42680a8e 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -18,6 +18,7 @@ pluginManagement {
include(":plugin",
":samples:junit-tests",
":samples:kotlin-android",
+ ":samples:kotlin-android-moshi-codegen",
":samples:kotlin-coroutines",
":samples:groovy-android",
":samples:generated-code")