From 9d9f9c52c02cc5e86b4b9b8c15f4a650648cb22b Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 14 Aug 2020 16:05:28 +0300 Subject: [PATCH] Extract some classes from descriptors module to `:core:common` This is needed to remove dependencies from fir modules to `:core:descriptors` module What was extracted: - Modality - ClassKind - org.jetbrains.kotlin.name package --- build.gradle.kts | 2 ++ .../kotlin/codegen/FunctionCodegen.java | 2 +- .../kotlin/resolve/BodyResolver.java | 2 +- core/descriptors.common/build.gradle.kts | 24 +++++++++++++++++ .../kotlin/descriptors/ClassKind.java | 0 .../jetbrains/kotlin/descriptors/Modality.kt | 26 +++++++++++++++++++ .../org/jetbrains/kotlin/name/ClassId.java | 0 .../src/org/jetbrains/kotlin/name/FqName.java | 0 .../jetbrains/kotlin/name/FqNameUnsafe.java | 0 .../org/jetbrains/kotlin/name/FqNamesUtil.kt | 0 .../src/org/jetbrains/kotlin/name/Name.java | 0 .../org/jetbrains/kotlin/name/NameUtils.kt | 0 .../jetbrains/kotlin/name/SpecialNames.java | 0 core/descriptors/build.gradle.kts | 1 + .../{Modality.kt => ModalityUtils.kt} | 20 -------------- .../types/AbstractClassTypeConstructor.java | 2 +- .../js/translate/utils/JsDescriptorUtils.java | 4 +-- .../js/translate/utils/TranslationUtils.java | 8 +++--- libraries/reflect/build.gradle.kts | 2 ++ prepare/idea-plugin/build.gradle.kts | 1 + settings.gradle | 1 + 21 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 core/descriptors.common/build.gradle.kts rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/descriptors/ClassKind.java (100%) create mode 100644 core/descriptors.common/src/org/jetbrains/kotlin/descriptors/Modality.kt rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/ClassId.java (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/FqName.java (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/FqNameUnsafe.java (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/FqNamesUtil.kt (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/Name.java (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/NameUtils.kt (100%) rename core/{descriptors => descriptors.common}/src/org/jetbrains/kotlin/name/SpecialNames.java (100%) rename core/descriptors/src/org/jetbrains/kotlin/descriptors/{Modality.kt => ModalityUtils.kt} (71%) diff --git a/build.gradle.kts b/build.gradle.kts index 532f14205e1..dee159cc994 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -265,6 +265,7 @@ extra["compilerModules"] = arrayOf( ":kotlin-build-common", ":core:metadata", ":core:metadata.jvm", + ":core:descriptors.common", ":core:descriptors", ":core:descriptors.jvm", ":core:descriptors.runtime", @@ -296,6 +297,7 @@ extra["compilerModulesForJps"] = listOf( ":kotlin-compiler-runner", ":daemon-common", ":daemon-common-new", + ":core:descriptors.common", ":core:descriptors", ":core:descriptors.jvm", ":idea:idea-jps-common", diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 4409f5fe9e6..a3213b86605 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -73,7 +73,7 @@ import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBinding import static org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.isAccessor; import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION; import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION; -import static org.jetbrains.kotlin.descriptors.ModalityKt.isOverridable; +import static org.jetbrains.kotlin.descriptors.ModalityUtilsKt.isOverridable; import static org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.getSourceFromDescriptor; import static org.jetbrains.kotlin.resolve.DescriptorUtils.*; import static org.jetbrains.kotlin.resolve.inline.InlineOnlyKt.isInlineOnlyPrivateInBytecode; diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index 1e71ff9f355..c641bdb1636 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -641,7 +641,7 @@ public class BodyResolver { trace.report(SEALED_SUPERTYPE_IN_LOCAL_CLASS.on(typeReference)); } } - else if (ModalityKt.isFinalOrEnum(classDescriptor)) { + else if (ModalityUtilsKt.isFinalOrEnum(classDescriptor)) { trace.report(FINAL_SUPERTYPE.on(typeReference)); } else if (KotlinBuiltIns.isEnum(classDescriptor)) { diff --git a/core/descriptors.common/build.gradle.kts b/core/descriptors.common/build.gradle.kts new file mode 100644 index 00000000000..a11d34aff30 --- /dev/null +++ b/core/descriptors.common/build.gradle.kts @@ -0,0 +1,24 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +jvmTarget = "1.6" +javaHome = rootProject.extra["JDK_16"] as String + +dependencies { + compile(project(":core:util.runtime")) + compile(project(":core:type-system")) + compile(kotlinStdlib()) + compile(project(":kotlin-annotations-jvm")) +} + +sourceSets { + "main" { projectDefault() } + "test" {} +} + +tasks.withType { + sourceCompatibility = "1.6" + targetCompatibility = "1.6" +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassKind.java b/core/descriptors.common/src/org/jetbrains/kotlin/descriptors/ClassKind.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/descriptors/ClassKind.java rename to core/descriptors.common/src/org/jetbrains/kotlin/descriptors/ClassKind.java diff --git a/core/descriptors.common/src/org/jetbrains/kotlin/descriptors/Modality.kt b/core/descriptors.common/src/org/jetbrains/kotlin/descriptors/Modality.kt new file mode 100644 index 00000000000..0b91487dfa4 --- /dev/null +++ b/core/descriptors.common/src/org/jetbrains/kotlin/descriptors/Modality.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2020 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.descriptors + +// For sealed classes, isOverridable is false but isOverridableByMembers is true +enum class Modality { + // THE ORDER OF ENTRIES MATTERS HERE + FINAL, + // NB: class can be sealed but not function or property + SEALED, + OPEN, + ABSTRACT; + + companion object { + + // NB: never returns SEALED + fun convertFromFlags(abstract: Boolean, open: Boolean): Modality { + if (abstract) return ABSTRACT + if (open) return OPEN + return FINAL + } + } +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java b/core/descriptors.common/src/org/jetbrains/kotlin/name/ClassId.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/ClassId.java rename to core/descriptors.common/src/org/jetbrains/kotlin/name/ClassId.java diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqName.java b/core/descriptors.common/src/org/jetbrains/kotlin/name/FqName.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/FqName.java rename to core/descriptors.common/src/org/jetbrains/kotlin/name/FqName.java diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java b/core/descriptors.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/FqNameUnsafe.java rename to core/descriptors.common/src/org/jetbrains/kotlin/name/FqNameUnsafe.java diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt b/core/descriptors.common/src/org/jetbrains/kotlin/name/FqNamesUtil.kt similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/FqNamesUtil.kt rename to core/descriptors.common/src/org/jetbrains/kotlin/name/FqNamesUtil.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/Name.java b/core/descriptors.common/src/org/jetbrains/kotlin/name/Name.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/Name.java rename to core/descriptors.common/src/org/jetbrains/kotlin/name/Name.java diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt b/core/descriptors.common/src/org/jetbrains/kotlin/name/NameUtils.kt similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt rename to core/descriptors.common/src/org/jetbrains/kotlin/name/NameUtils.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java b/core/descriptors.common/src/org/jetbrains/kotlin/name/SpecialNames.java similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java rename to core/descriptors.common/src/org/jetbrains/kotlin/name/SpecialNames.java diff --git a/core/descriptors/build.gradle.kts b/core/descriptors/build.gradle.kts index a11d34aff30..3e2ef190a28 100644 --- a/core/descriptors/build.gradle.kts +++ b/core/descriptors/build.gradle.kts @@ -7,6 +7,7 @@ jvmTarget = "1.6" javaHome = rootProject.extra["JDK_16"] as String dependencies { + compile(project(":core:descriptors.common")) compile(project(":core:util.runtime")) compile(project(":core:type-system")) compile(kotlinStdlib()) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModalityUtils.kt similarity index 71% rename from core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt rename to core/descriptors/src/org/jetbrains/kotlin/descriptors/ModalityUtils.kt index 92da094b708..79b1106e9ed 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/Modality.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModalityUtils.kt @@ -18,26 +18,6 @@ package org.jetbrains.kotlin.descriptors import org.jetbrains.kotlin.resolve.DescriptorUtils -// For sealed classes, isOverridable is false but isOverridableByMembers is true -enum class Modality { - // THE ORDER OF ENTRIES MATTERS HERE - FINAL, - // NB: class can be sealed but not function or property - SEALED, - OPEN, - ABSTRACT; - - companion object { - - // NB: never returns SEALED - fun convertFromFlags(abstract: Boolean, open: Boolean): Modality { - if (abstract) return ABSTRACT - if (open) return OPEN - return FINAL - } - } -} - val CallableMemberDescriptor.isOverridable: Boolean get() = visibility != Visibilities.PRIVATE && modality != Modality.FINAL diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java index 429b439881d..44065e42bf2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java @@ -58,7 +58,7 @@ public abstract class AbstractClassTypeConstructor extends AbstractTypeConstruct @Override public final boolean isFinal() { ClassDescriptor descriptor = getDeclarationDescriptor(); - return ModalityKt.isFinalClass(descriptor) && !descriptor.isExpect(); + return ModalityUtilsKt.isFinalClass(descriptor) && !descriptor.isExpect(); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java index a86d3fa2772..f47842803b4 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/JsDescriptorUtils.java @@ -131,7 +131,7 @@ public final class JsDescriptorUtils { public static boolean sideEffectsPossibleOnRead(@NotNull PropertyDescriptor property) { return DynamicCallsKt.isDynamic(property) || !isDefaultAccessor(property.getGetter()) || - ModalityKt.isOverridableOrOverrides(property) || isStaticInitializationPossible(property); + ModalityUtilsKt.isOverridableOrOverrides(property) || isStaticInitializationPossible(property); } private static boolean isStaticInitializationPossible(PropertyDescriptor property) { @@ -144,7 +144,7 @@ public final class JsDescriptorUtils { isDefaultAccessor(propertyDescriptor.getGetter()) && isDefaultAccessor(propertyDescriptor.getSetter()) && !TranslationUtils.shouldAccessViaFunctions(propertyDescriptor) && - !ModalityKt.isOverridableOrOverrides(propertyDescriptor); + !ModalityUtilsKt.isOverridableOrOverrides(propertyDescriptor); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java index 9572327ee18..e1fa22ebe8c 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/TranslationUtils.java @@ -105,7 +105,7 @@ public final class TranslationUtils { @NotNull private static JsPropertyInitializer translateExtensionFunctionAsEcma5DataDescriptor(@NotNull JsExpression functionExpression, @NotNull FunctionDescriptor descriptor, @NotNull TranslationContext context) { - JsObjectLiteral meta = createDataDescriptor(functionExpression, ModalityKt.isOverridable(descriptor), false); + JsObjectLiteral meta = createDataDescriptor(functionExpression, ModalityUtilsKt.isOverridable(descriptor), false); return new JsPropertyInitializer(context.getNameForDescriptor(descriptor).makeRef(), meta); } @@ -420,9 +420,9 @@ public final class TranslationUtils { public static boolean isOverridableFunctionWithDefaultParameters(@NotNull FunctionDescriptor descriptor) { return hasOrInheritsParametersWithDefaultValue(descriptor) && - !(descriptor instanceof ConstructorDescriptor) && - descriptor.getContainingDeclaration() instanceof ClassDescriptor && - ModalityKt.isOverridable(descriptor); + !(descriptor instanceof ConstructorDescriptor) && + descriptor.getContainingDeclaration() instanceof ClassDescriptor && + ModalityUtilsKt.isOverridable(descriptor); } @NotNull diff --git a/libraries/reflect/build.gradle.kts b/libraries/reflect/build.gradle.kts index a738292810f..90407f17d53 100644 --- a/libraries/reflect/build.gradle.kts +++ b/libraries/reflect/build.gradle.kts @@ -49,6 +49,7 @@ dependencies { embedded(project(":core:metadata")) embedded(project(":core:metadata.jvm")) embedded(project(":core:descriptors")) + embedded(project(":core:descriptors.common")) embedded(project(":core:descriptors.jvm")) embedded(project(":core:deserialization")) embedded(project(":core:descriptors.runtime")) @@ -158,6 +159,7 @@ val relocateCoreSources by task { } from("$core/descriptors/src") + from("$core/descriptors.common/src") from("$core/descriptors.jvm/src") from("$core/descriptors.runtime/src") from("$core/deserialization/src") diff --git a/prepare/idea-plugin/build.gradle.kts b/prepare/idea-plugin/build.gradle.kts index 802e094353e..f8681ffd1a8 100644 --- a/prepare/idea-plugin/build.gradle.kts +++ b/prepare/idea-plugin/build.gradle.kts @@ -28,6 +28,7 @@ val projectsToShadow by extra(listOf( ":core:metadata", ":core:metadata.jvm", ":core:descriptors", + ":core:descriptors.common", ":core:descriptors.jvm", ":core:deserialization", ":idea:jvm-debugger:eval4j", diff --git a/settings.gradle b/settings.gradle index 5a5dc3f2875..b2a39bd3965 100644 --- a/settings.gradle +++ b/settings.gradle @@ -149,6 +149,7 @@ include ":benchmarks", ":native:kotlin-klib-commonizer-embeddable", ":jps-plugin", ":kotlin-jps-plugin", + ":core:descriptors.common", ":core:descriptors", ":core:type-system", ":core:descriptors.jvm",