diff --git a/build.gradle.kts b/build.gradle.kts index c611699287e..8db42d12a5b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -242,6 +242,7 @@ extra["compilerModules"] = arrayOf( ":compiler:ir.psi2ir", ":compiler:ir.backend.common", ":compiler:backend.jvm", + ":compiler:backend.jvm:backend.jvm.entrypoint", ":compiler:backend.js", ":compiler:backend.wasm", ":compiler:ir.serialization.common", diff --git a/compiler/cli/build.gradle.kts b/compiler/cli/build.gradle.kts index cbe53c0babf..e9860cdf637 100644 --- a/compiler/cli/build.gradle.kts +++ b/compiler/cli/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { compile(project(":compiler:backend-common")) compile(project(":compiler:backend")) compile(project(":compiler:backend.jvm")) + implementation(project(":compiler:backend.jvm:backend.jvm.entrypoint")) compile(project(":compiler:ir.backend.common")) compile(project(":compiler:light-classes")) compile(project(":compiler:serialization")) diff --git a/compiler/fir/entrypoint/build.gradle.kts b/compiler/fir/entrypoint/build.gradle.kts index b42e5b56867..7ee11956ab9 100644 --- a/compiler/fir/entrypoint/build.gradle.kts +++ b/compiler/fir/entrypoint/build.gradle.kts @@ -12,6 +12,9 @@ dependencies { api(project(":compiler:fir:fir2ir")) api(project(":compiler:fir:checkers")) + // TODO: do not use GeneratorExtensions in `FirAnalyzerFacade.convertToIr`, and make this an 'implementation' dependency. + api(project(":compiler:ir.psi2ir")) + implementation(project(":compiler:fir:resolve")) implementation(project(":compiler:fir:fir2ir:jvm-backend")) implementation(project(":compiler:backend.jvm")) diff --git a/compiler/fir/fir2ir/jvm-backend/build.gradle.kts b/compiler/fir/fir2ir/jvm-backend/build.gradle.kts index f6d3f662e16..53a6239ec19 100644 --- a/compiler/fir/fir2ir/jvm-backend/build.gradle.kts +++ b/compiler/fir/fir2ir/jvm-backend/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { compileOnly(project(":compiler:ir.tree")) compileOnly(project(":compiler:backend")) compileOnly(project(":compiler:backend.jvm")) + api(project(":compiler:ir.serialization.common")) compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", rootProject = rootProject) } } diff --git a/compiler/ir/backend.jvm/build.gradle.kts b/compiler/ir/backend.jvm/build.gradle.kts index ba27156ec3f..1a1d5e670a0 100644 --- a/compiler/ir/backend.jvm/build.gradle.kts +++ b/compiler/ir/backend.jvm/build.gradle.kts @@ -7,9 +7,7 @@ dependencies { compile(project(":kotlin-annotations-jvm")) compile(project(":compiler:backend")) compile(project(":compiler:ir.tree")) - compile(project(":compiler:ir.psi2ir")) compile(project(":compiler:ir.backend.common")) - compile(project(":compiler:ir.serialization.jvm")) api(project(":compiler:backend.common.jvm")) compileOnly(project(":compiler:ir.tree.impl")) compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", "guava", rootProject = rootProject) } diff --git a/compiler/ir/backend.jvm/entrypoint/build.gradle.kts b/compiler/ir/backend.jvm/entrypoint/build.gradle.kts new file mode 100644 index 00000000000..342afe05a7d --- /dev/null +++ b/compiler/ir/backend.jvm/entrypoint/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + api(project(":compiler:ir.psi2ir")) + api(project(":compiler:backend.jvm")) + api(project(":compiler:ir.tree.impl")) + api(project(":compiler:ir.serialization.jvm")) + compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) } +} + +sourceSets { + "main" { + projectDefault() + } + "test" {} +} diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt similarity index 100% rename from compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt rename to compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt similarity index 97% rename from compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt rename to compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index 05b093700f7..4c31dd2e6eb 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 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. */ @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrFunctionFactory import org.jetbrains.kotlin.ir.linkage.IrProvider -import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration @@ -178,10 +177,6 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory /* JvmBackendContext creates new unbound symbols, have to resolve them. */ ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies() - state.mapInlineClass = { descriptor -> - context.typeMapper.mapType(context.referenceClass(descriptor).defaultType) - } - context.state.factory.registerSourceFiles(irModuleFragment.files.map(IrFile::getKtFile)) JvmLower(context).lower(irModuleFragment) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt index 6a01c177248..8b9593bf902 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.jvm.JvmClassName @@ -130,6 +131,12 @@ class JvmBackendContext( internal val continuationClassesVarsCountByType: MutableMap> = hashMapOf() + init { + state.mapInlineClass = { descriptor -> + typeMapper.mapType(referenceClass(descriptor).defaultType) + } + } + internal fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol = symbolTable.lazyWrapper.referenceClass(descriptor) diff --git a/compiler/tests-common-new/build.gradle.kts b/compiler/tests-common-new/build.gradle.kts index 52fe2b06003..94ebad7e0dc 100644 --- a/compiler/tests-common-new/build.gradle.kts +++ b/compiler/tests-common-new/build.gradle.kts @@ -9,6 +9,7 @@ dependencies { testApi(project(":compiler:fir:entrypoint")) testApi(project(":compiler:cli")) testImplementation(project(":compiler:ir.tree.impl")) + testImplementation(project(":compiler:backend.jvm:backend.jvm.entrypoint")) testImplementation(intellijCoreDep()) { includeJars("intellij-core") } testCompileOnly(project(":kotlin-reflect-api")) diff --git a/compiler/tests-compiler-utils/build.gradle.kts b/compiler/tests-compiler-utils/build.gradle.kts index b4f0990772d..396a2c9974c 100644 --- a/compiler/tests-compiler-utils/build.gradle.kts +++ b/compiler/tests-compiler-utils/build.gradle.kts @@ -23,6 +23,7 @@ dependencies { testCompile(project(":compiler:cli-js")) testCompile(project(":compiler:serialization")) testCompile(project(":compiler:fir:entrypoint")) + testCompile(project(":compiler:backend.jvm:backend.jvm.entrypoint")) testCompile(projectTests(":compiler:test-infrastructure-utils")) testCompile(project(":kotlin-preloader")) testCompile(commonDep("com.android.tools:r8")) diff --git a/idea/build.gradle.kts b/idea/build.gradle.kts index f86fdd2e425..7642bb97bc5 100644 --- a/idea/build.gradle.kts +++ b/idea/build.gradle.kts @@ -86,6 +86,7 @@ dependencies { compile(project(":kotlin-script-util")) { isTransitive = false } compile(project(":kotlin-scripting-intellij")) compile(project(":compiler:backend.jvm")) // Do not delete, for Pill + compile(project(":compiler:backend.jvm:backend.jvm.entrypoint")) compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } diff --git a/kotlin-native/backend.native/build.gradle b/kotlin-native/backend.native/build.gradle index ec2780554dd..ede4bda0893 100644 --- a/kotlin-native/backend.native/build.gradle +++ b/kotlin-native/backend.native/build.gradle @@ -177,6 +177,7 @@ dependencies { compilerCompile project(":kotlin-util-klib") compilerCompile project(":kotlin-util-klib-metadata") compilerCompile project(":compiler:ir.serialization.common") + compilerCompile project(":compiler:ir.psi2ir") use(LocalDependenciesKt) { compilerCompile(intellijCoreDep()){ artifact { diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt index 68359477038..0e2866a1706 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt +++ b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeAnnotationChecker.kt @@ -18,11 +18,11 @@ package org.jetbrains.kotlin.parcelize import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.kotlin.backend.common.serialization.findPackage import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.descriptors.containingPackage import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.parcelize.diagnostic.ErrorsParcelize import org.jetbrains.kotlin.psi.* @@ -76,8 +76,8 @@ open class ParcelizeAnnotationChecker : CallChecker { context: CallCheckerContext, isForbidden: Boolean ) { - val descriptorPackage = resolvedCall.resultingDescriptor.findPackage() - if (descriptorPackage.fqName == DEPRECATED_RUNTIME_PACKAGE) { + val descriptorPackage = resolvedCall.resultingDescriptor.containingPackage() + if (descriptorPackage == DEPRECATED_RUNTIME_PACKAGE) { val factory = if (isForbidden) ErrorsParcelize.FORBIDDEN_DEPRECATED_ANNOTATION else ErrorsParcelize.DEPRECATED_ANNOTATION context.trace.report(factory.on(annotationEntry)) } diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt index 27aa799055b..81e528c8a92 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt +++ b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.parcelize -import org.jetbrains.kotlin.backend.common.serialization.findPackage import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.FrameMap import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper @@ -18,7 +17,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.parcelize.ParcelizeAnnotationChecker.Companion.DEPRECATED_RUNTIME_PACKAGE import org.jetbrains.kotlin.parcelize.diagnostic.ErrorsParcelize import org.jetbrains.kotlin.parcelize.serializers.ParcelSerializer import org.jetbrains.kotlin.parcelize.serializers.isParcelable diff --git a/plugins/scripting/scripting-compiler/build.gradle.kts b/plugins/scripting/scripting-compiler/build.gradle.kts index ba2e9705874..38dcbbd035d 100644 --- a/plugins/scripting/scripting-compiler/build.gradle.kts +++ b/plugins/scripting/scripting-compiler/build.gradle.kts @@ -1,4 +1,3 @@ - description = "Kotlin Scripting Compiler Plugin" plugins { @@ -15,6 +14,7 @@ dependencies { compileOnly(project(":compiler:backend.js")) compileOnly(project(":core:descriptors.runtime")) compileOnly(project(":compiler:ir.tree.impl")) + compileOnly(project(":compiler:backend.jvm:backend.jvm.entrypoint")) compileOnly(project(":kotlin-reflect-api")) compile(project(":kotlin-scripting-common")) compile(project(":kotlin-scripting-js")) diff --git a/prepare/idea-plugin/build.gradle.kts b/prepare/idea-plugin/build.gradle.kts index c3e0864b4cc..7cb552afaaa 100644 --- a/prepare/idea-plugin/build.gradle.kts +++ b/prepare/idea-plugin/build.gradle.kts @@ -19,6 +19,7 @@ val projectsToShadow by extra(listOf( ":compiler:backend.common.jvm", ":compiler:backend-common", ":compiler:backend.jvm", + ":compiler:backend.jvm:backend.jvm.entrypoint", ":compiler:ir.backend.common", ":compiler:ir.serialization.jvm", ":compiler:ir.serialization.common", diff --git a/settings.gradle b/settings.gradle index 1dc71f7987c..619cf70843c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -106,6 +106,7 @@ include ":benchmarks", ":compiler:backend.js", ":compiler:backend.wasm", ":compiler:backend.jvm", + ":compiler:backend.jvm:backend.jvm.entrypoint", ":compiler:backend-common", ":compiler:backend", ":compiler:plugin-api", @@ -483,6 +484,7 @@ project(':compiler:ir.backend.common').projectDir = "$rootDir/compiler/ir/backen project(':compiler:backend.js').projectDir = "$rootDir/compiler/ir/backend.js" as File project(':compiler:backend.wasm').projectDir = "$rootDir/compiler/ir/backend.wasm" as File project(':compiler:backend.jvm').projectDir = "$rootDir/compiler/ir/backend.jvm" as File +project(':compiler:backend.jvm:backend.jvm.entrypoint').projectDir = "$rootDir/compiler/ir/backend.jvm/entrypoint" as File project(':compiler:ir.serialization.common').projectDir = "$rootDir/compiler/ir/serialization.common" as File project(':compiler:ir.serialization.jvm').projectDir = "$rootDir/compiler/ir/serialization.jvm" as File project(':compiler:ir.serialization.js').projectDir = "$rootDir/compiler/ir/serialization.js" as File