From c330285fd0853030ff22dcff4827679b9919c664 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 16 Aug 2017 02:32:00 +0300 Subject: [PATCH] Parcelable: Use innerClassNameFactory to figure out the internal name of the Creator class (KT-19680) KAPT3 class builder mode in 1.1.4 replaces '$' (inner class name separators) with '/' by providing special innerClassNameFactory. We should use it to be compatible with kapt. --- .../AndroidDaggerProject/app/build.gradle | 4 ++++ .../com/example/dagger/kotlin/ui/HomeActivity.kt | 14 ++++++++++++++ .../android/parcel/ParcelableCodegenExtension.kt | 7 +++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle index 4aaf97e3861..fc53e05fc75 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle @@ -50,4 +50,8 @@ dependencies { kapt { generateStubs = true +} + +androidExtensions { + experimental = true } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/src/main/java/com/example/dagger/kotlin/ui/HomeActivity.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/src/main/java/com/example/dagger/kotlin/ui/HomeActivity.kt index 7789641b694..8f1bed9459a 100755 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/src/main/java/com/example/dagger/kotlin/ui/HomeActivity.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/src/main/java/com/example/dagger/kotlin/ui/HomeActivity.kt @@ -15,11 +15,15 @@ */ package com.example.dagger.kotlin.ui +import android.content.Context +import android.content.Intent import android.location.LocationManager import android.os.Bundle +import android.os.Parcelable import com.example.dagger.kotlin.DemoActivity import com.example.dagger.kotlin.DemoApplication import com.example.dagger.kotlin.R +import kotlinx.android.parcel.Parcelize import kotlinx.android.synthetic.main.activity_main.locationInfo import javax.inject.Inject @@ -36,3 +40,13 @@ class HomeActivity : DemoActivity() { locationInfo.text = "Injected LocationManager:\n$locationManager" } } + +class Foo { + @Inject + lateinit var c: Context + + private lateinit var bars: List + + @Parcelize + data class Bar(val intent: Intent): Parcelable +} \ No newline at end of file diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt index 6bb4428f9bd..0e7f1e6cca3 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableCodegenExtension.kt @@ -210,7 +210,9 @@ open class ParcelableCodegenExtension : ExpressionCodegenExtension { private fun writeCreatorAccessField(codegen: ImplementationBodyCodegen, parcelableClass: ClassDescriptor) { val parcelableAsmType = codegen.typeMapper.mapType(parcelableClass.defaultType) - val creatorAsmType = Type.getObjectType(parcelableAsmType.internalName + "\$Creator") + val creatorAsmType = Type.getObjectType( + codegen.typeMapper.typeMappingConfiguration.innerClassNameFactory(parcelableAsmType.internalName, "Creator")) + codegen.v.newField(JvmDeclarationOrigin.NO_ORIGIN, ACC_STATIC or ACC_PUBLIC or ACC_FINAL, "CREATOR", creatorAsmType.descriptor, null, null) } @@ -224,7 +226,8 @@ open class ParcelableCodegenExtension : ExpressionCodegenExtension { properties: List> ) { val containerAsmType = codegen.typeMapper.mapType(parcelableClass.defaultType) - val creatorAsmType = Type.getObjectType(containerAsmType.internalName + "\$Creator") + val creatorAsmType = Type.getObjectType( + codegen.typeMapper.typeMappingConfiguration.innerClassNameFactory(containerAsmType.internalName, "Creator")) val creatorClass = ClassDescriptorImpl( parcelableClass.containingDeclaration, Name.identifier("Creator"), Modality.FINAL, ClassKind.CLASS, emptyList(),