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")