diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java index ad17c390f18..ab7ee603f0e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FieldInfo.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.CompanionObjectMapping; +import org.jetbrains.kotlin.builtins.CompanionObjectMappingUtilsKt; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.load.java.JvmAbi; @@ -24,7 +25,7 @@ public class FieldInfo { throw new UnsupportedOperationException("Can't create singleton field for class: " + classDescriptor); } - if (isNonCompanionObject(classDescriptor) || CompanionObjectMapping.INSTANCE.isMappedIntrinsicCompanionObject(classDescriptor)) { + if (isNonCompanionObject(classDescriptor) || CompanionObjectMappingUtilsKt.isMappedIntrinsicCompanionObject(CompanionObjectMapping.INSTANCE, classDescriptor)) { return createSingletonViaInstance(classDescriptor, typeMapper, JvmAbi.INSTANCE_FIELD); } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt index 0275a7d96e7..c84b0ab0869 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.jvm.codegen.MethodSignatureMapper import org.jetbrains.kotlin.backend.jvm.codegen.isJvmInterface import org.jetbrains.kotlin.backend.jvm.ir.copyCorrespondingPropertyFrom import org.jetbrains.kotlin.backend.jvm.ir.replaceThisByStaticReference -import org.jetbrains.kotlin.builtins.CompanionObjectMapping.isMappedIntrinsicCompanionObject import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.Modality @@ -28,6 +27,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.load.java.JvmAbi.isMappedIntrinsicCompanionObject import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver diff --git a/core/compiler.common/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt b/core/compiler.common/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt new file mode 100644 index 00000000000..b1f223a8fef --- /dev/null +++ b/core/compiler.common/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt @@ -0,0 +1,19 @@ +/* + * 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.builtins + +import org.jetbrains.kotlin.name.ClassId + +object CompanionObjectMapping { + val classIds: Set = ( + PrimitiveType.NUMBER_TYPES.map(StandardNames::getPrimitiveFqName) + + StandardNames.FqNames.string.toSafe() + + StandardNames.FqNames._boolean.toSafe() + + StandardNames.FqNames._enum.toSafe() + ).mapTo(linkedSetOf(), ClassId::topLevel) + + fun allClassesWithIntrinsicCompanions(): Set = classIds +} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java index f4605974be5..eeaa7a29579 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.load.java; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.builtins.CompanionObjectMapping; +import org.jetbrains.kotlin.builtins.CompanionObjectMappingUtilsKt; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; @@ -108,7 +109,7 @@ public final class JvmAbi { } public static boolean isMappedIntrinsicCompanionObject(@NotNull ClassDescriptor companionObject) { - return CompanionObjectMapping.INSTANCE.isMappedIntrinsicCompanionObject(companionObject); + return CompanionObjectMappingUtilsKt.isMappedIntrinsicCompanionObject(CompanionObjectMapping.INSTANCE, companionObject); } public static boolean hasJvmFieldAnnotation(@NotNull CallableMemberDescriptor memberDescriptor) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt deleted file mode 100644 index b3727c21b5d..00000000000 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMapping.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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. - */ - -package org.jetbrains.kotlin.builtins - -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.descriptorUtil.classId -import java.util.* - -object CompanionObjectMapping { - private val classIds = - (PrimitiveType.NUMBER_TYPES.map(StandardNames::getPrimitiveFqName) + - StandardNames.FqNames.string.toSafe() + - StandardNames.FqNames._boolean.toSafe() + - StandardNames.FqNames._enum.toSafe()).mapTo(linkedSetOf(), ClassId::topLevel) - - fun allClassesWithIntrinsicCompanions(): Set = - Collections.unmodifiableSet(classIds) - - fun isMappedIntrinsicCompanionObject(classDescriptor: ClassDescriptor): Boolean = - DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.classId?.outerClassId in classIds -} diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt new file mode 100644 index 00000000000..a444a565978 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt @@ -0,0 +1,13 @@ +/* + * 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.builtins + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.descriptorUtil.classId + +fun CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor: ClassDescriptor): Boolean = + DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.classId?.outerClassId in classIds diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index 7b3d9a8d99e..151db381d6e 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -18,6 +18,7 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.builtins.CompanionObjectMapping import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.isMappedIntrinsicCompanionObject import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.JvmAbi diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt index 65c926e9c57..a83d7ae527d 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/intrinsic/objects/objectsIntrinsics.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.js.translate.intrinsic.objects import org.jetbrains.kotlin.builtins.CompanionObjectMapping import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.builtins.isMappedIntrinsicCompanionObject import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.js.backend.ast.JsExpression import org.jetbrains.kotlin.js.translate.context.TranslationContext