From 259862d294560e2467db09c437f439b9a028a6bf Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 17 May 2022 15:44:02 +0300 Subject: [PATCH] [Parcelize] Reorganize module structure of Parcelize plugin Also mark parcelize as compatible with K2 --- .../api/fir/sessions/LLFirSessionFactory.kt | 3 ++ .../parcelize-compiler/build.gradle.kts | 40 ++++++------------- .../parcelize.backend/build.gradle.kts | 30 ++++++++++++++ ...eClinitClassBuilderInterceptorExtension.kt | 15 +------ .../parcelize/ParcelizeCodegenExtension.kt | 15 +------ .../ParcelizeFirIrGeneratorExtension.kt | 0 .../ParcelizeIrGeneratorExtension.kt | 2 +- .../kotlin/parcelize/ir/AndroidIrBuilder.kt | 2 +- .../kotlin/parcelize/ir/AndroidSymbols.kt | 2 +- .../parcelize/ir/IrParcelSerializerFactory.kt | 2 +- .../parcelize/ir/IrParcelSerializers.kt | 5 ++- .../kotlin/parcelize/ir/IrParcelerScope.kt | 2 +- .../parcelize/ir/ParcelizeFirIrTransformer.kt | 0 .../parcelize/ir/ParcelizeIrTransformer.kt | 2 +- .../ir/ParcelizeIrTransformerBase.kt | 2 +- .../jetbrains/kotlin/parcelize/ir/irUtils.kt | 2 +- .../parcelize.cli/build.gradle.kts | 27 +++++++++++++ ....kotlin.compiler.plugin.ComponentRegistrar | 0 .../parcelize/ParcelizeComponentRegistrar.kt | 7 +++- .../parcelize.common/build.gradle.kts | 20 ++++++++++ .../kotlin/parcelize/ParcelizeNames.kt | 2 +- .../parcelize.k1/build.gradle.kts | 25 ++++++++++++ .../parcelize/ParcelizeAnnotationChecker.kt | 0 .../parcelize/ParcelizeDeclarationChecker.kt | 0 .../parcelize/ParcelizeResolveExtension.kt | 12 ++++++ .../DefaultErrorMessagesParcelize.kt | 0 .../parcelize/diagnostic/ErrorsParcelize.java | 0 .../parcelize/serializers/ParcelSerializer.kt | 34 +--------------- .../serializers/ParcelSerializers.kt | 25 ++++-------- .../serializers/ParcelizeExtensionBase.kt | 2 +- .../kotlin/parcelize/serializers/TypeUtils.kt | 27 +++++++++++++ .../build.gradle.kts | 8 +--- .../fir/FirParcelizeCheckersExtension.kt | 0 .../fir/FirParcelizeDeclarationGenerator.kt | 0 .../fir/FirParcelizeExtensionRegistrar.kt | 0 .../parcelize/fir/FirParcelizePluginKey.kt | 0 .../FirParcelizeAnnotationChecker.kt | 0 .../diagnostics/FirParcelizeClassChecker.kt | 0 .../FirParcelizeConstructorChecker.kt | 0 .../FirParcelizeFunctionChecker.kt | 0 .../FirParcelizePropertyChecker.kt | 0 .../KtDefaultErrorMessagesParcelize.kt | 0 .../fir/diagnostics/KtErrorsParcelize.kt | 0 prepare/compiler/build.gradle.kts | 1 - settings.gradle | 6 ++- 45 files changed, 193 insertions(+), 127 deletions(-) create mode 100644 plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt (90%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt (96%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ParcelizeFirIrGeneratorExtension.kt (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt (93%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt (98%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt (99%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt (99%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt (99%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt (97%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt (99%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt (99%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.backend}/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt (99%) create mode 100644 plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts rename plugins/parcelize/parcelize-compiler/{ => parcelize.cli}/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.cli}/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt (94%) create mode 100644 plugins/parcelize/parcelize-compiler/parcelize.common/build.gradle.kts rename plugins/parcelize/parcelize-compiler/{ => parcelize.common}/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt (98%) create mode 100644 plugins/parcelize/parcelize-compiler/parcelize.k1/build.gradle.kts rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt (94%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/diagnostic/DefaultErrorMessagesParcelize.kt (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/diagnostic/ErrorsParcelize.java (100%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt (93%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt (97%) rename plugins/parcelize/parcelize-compiler/{ => parcelize.k1}/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt (97%) create mode 100644 plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/TypeUtils.kt rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/build.gradle.kts (78%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeCheckersExtension.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeExtensionRegistrar.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeAnnotationChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeClassChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeConstructorChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeFunctionChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtDefaultErrorMessagesParcelize.kt (100%) rename plugins/parcelize/parcelize-compiler/{parcelize-fir => parcelize.k2}/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtErrorsParcelize.kt (100%) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt index 82ff0d5516a..ddd034f8ef5 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt @@ -25,6 +25,8 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.analysis.checkersComponent +import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers import org.jetbrains.kotlin.fir.backend.jvm.FirJvmTypeMapper import org.jetbrains.kotlin.fir.extensions.* import org.jetbrains.kotlin.fir.resolve.providers.FirDependenciesSymbolProvider @@ -135,6 +137,7 @@ internal object LLFirSessionFactory { register(FirJvmTypeMapper::class, FirJvmTypeMapper(this)) configureSession?.invoke(this) + extensionService.additionalCheckers.forEach(session.checkersComponent::register) } } diff --git a/plugins/parcelize/parcelize-compiler/build.gradle.kts b/plugins/parcelize/parcelize-compiler/build.gradle.kts index 80a9c5c9ac3..3007524a9f3 100644 --- a/plugins/parcelize/parcelize-compiler/build.gradle.kts +++ b/plugins/parcelize/parcelize-compiler/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.ideaExt.idea - description = "Parcelize compiler plugin" plugins { @@ -13,21 +11,18 @@ val layoutLib by configurations.creating val layoutLibApi by configurations.creating dependencies { - testApi(intellijCore()) - - compileOnly(project(":compiler:util")) - compileOnly(project(":compiler:plugin-api")) - compileOnly(project(":compiler:frontend")) - compileOnly(project(":compiler:frontend.java")) - compileOnly(project(":compiler:backend")) - compileOnly(project(":compiler:ir.backend.common")) - compileOnly(project(":compiler:backend.jvm")) - compileOnly(project(":compiler:ir.tree.impl")) - compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) + embedded(project(":plugins:parcelize:parcelize-compiler:parcelize.common")) { isTransitive = false } + embedded(project(":plugins:parcelize:parcelize-compiler:parcelize.k1")) { isTransitive = false } + embedded(project(":plugins:parcelize:parcelize-compiler:parcelize.k2")) { isTransitive = false } + embedded(project(":plugins:parcelize:parcelize-compiler:parcelize.backend")) { isTransitive = false } + embedded(project(":plugins:parcelize:parcelize-compiler:parcelize.cli")) { isTransitive = false } testApiJUnit5() + testApi(intellijCore()) + + testApi(project(":plugins:parcelize:parcelize-compiler:parcelize.cli")) + testApi(project(":compiler:util")) testApi(project(":compiler:backend")) testApi(project(":compiler:ir.backend.common")) @@ -45,7 +40,6 @@ dependencies { testApi(project(":compiler:fir:checkers")) testApi(project(":compiler:fir:checkers:checkers.jvm")) testApi(project(":compiler:fir:checkers:checkers.js")) - testApi(project(":plugins:parcelize:parcelize-compiler:parcelize-fir")) testRuntimeOnly(project(":compiler:fir:fir-serialization")) testCompileOnly(project(":kotlin-reflect-api")) @@ -66,27 +60,17 @@ dependencies { layoutLibApi("com.android.tools.layoutlib:layoutlib-api:26.5.0") { isTransitive = false } } -val generationRoot = projectDir.resolve("tests-gen") - sourceSets { - "main" { projectDefault() } + "main" { none() } "test" { projectDefault() - this.java.srcDir(generationRoot.name) - } -} - -if (kotlinBuildProperties.isInJpsBuildIdeaSync) { - apply(plugin = "idea") - idea { - this.module.generatedSourceDirs.add(generationRoot) + generatedTestDir() } } runtimeJar() -javadocJar() sourcesJar() - +javadocJar() testsJar() projectTest(jUnitMode = JUnitMode.JUnit5) { diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts new file mode 100644 index 00000000000..b3b140e76db --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/build.gradle.kts @@ -0,0 +1,30 @@ +description = "Parcelize compiler plugin (Backend)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(project(":plugins:parcelize:parcelize-compiler:parcelize.common")) + implementation(project(":plugins:parcelize:parcelize-compiler:parcelize.k1")) + implementation(project(":plugins:parcelize:parcelize-compiler:parcelize.k2")) + + compileOnly(project(":compiler:backend")) + compileOnly(project(":compiler:ir.backend.common")) + compileOnly(project(":compiler:backend.jvm")) + compileOnly(project(":compiler:ir.tree.impl")) + compileOnly(project(":compiler:fir:tree")) + compileOnly(project(":compiler:fir:fir2ir")) + compileOnly(intellijCore()) + compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt similarity index 90% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt index 9f88df0de00..49a8e03bdfc 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeClinitClassBuilderInterceptorExtension.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.parcelize diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt similarity index 96% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt index d5fe2682af6..90b4bbdffd0 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeCodegenExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -12,12 +12,10 @@ import org.jetbrains.kotlin.codegen.FunctionGenerationStrategy.CodegenBased import org.jetbrains.kotlin.codegen.context.ClassContext import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.parcelize.ParcelizeNames.NEW_ARRAY_NAME -import org.jetbrains.kotlin.parcelize.ParcelizeNames.TYPE_PARCELER_FQ_NAMES import org.jetbrains.kotlin.parcelize.ParcelizeResolveExtension.Companion.createMethod import org.jetbrains.kotlin.parcelize.ParcelizeSyntheticComponent.ComponentKind.* import org.jetbrains.kotlin.parcelize.serializers.* @@ -426,14 +424,3 @@ open class ParcelizeCodegenExtension : ParcelizeExtensionBase, ExpressionCodegen .firstOrNull() } } - -internal fun getTypeParcelers(annotations: Annotations): List { - val serializers = mutableListOf() - - for (annotation in annotations.filter { it.fqName in TYPE_PARCELER_FQ_NAMES }) { - val (mappedType, parcelerType) = annotation.type.arguments.takeIf { it.size == 2 } ?: continue - serializers += TypeParcelerMapping(mappedType.type, parcelerType.type) - } - - return serializers -} diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/ParcelizeFirIrGeneratorExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeFirIrGeneratorExtension.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/ParcelizeFirIrGeneratorExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeFirIrGeneratorExtension.kt diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt similarity index 93% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt index 7919b57d669..3cd1d417988 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ParcelizeIrGeneratorExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt similarity index 98% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt index cd9064c0204..3c92ad5bf7b 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidIrBuilder.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.parcelize.ir diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt index f1385c73d6d..7799e6e96d7 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/AndroidSymbols.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.parcelize.ir diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt index cd28d880668..652a96a01f4 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializerFactory.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt index b783c7ba8d6..ef4498a37e2 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelSerializers.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -36,7 +36,8 @@ fun AndroidIrBuilder.writeParcelWith( } // Creates a serializer from a pair of parcel methods of the form reader()T and writer(T)V. -class IrSimpleParcelSerializer(private val reader: IrSimpleFunctionSymbol, private val writer: IrSimpleFunctionSymbol) : IrParcelSerializer { +class IrSimpleParcelSerializer(private val reader: IrSimpleFunctionSymbol, private val writer: IrSimpleFunctionSymbol) : + IrParcelSerializer { override fun AndroidIrBuilder.readParcel(parcel: IrValueDeclaration): IrExpression { return irCall(reader).apply { dispatchReceiver = irGet(parcel) } } diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt similarity index 97% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt index 43fabefacfd..cda6cefcb32 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/IrParcelerScope.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeFirIrTransformer.kt diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt index d271690bd8c..02d860f8905 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt index 123e82fb242..41d4e1a4b1c 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformerBase.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt similarity index 99% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt rename to plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt index 2164a655823..9f579818f73 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/irUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts new file mode 100644 index 00000000000..d1e5c4ca1dd --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts @@ -0,0 +1,27 @@ +description = "Parcelize compiler plugin (CLI)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + api(project(":plugins:parcelize:parcelize-compiler:parcelize.common")) + api(project(":plugins:parcelize:parcelize-compiler:parcelize.k1")) + api(project(":plugins:parcelize:parcelize-compiler:parcelize.k2")) + api(project(":plugins:parcelize:parcelize-compiler:parcelize.backend")) + + compileOnly(project(":compiler:plugin-api")) + compileOnly(project(":compiler:backend")) + compileOnly(project(":compiler:ir.backend.common")) + compileOnly(intellijCore()) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/parcelize/parcelize-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar similarity index 100% rename from plugins/parcelize/parcelize-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar rename to plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt b/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt similarity index 94% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt rename to plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt index 7a0a8eb018c..240e991e3ea 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -34,6 +34,9 @@ class ParcelizeComponentRegistrar : ComponentRegistrar { override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) { registerParcelizeComponents(project) } + + override val supportsK2: Boolean + get() = true } class ParcelizeDeclarationCheckerComponentContainerContributor : StorageComponentContainerContributor { @@ -47,4 +50,4 @@ class ParcelizeDeclarationCheckerComponentContainerContributor : StorageComponen container.useInstance(ParcelizeAnnotationChecker()) } } -} \ No newline at end of file +} diff --git a/plugins/parcelize/parcelize-compiler/parcelize.common/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.common/build.gradle.kts new file mode 100644 index 00000000000..ee44a05e66e --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/parcelize.common/build.gradle.kts @@ -0,0 +1,20 @@ +description = "Parcelize compiler plugin (Common)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + compileOnly(project(":compiler:util")) + compileOnly(project(":core:compiler.common")) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt b/plugins/parcelize/parcelize-compiler/parcelize.common/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt similarity index 98% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt rename to plugins/parcelize/parcelize-compiler/parcelize.common/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt index ba887ce6346..1f6a41e7252 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.common/src/org/jetbrains/kotlin/parcelize/ParcelizeNames.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k1/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.k1/build.gradle.kts new file mode 100644 index 00000000000..92f1568a07b --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/build.gradle.kts @@ -0,0 +1,25 @@ +description = "Parcelize compiler plugin (Backend)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(project(":plugins:parcelize:parcelize-compiler:parcelize.common")) + + compileOnly(project(":compiler:util")) + compileOnly(project(":compiler:frontend")) + compileOnly(project(":compiler:frontend.java")) + compileOnly(project(":compiler:backend")) // for KotlinTypeMapper + compileOnly(intellijCore()) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt similarity index 94% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt index 197180e98c4..6f99367f7a3 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.parcelize.ParcelizeNames.PARCEL_ID import org.jetbrains.kotlin.parcelize.ParcelizeNames.WRITE_TO_PARCEL_NAME import org.jetbrains.kotlin.parcelize.ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS import org.jetbrains.kotlin.parcelize.ParcelizeSyntheticComponent.ComponentKind.WRITE_TO_PARCEL +import org.jetbrains.kotlin.parcelize.serializers.TypeParcelerMapping import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.* @@ -209,3 +210,14 @@ fun Annotated.hasAnyAnnotation(fqNames: List): Boolean { return false } + +fun getTypeParcelers(annotations: Annotations): List { + val serializers = mutableListOf() + + for (annotation in annotations.filter { it.fqName in ParcelizeNames.TYPE_PARCELER_FQ_NAMES }) { + val (mappedType, parcelerType) = annotation.type.arguments.takeIf { it.size == 2 } ?: continue + serializers += TypeParcelerMapping(mappedType.type, parcelerType.type) + } + + return serializers +} diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/diagnostic/DefaultErrorMessagesParcelize.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/diagnostic/DefaultErrorMessagesParcelize.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/diagnostic/DefaultErrorMessagesParcelize.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/diagnostic/DefaultErrorMessagesParcelize.kt diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/diagnostic/ErrorsParcelize.java b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/diagnostic/ErrorsParcelize.java similarity index 100% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/diagnostic/ErrorsParcelize.java rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/diagnostic/ErrorsParcelize.java diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt similarity index 93% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt index 2051e00a730..822bac538a3 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializer.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.parcelize.serializers @@ -26,18 +15,15 @@ import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.parcelize.ParcelizeNames.PARCELABLE_FQN import org.jetbrains.kotlin.parcelize.ParcelizeNames.RAW_VALUE_ANNOTATION_FQ_NAMES import org.jetbrains.kotlin.parcelize.findAnyAnnotation import org.jetbrains.kotlin.parcelize.hasAnyAnnotation import org.jetbrains.kotlin.parcelize.isParcelize import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.source.PsiSourceElement import org.jetbrains.kotlin.synthetic.isVisibleOutside import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.builtIns import org.jetbrains.org.objectweb.asm.Type @@ -45,8 +31,6 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import java.util.* import java.util.concurrent.ConcurrentHashMap -internal typealias TypeParcelerMapping = Pair - interface ParcelSerializer { val asmType: Type @@ -448,17 +432,3 @@ interface ParcelSerializer { } } } - -internal fun KotlinType.isParcelable() = matchesFqNameWithSupertypes(PARCELABLE_FQN.asString()) - -private fun KotlinType.matchesFqName(fqName: String): Boolean { - return this.constructor.declarationDescriptor?.fqNameSafe?.asString() == fqName -} - -private fun KotlinType.matchesFqNameWithSupertypes(fqName: String): Boolean { - if (this.matchesFqName(fqName)) { - return true - } - - return TypeUtils.getAllSupertypes(this).any { it.matchesFqName(fqName) } -} diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt similarity index 97% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt index e09554de787..0734fdef8ba 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelSerializers.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.parcelize.serializers @@ -29,8 +18,8 @@ import org.jetbrains.org.objectweb.asm.Label import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter -internal val PARCEL_TYPE = Type.getObjectType("android/os/Parcel") -internal val PARCELER_TYPE = Type.getObjectType("kotlinx/parcelize/Parceler") +val PARCEL_TYPE = Type.getObjectType("android/os/Parcel") +val PARCELER_TYPE = Type.getObjectType("kotlinx/parcelize/Parceler") internal class GenericParcelSerializer(override val asmType: Type) : ParcelSerializer { override fun writeValue(v: InstructionAdapter) { @@ -482,7 +471,7 @@ internal class ObjectParcelSerializer( } } -internal class ZeroParameterClassSerializer( +class ZeroParameterClassSerializer( override val asmType: Type, type: KotlinType ) : ParcelSerializer { @@ -588,7 +577,7 @@ internal class GenericParcelableParcelSerializer(override val asmType: Type, pri } } -internal class NullAwareParcelSerializerWrapper(private val delegate: ParcelSerializer) : ParcelSerializer { +class NullAwareParcelSerializerWrapper(private val delegate: ParcelSerializer) : ParcelSerializer { override val asmType: Type get() = delegate.asmType @@ -845,4 +834,4 @@ internal class Method(val name: String, val signature: T) { companion object { operator fun invoke(name: String) = Method(name, null) } -} \ No newline at end of file +} diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt similarity index 97% rename from plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt index e639b11df02..9837e8a0d98 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/ParcelizeExtensionBase.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/TypeUtils.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/TypeUtils.kt new file mode 100644 index 00000000000..bca35a2a25e --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/serializers/TypeUtils.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.parcelize.serializers + +import org.jetbrains.kotlin.parcelize.ParcelizeNames +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.TypeUtils + +typealias TypeParcelerMapping = Pair + +fun KotlinType.isParcelable() = matchesFqNameWithSupertypes(ParcelizeNames.PARCELABLE_FQN.asString()) + +fun KotlinType.matchesFqNameWithSupertypes(fqName: String): Boolean { + if (this.matchesFqName(fqName)) { + return true + } + + return TypeUtils.getAllSupertypes(this).any { it.matchesFqName(fqName) } +} + +fun KotlinType.matchesFqName(fqName: String): Boolean { + return this.constructor.declarationDescriptor?.fqNameSafe?.asString() == fqName +} diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.k2/build.gradle.kts similarity index 78% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/build.gradle.kts rename to plugins/parcelize/parcelize-compiler/parcelize.k2/build.gradle.kts index 76ecbaff1c3..899786bbbe8 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize-fir/build.gradle.kts +++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/build.gradle.kts @@ -1,4 +1,4 @@ -description = "Parcelize FIR compiler plugin" +description = "Parcelize compiler plugin (Backend)" plugins { kotlin("jvm") @@ -6,9 +6,7 @@ plugins { } dependencies { - testApi(intellijCore()) - - compileOnly(project(":plugins:parcelize:parcelize-compiler")) + implementation(project(":plugins:parcelize:parcelize-compiler:parcelize.common")) compileOnly(intellijCore()) compileOnly(project(":compiler:fir:cones")) @@ -16,7 +14,6 @@ dependencies { compileOnly(project(":compiler:fir:resolve")) compileOnly(project(":compiler:fir:checkers")) compileOnly(project(":compiler:fir:checkers:checkers.jvm")) - compileOnly(project(":compiler:fir:fir2ir")) compileOnly(project(":compiler:ir.backend.common")) compileOnly(project(":compiler:ir.tree.impl")) compileOnly(project(":compiler:fir:entrypoint")) @@ -28,7 +25,6 @@ sourceSets { "test" { none() } } - runtimeJar() javadocJar() sourcesJar() diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeCheckersExtension.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeCheckersExtension.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeCheckersExtension.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeCheckersExtension.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeExtensionRegistrar.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeExtensionRegistrar.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeExtensionRegistrar.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeExtensionRegistrar.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizePluginKey.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeAnnotationChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeAnnotationChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeAnnotationChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeAnnotationChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeClassChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeClassChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeClassChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeClassChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeConstructorChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeConstructorChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeConstructorChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeConstructorChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeFunctionChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeFunctionChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeFunctionChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizeFunctionChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/FirParcelizePropertyChecker.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtDefaultErrorMessagesParcelize.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtDefaultErrorMessagesParcelize.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtDefaultErrorMessagesParcelize.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtDefaultErrorMessagesParcelize.kt diff --git a/plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtErrorsParcelize.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtErrorsParcelize.kt similarity index 100% rename from plugins/parcelize/parcelize-compiler/parcelize-fir/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtErrorsParcelize.kt rename to plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/diagnostics/KtErrorsParcelize.kt diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index d9d3155e37b..0ff78ca09cf 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -111,7 +111,6 @@ val distCompilerPluginProjects = listOf( ":kotlin-allopen-compiler-plugin", ":kotlin-android-extensions-runtime", ":plugins:parcelize:parcelize-compiler", - ":plugins:parcelize:parcelize-compiler:parcelize-fir", ":plugins:parcelize:parcelize-runtime", ":kotlin-noarg-compiler-plugin", ":kotlin-sam-with-receiver-compiler-plugin", diff --git a/settings.gradle b/settings.gradle index 210bcb2dbf7..d75b09ce21f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -339,7 +339,11 @@ include ":compiler:test-infrastructure", ":compiler:tests-common-new" include ":plugins:parcelize:parcelize-compiler", - ":plugins:parcelize:parcelize-compiler:parcelize-fir", + ":plugins:parcelize:parcelize-compiler:parcelize.common", + ":plugins:parcelize:parcelize-compiler:parcelize.k1", + ":plugins:parcelize:parcelize-compiler:parcelize.k2", + ":plugins:parcelize:parcelize-compiler:parcelize.backend", + ":plugins:parcelize:parcelize-compiler:parcelize.cli", ":plugins:parcelize:parcelize-runtime", ":kotlin-parcelize-compiler"