diff --git a/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml b/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml index db536f39d44..3e468bfc9f6 100644 --- a/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml +++ b/compiler/cli/cli-common/resources/META-INF/extensions/compiler.xml @@ -11,8 +11,8 @@ - () + useInstance(TypeAttributeTranslatorExtension.createTranslators(moduleContext.project)) for (extension in StorageComponentContainerContributor.getInstances(moduleContext.project)) { extension.registerModuleComponents(this, platform, moduleContext.module) diff --git a/compiler/resolution/build.gradle.kts b/compiler/resolution/build.gradle.kts index 6b4a495d863..f7709218475 100644 --- a/compiler/resolution/build.gradle.kts +++ b/compiler/resolution/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { api(project(":compiler:util")) api(project(":core:descriptors")) api(project(":compiler:resolution.common")) + compileOnly(intellijCore()) compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/extensions/TypeAttributeTranslatorExtension.kt b/compiler/resolution/src/org/jetbrains/kotlin/extensions/TypeAttributeTranslatorExtension.kt new file mode 100644 index 00000000000..b206a6db151 --- /dev/null +++ b/compiler/resolution/src/org/jetbrains/kotlin/extensions/TypeAttributeTranslatorExtension.kt @@ -0,0 +1,24 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.extensions + +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.types.DefaultTypeAttributeTranslator +import org.jetbrains.kotlin.types.TypeAttributeTranslator +import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslators + +interface TypeAttributeTranslatorExtension : TypeAttributeTranslator { + companion object : ProjectExtensionDescriptor( + "org.jetbrains.kotlin.extensions.typeAttributeTranslatorExtension", + TypeAttributeTranslatorExtension::class.java + ) { + val Default = TypeAttributeTranslators(listOf(DefaultTypeAttributeTranslator)) + + fun createTranslators(project: Project): TypeAttributeTranslators { + return TypeAttributeTranslators(getInstances(project) + DefaultTypeAttributeTranslator) + } + } +} \ No newline at end of file diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 299d30339dc..a6ed4894b86 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.extensions.TypeAttributeTranslatorExtension import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement @@ -891,7 +892,7 @@ class DescriptorSerializer private constructor( else createTopLevel(extension) val plugins = project?.let { DescriptorSerializerPlugin.getInstances(it) }.orEmpty() - val typeAttributeTranslators = project?.let { TypeAttributeTranslators(project) } + val typeAttributeTranslators = project?.let { TypeAttributeTranslatorExtension.createTranslators(it) } // Calculate type parameter ids for the outer class beforehand, as it would've had happened if we were always // serializing outer classes before nested classes. diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index 847d8b12b33..e504f8c50fd 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -50,7 +50,7 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.DefaultTypeAttributeTranslator import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker -import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslatorsForInjection +import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslators // This class is needed only for easier injection: exact types of needed components are specified in the constructor here. // Otherwise injector generator is not smart enough to deduce, for example, which package fragment provider DeserializationComponents needs @@ -66,7 +66,7 @@ class DeserializationComponentsForJava( lookupTracker: LookupTracker, contractDeserializer: ContractDeserializer, kotlinTypeChecker: NewKotlinTypeChecker, - typeAttributeTranslators: TypeAttributeTranslatorsForInjection + typeAttributeTranslators: TypeAttributeTranslators ) { val components: DeserializationComponents @@ -193,6 +193,6 @@ fun makeDeserializationComponentsForJava( storageManager, module, DeserializationConfiguration.Default, javaClassDataFinder, binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider, notFoundClasses, errorReporter, LookupTracker.DO_NOTHING, ContractDeserializer.DEFAULT, NewKotlinTypeChecker.Default, - TypeAttributeTranslatorsForInjection(listOf(DefaultTypeAttributeTranslator)) + TypeAttributeTranslators(listOf(DefaultTypeAttributeTranslator)) ) } diff --git a/core/descriptors/build.gradle.kts b/core/descriptors/build.gradle.kts index e7487f99031..c39470e3d59 100644 --- a/core/descriptors/build.gradle.kts +++ b/core/descriptors/build.gradle.kts @@ -10,7 +10,6 @@ dependencies { api(project(":core:util.runtime")) api(kotlinStdlib()) api(project(":kotlin-annotations-jvm")) - compileOnly(intellijCoreDep()) { includeJars("intellij-core") } } sourceSets { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeAttributeTranslator.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeAttributeTranslator.kt index 90a773754ac..86f3485750f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeAttributeTranslator.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeAttributeTranslator.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.types import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.name.FqName interface TypeAttributeTranslator { fun toAttributes( diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/extensions/TypeAttributeTranslators.kt b/core/descriptors/src/org/jetbrains/kotlin/types/extensions/TypeAttributeTranslators.kt index 72b62939c95..b6360dae0cb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/extensions/TypeAttributeTranslators.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/extensions/TypeAttributeTranslators.kt @@ -5,23 +5,11 @@ package org.jetbrains.kotlin.types.extensions -import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.types.* -interface TypeAttributeTranslatorExtension : TypeAttributeTranslator - -class TypeAttributeTranslatorsForInjection(project: Project) { - val translators: List = TypeAttributeTranslators(project).translators -} - -class TypeAttributeTranslators private constructor(val translators: List) { - - constructor(project: Project) : this(getInstances(project) + DefaultTypeAttributeTranslator) - - +class TypeAttributeTranslators(val translators: List) { fun toAttributes( annotations: Annotations, typeConstructor: TypeConstructor, @@ -39,12 +27,4 @@ class TypeAttributeTranslators private constructor(val translators: List( - "org.jetbrains.kotlin.extensions.typeAttribute", - TypeAttributeTranslatorExtension::class.java - ) { - val Default = TypeAttributeTranslators(listOf(DefaultTypeAttributeTranslator)) - } } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt index 0da517263cb..3746a718c59 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt @@ -34,8 +34,8 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.storage.StorageManager -import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslatorsForInjection import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker +import org.jetbrains.kotlin.types.extensions.TypeAttributeTranslators import java.io.InputStream class MetadataPackageFragmentProvider( @@ -47,7 +47,7 @@ class MetadataPackageFragmentProvider( contractDeserializer: ContractDeserializer, kotlinTypeChecker: NewKotlinTypeChecker, samConversionResolver: SamConversionResolver, - typeAttributeTranslators: TypeAttributeTranslatorsForInjection + typeAttributeTranslators: TypeAttributeTranslators ) : AbstractDeserializedPackageFragmentProvider(storageManager, finder, moduleDescriptor) { init { components = DeserializationComponents(