From 86c8671d64b347b0517fd36c4cd05eb96b74960e Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Tue, 25 Sep 2018 00:58:52 -0400 Subject: [PATCH] Completely remove companion object jsonAdapter extension function gen It's broken currently (see #611), and after talking with @swankjesse decided it's best to just nix this API --- .../moshi/kotlin/codegen/AdapterGenerator.kt | 40 ++----------------- .../codegen/JsonClassCodegenProcessor.kt | 2 +- .../moshi/kotlin/codegen/TargetType.kt | 10 +---- .../kotlin/codgen/GeneratedAdaptersTest.kt | 16 -------- 4 files changed, 6 insertions(+), 62 deletions(-) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt index f276921..2db1c1d 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt @@ -17,14 +17,12 @@ package com.squareup.moshi.kotlin.codegen import com.squareup.kotlinpoet.ARRAY import com.squareup.kotlinpoet.AnnotationSpec -import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.FileSpec import com.squareup.kotlinpoet.FunSpec import com.squareup.kotlinpoet.KModifier import com.squareup.kotlinpoet.NameAllocator import com.squareup.kotlinpoet.ParameterSpec -import com.squareup.kotlinpoet.ParameterizedTypeName import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy import com.squareup.kotlinpoet.PropertySpec import com.squareup.kotlinpoet.TypeSpec @@ -40,7 +38,6 @@ import me.eugeniomarletti.kotlin.metadata.isDataClass import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Visibility import me.eugeniomarletti.kotlin.metadata.visibility import java.lang.reflect.Type -import javax.annotation.processing.Messager import javax.lang.model.element.TypeElement /** Generates a JSON adapter for a target type. */ @@ -50,7 +47,6 @@ internal class AdapterGenerator( ) { private val className = target.name private val isDataClass = target.proto.isDataClass - private val companionObjectName = target.companionObjectName private val visibility = target.proto.visibility!! private val typeVariables = target.typeVariables @@ -87,21 +83,18 @@ internal class AdapterGenerator( JsonReader.Options::class.asTypeName()) .build() - fun generateFile(messager: Messager, generatedOption: TypeElement?): FileSpec { + fun generateFile(generatedOption: TypeElement?): FileSpec { for (property in propertyList) { property.allocateNames(nameAllocator) } val result = FileSpec.builder(className.packageName, adapterName) result.addComment("Code generated by moshi-kotlin-codegen. Do not edit.") - companionObjectName?.let { - result.addFunction(generateJsonAdapterFun(it)) - } - result.addType(generateType(messager, generatedOption)) + result.addType(generateType(generatedOption)) return result.build() } - private fun generateType(messager: Messager, generatedOption: TypeElement?): TypeSpec { + private fun generateType(generatedOption: TypeElement?): TypeSpec { val result = TypeSpec.classBuilder(adapterName) generatedOption?.let { @@ -311,31 +304,4 @@ internal class AdapterGenerator( return result.build() } - - private fun generateJsonAdapterFun(name: String): FunSpec { - val rawType = when (originalTypeName) { - is TypeVariableName -> throw IllegalArgumentException("Cannot get raw type of TypeVariable!") - is ParameterizedTypeName -> originalTypeName.rawType - else -> originalTypeName as ClassName - } - - val result = FunSpec.builder("jsonAdapter") - .receiver(rawType.nestedClass(name)) - .returns(jsonAdapterTypeName) - .addParameter(moshiParam) - - if (visibility == Visibility.INTERNAL) { - result.addModifiers(KModifier.INTERNAL) - } - - if (typeVariables.isNotEmpty()) { - result.addParameter(typesParam) - result.addTypeVariables(typeVariables) - result.addStatement("return %N(%N, %N)", adapterName, moshiParam, typesParam) - } else { - result.addStatement("return %N(%N)", adapterName, moshiParam) - } - - return result.build() - } } diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt index c62f092..7f622d6 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt @@ -125,7 +125,7 @@ class JsonClassCodegenProcessor : KotlinAbstractProcessor(), KotlinMetadataUtils } private fun AdapterGenerator.generateAndWrite(generatedOption: TypeElement?) { - val fileSpec = generateFile(messager, generatedOption) + val fileSpec = generateFile(generatedOption) val adapterName = fileSpec.members.filterIsInstance().first().name!! val outputDir = generatedDir ?: mavenGeneratedDir(adapterName) fileSpec.writeTo(outputDir) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt index cd521b4..6d93fd9 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt @@ -53,8 +53,7 @@ internal data class TargetType( val element: TypeElement, val constructor: TargetConstructor, val properties: Map, - val typeVariables: List, - val companionObjectName: String? + val typeVariables: List ) { val name = element.className @@ -129,12 +128,7 @@ internal data class TargetType( properties.putIfAbsent(name, property) } } - val companionObjectName = if (proto.hasCompanionObjectName()) { - typeMetadata.data.nameResolver.getQualifiedClassName(proto.companionObjectName) - } else { - null - } - return TargetType(proto, element, constructor, properties, typeVariables, companionObjectName) + return TargetType(proto, element, constructor, properties, typeVariables) } /** Returns the properties declared by `typeElement`. */ diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt index 793cdb9..3f75439 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt @@ -824,22 +824,6 @@ class GeneratedAdaptersTest { @JsonClass(generateAdapter = true) class DuplicateValue(var a: Int = -1, var b: Int = -2) - @Test fun companionObjectsTests() { - val moshi = Moshi.Builder().build() - val standardAdapter = CompanionObjectClass.jsonAdapter(moshi) - val customNameAdapter = NamedCompanionObjectClass.jsonAdapter(moshi) - } - - @JsonClass(generateAdapter = true) - data class CompanionObjectClass(val foo: String) { - companion object - } - - @JsonClass(generateAdapter = true) - data class NamedCompanionObjectClass(val foo: String) { - companion object CustomCompanionObject - } - @Test fun extensionProperty() { val moshi = Moshi.Builder().build() val jsonAdapter = moshi.adapter(ExtensionProperty::class.java)