diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index e333c9e9309..957a0b913f6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -51,7 +51,7 @@ import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor; import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor; import org.jetbrains.kotlin.diagnostics.Errors; import org.jetbrains.kotlin.lexer.KtTokens; -import org.jetbrains.kotlin.load.java.JvmAbi; +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil; import org.jetbrains.kotlin.load.kotlin.MethodSignatureMappingKt; import org.jetbrains.kotlin.load.kotlin.TypeSignatureMappingKt; import org.jetbrains.kotlin.name.Name; @@ -2174,7 +2174,7 @@ public class ExpressionCodegen extends KtVisitor impleme DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration(); - boolean isBackingFieldMovedFromCompanion = JvmAbi.isPropertyWithBackingFieldInOuterClass(propertyDescriptor); + boolean isBackingFieldMovedFromCompanion = DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor); AccessorKind fieldAccessorKind; if (skipLateinitAssertion) { fieldAccessorKind = AccessorKind.LATEINIT_INTRINSIC; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java index 9f1c4c26c84..9380597b675 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ImplementationBodyCodegen.java @@ -70,6 +70,7 @@ import static org.jetbrains.kotlin.codegen.CodegenUtilKt.isNonGenericToArray; import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.*; import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass; import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.getDelegatedLocalVariableMetadata; +import static org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil.*; import static org.jetbrains.kotlin.load.java.JvmAbi.*; import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_GET; import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_SET; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java index dbf3fd6a067..f17d3ad7f23 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java @@ -29,7 +29,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor; import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor; -import org.jetbrains.kotlin.load.java.JvmAbi; +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil; import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor; import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor; import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt; @@ -108,7 +108,7 @@ public class JvmCodegenUtil { boolean isDelegate = descriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION; DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration().getOriginal(); - if (JvmAbi.isPropertyWithBackingFieldInOuterClass(descriptor)) { + if (DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(descriptor)) { // For property with backed field, check if the access is done in the same class containing the backed field and // not the class that declared the field. containingDeclaration = containingDeclaration.getContainingDeclaration(); @@ -340,7 +340,7 @@ public class JvmCodegenUtil { public static boolean isCompanionObjectInInterfaceNotIntrinsic(@NotNull DeclarationDescriptor companionObject) { return isCompanionObject(companionObject) && isJvmInterface(companionObject.getContainingDeclaration()) && - !JvmAbi.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject); + !DescriptorsJvmAbiUtil.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject); } public static boolean isNonIntrinsicPrivateCompanionObjectInInterface(@NotNull DeclarationDescriptorWithVisibility companionObject) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index df22baa40ae..6ff005e030c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl; import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil; import org.jetbrains.kotlin.load.java.JavaVisibilities; import org.jetbrains.kotlin.load.java.JvmAbi; import org.jetbrains.kotlin.name.Name; @@ -877,7 +878,7 @@ public abstract class MemberCodegen() @@ -684,4 +683,4 @@ internal fun LabelNode.linkWithLabel(): LabelNode { return this } -fun linkedLabel(): Label = LabelNode().linkWithLabel().label \ No newline at end of file +fun linkedLabel(): Label = LabelNode().linkWithLabel().label diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt index 0bf209e760f..b52d770c8a4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/inlineCodegenUtils.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.ASSERTIONS_DISABLED_FIELD_NAME import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.BaseExpressionCodegen -import org.jetbrains.kotlin.codegen.MemberCodegen import org.jetbrains.kotlin.codegen.SamWrapperCodegen.SAM_WRAPPER_SUFFIX import org.jetbrains.kotlin.codegen.`when`.WhenByEnumsMapping import org.jetbrains.kotlin.codegen.binding.CodegenBinding diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt index adbfdb7a029..f84e1f81941 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapperBase import org.jetbrains.kotlin.config.JvmDefaultMode import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil import org.jetbrains.kotlin.load.java.lazy.types.RawTypeImpl import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME import org.jetbrains.kotlin.metadata.ProtoBuf @@ -283,7 +283,7 @@ class JvmSerializerExtension @JvmOverloads constructor( } private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean { - if (!JvmAbi.hasJvmFieldAnnotation(this)) return false + if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(this)) return false val container = containingDeclaration if (!DescriptorUtils.isCompanionObject(container)) return false diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt index e40a2da9866..fcae81fcf8d 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmSerializerExtension.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.serialization.nonSourceAnnotations import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf @@ -291,7 +291,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor( } private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean { - if (!JvmAbi.hasJvmFieldAnnotation(this)) return false + if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(this)) return false val container = containingDeclaration if (!DescriptorUtils.isCompanionObject(container)) return false diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt index 6694da5f4cc..1a8aca4500a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmFieldApplicabilityChecker.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtProperty @@ -93,7 +94,7 @@ class JvmFieldApplicabilityChecker : DeclarationChecker { if (next.visibility != Visibilities.PUBLIC || next.isVar || next.modality != Modality.FINAL) return false - if (!JvmAbi.hasJvmFieldAnnotation(next)) return false + if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(next)) return false } return true } 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 c84b0ab0869..6daf18f2f95 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 @@ -25,9 +25,9 @@ import org.jetbrains.kotlin.ir.builders.setSourceRange import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil.isMappedIntrinsicCompanionObject 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.jvm/src/org/jetbrains/kotlin/load/java/BuiltinSpecialProperties.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/BuiltinSpecialProperties.kt new file mode 100644 index 00000000000..8106c8a504b --- /dev/null +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/BuiltinSpecialProperties.kt @@ -0,0 +1,38 @@ +/* + * 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.load.java + +import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.FqNameUnsafe +import org.jetbrains.kotlin.name.Name + +object BuiltinSpecialProperties { + val PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP: Map = mapOf( + StandardNames.FqNames._enum.childSafe("name") to Name.identifier("name"), + StandardNames.FqNames._enum.childSafe("ordinal") to Name.identifier("ordinal"), + StandardNames.FqNames.collection.child("size") to Name.identifier("size"), + StandardNames.FqNames.map.child("size") to Name.identifier("size"), + StandardNames.FqNames.charSequence.childSafe("length") to Name.identifier("length"), + StandardNames.FqNames.map.child("keys") to Name.identifier("keySet"), + StandardNames.FqNames.map.child("values") to Name.identifier("values"), + StandardNames.FqNames.map.child("entries") to Name.identifier("entrySet") + ) + + private val GETTER_JVM_NAME_TO_PROPERTIES_SHORT_NAME_MAP: Map> = + PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.entries + .map { Pair(it.key.shortName(), it.value) } + .groupBy({ it.second }, { it.first }) + + val SPECIAL_FQ_NAMES: Set = PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.keys + val SPECIAL_SHORT_NAMES: Set = SPECIAL_FQ_NAMES.map(FqName::shortName).toSet() + + fun getPropertyNameCandidatesBySpecialGetterName(name1: Name): List = + GETTER_JVM_NAME_TO_PROPERTIES_SHORT_NAME_MAP[name1] ?: emptyList() +} + +private fun FqName.child(name: String): FqName = child(Name.identifier(name)) +private fun FqNameUnsafe.childSafe(name: String): FqName = child(Name.identifier(name)).toSafe() diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.kt new file mode 100644 index 00000000000..674eddd9fce --- /dev/null +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.kt @@ -0,0 +1,90 @@ +/* + * 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.load.java + +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly + +object JvmAbi { + const val DEFAULT_IMPLS_CLASS_NAME = "DefaultImpls" + const val ERASED_INLINE_CONSTRUCTOR_NAME = "constructor" + + @JvmField + val JVM_FIELD_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmField") + + /** + * Warning: use DEFAULT_IMPLS_CLASS_NAME and TypeMappingConfiguration.innerClassNameFactory when possible. + * This is false for KAPT3 mode. + */ + const val DEFAULT_IMPLS_SUFFIX = "$$DEFAULT_IMPLS_CLASS_NAME" + + const val DEFAULT_PARAMS_IMPL_SUFFIX = "\$default" + + private const val GET_PREFIX = "get" + private const val IS_PREFIX = "is" + private const val SET_PREFIX = "set" + + const val DELEGATED_PROPERTY_NAME_SUFFIX = "\$delegate" + const val DELEGATED_PROPERTIES_ARRAY_NAME = "$\$delegatedProperties" + const val DELEGATE_SUPER_FIELD_PREFIX = "$\$delegate_" + private const val ANNOTATIONS_SUFFIX = "\$annotations" + const val ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = ANNOTATIONS_SUFFIX + private const val ANNOTATED_TYPEALIAS_METHOD_NAME_SUFFIX = ANNOTATIONS_SUFFIX + + const val INSTANCE_FIELD = "INSTANCE" + const val HIDDEN_INSTANCE_FIELD = "$$$INSTANCE_FIELD" + + val REFLECTION_FACTORY_IMPL = ClassId.topLevel(FqName("kotlin.reflect.jvm.internal.ReflectionFactoryImpl")) + + const val LOCAL_VARIABLE_NAME_PREFIX_INLINE_ARGUMENT = "\$i\$a$" + const val LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION = "\$i\$f$" + + const val IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS = "-impl" + + /** + * @param baseName JVM name of the property getter since Kotlin 1.4, or Kotlin name of the property otherwise. + */ + @JvmStatic + fun getSyntheticMethodNameForAnnotatedProperty(baseName: String): String { + return baseName + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX + } + + @JvmStatic + fun getSyntheticMethodNameForAnnotatedTypeAlias(typeAliasName: Name): String { + return typeAliasName.asString() + ANNOTATED_TYPEALIAS_METHOD_NAME_SUFFIX + } + + @JvmStatic + fun isGetterName(name: String): Boolean { + return name.startsWith(GET_PREFIX) || name.startsWith(IS_PREFIX) + } + + @JvmStatic + fun isSetterName(name: String): Boolean { + return name.startsWith(SET_PREFIX) + } + + @JvmStatic + fun getterName(propertyName: String): String { + return if (startsWithIsPrefix(propertyName)) propertyName else GET_PREFIX + propertyName.capitalizeAsciiOnly() + } + + @JvmStatic + fun setterName(propertyName: String): String { + return SET_PREFIX + + if (startsWithIsPrefix(propertyName)) propertyName.substring(IS_PREFIX.length) else propertyName.capitalizeAsciiOnly() + } + + @JvmStatic + fun startsWithIsPrefix(name: String): Boolean { + if (!name.startsWith(IS_PREFIX)) return false + if (name.length == IS_PREFIX.length) return false + val c = name[IS_PREFIX.length] + return !('a' <= c && c <= 'z') + } +} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.kt similarity index 75% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.kt index c5035f5839b..1687c435787 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/propertiesConventionUtil.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-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.load.java @@ -26,7 +15,7 @@ fun propertyNameByGetMethodName(methodName: Name): Name? = fun propertyNameBySetMethodName(methodName: Name, withIsPrefix: Boolean): Name? = propertyNameFromAccessorMethodName(methodName, "set", addPrefix = if (withIsPrefix) "is" else null) -fun propertyNamesBySetMethodName(methodName: Name) = +fun propertyNamesBySetMethodName(methodName: Name): List = listOfNotNull(propertyNameBySetMethodName(methodName, false), propertyNameBySetMethodName(methodName, true)) private fun propertyNameFromAccessorMethodName( diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/ClassicBuiltinSpecialProperties.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/ClassicBuiltinSpecialProperties.kt new file mode 100644 index 00000000000..2a0dc131d4a --- /dev/null +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/ClassicBuiltinSpecialProperties.kt @@ -0,0 +1,35 @@ +/* + * 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.load.java + +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.resolve.descriptorUtil.firstOverridden +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe +import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor + +object ClassicBuiltinSpecialProperties { + fun CallableMemberDescriptor.getBuiltinSpecialPropertyGetterName(): String? { + assert(KotlinBuiltIns.isBuiltIn(this)) { "This method is defined only for builtin members, but $this found" } + + val descriptor = propertyIfAccessor.firstOverridden { hasBuiltinSpecialPropertyFqName(it) } ?: return null + return BuiltinSpecialProperties.PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP[descriptor.fqNameSafe]?.asString() + } + + fun hasBuiltinSpecialPropertyFqName(callableMemberDescriptor: CallableMemberDescriptor): Boolean { + if (callableMemberDescriptor.name !in BuiltinSpecialProperties.SPECIAL_SHORT_NAMES) return false + + return callableMemberDescriptor.hasBuiltinSpecialPropertyFqNameImpl() + } + + private fun CallableMemberDescriptor.hasBuiltinSpecialPropertyFqNameImpl(): Boolean { + if (fqNameOrNull() in BuiltinSpecialProperties.SPECIAL_FQ_NAMES && valueParameters.isEmpty()) return true + if (!KotlinBuiltIns.isBuiltIn(this)) return false + + return overriddenDescriptors.any { hasBuiltinSpecialPropertyFqName(it) } + } +} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/DescriptorsJvmAbiUtil.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/DescriptorsJvmAbiUtil.java new file mode 100644 index 00000000000..5f2dea9960a --- /dev/null +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/DescriptorsJvmAbiUtil.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2018 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.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 static org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.isClassOrEnumClass; +import static org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject; + +public final class DescriptorsJvmAbiUtil { + public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) { + if (propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) return false; + + if (isClassCompanionObjectWithBackingFieldsInOuter(propertyDescriptor.getContainingDeclaration())) return true; + + return isCompanionObject(propertyDescriptor.getContainingDeclaration()) && hasJvmFieldAnnotation(propertyDescriptor); + } + + public static boolean isClassCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) { + return isCompanionObject(companionObject) && + isClassOrEnumClass(companionObject.getContainingDeclaration()) && + !isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject); + } + + public static boolean isMappedIntrinsicCompanionObject(@NotNull ClassDescriptor companionObject) { + return CompanionObjectMappingUtilsKt.isMappedIntrinsicCompanionObject(CompanionObjectMapping.INSTANCE, companionObject); + } + + public static boolean hasJvmFieldAnnotation(@NotNull CallableMemberDescriptor memberDescriptor) { + // TODO: deduplicate this with org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmFieldAnnotation + if (memberDescriptor instanceof PropertyDescriptor) { + FieldDescriptor field = ((PropertyDescriptor) memberDescriptor).getBackingField(); + if (field != null && field.getAnnotations().hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME)) return true; + } + return memberDescriptor.getAnnotations().hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME); + } +} 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 deleted file mode 100644 index eeaa7a29579..00000000000 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JvmAbi.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2000-2018 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.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; -import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.util.capitalizeDecapitalize.CapitalizeDecapitalizeKt; - -import static org.jetbrains.kotlin.resolve.DescriptorUtils.isClassOrEnumClass; -import static org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject; - -public final class JvmAbi { - public static final String DEFAULT_IMPLS_CLASS_NAME = "DefaultImpls"; - public static final String ERASED_INLINE_CONSTRUCTOR_NAME = "constructor"; - public static final FqName JVM_FIELD_ANNOTATION_FQ_NAME = new FqName("kotlin.jvm.JvmField"); - - /** - * Warning: use DEFAULT_IMPLS_CLASS_NAME and TypeMappingConfiguration.innerClassNameFactory when possible. - * This is false for KAPT3 mode. - */ - public static final String DEFAULT_IMPLS_SUFFIX = "$" + DEFAULT_IMPLS_CLASS_NAME; - - public static final String DEFAULT_PARAMS_IMPL_SUFFIX = "$default"; - - private static final String GET_PREFIX = "get"; - private static final String IS_PREFIX = "is"; - private static final String SET_PREFIX = "set"; - - public static final String DELEGATED_PROPERTY_NAME_SUFFIX = "$delegate"; - public static final String DELEGATED_PROPERTIES_ARRAY_NAME = "$$delegatedProperties"; - public static final String DELEGATE_SUPER_FIELD_PREFIX = "$$delegate_"; - private static final String ANNOTATIONS_SUFFIX = "$annotations"; - public static final String ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX = ANNOTATIONS_SUFFIX; - private static final String ANNOTATED_TYPEALIAS_METHOD_NAME_SUFFIX = ANNOTATIONS_SUFFIX; - - public static final String INSTANCE_FIELD = "INSTANCE"; - public static final String HIDDEN_INSTANCE_FIELD = "$$" + INSTANCE_FIELD; - - public static final ClassId REFLECTION_FACTORY_IMPL = ClassId.topLevel(new FqName("kotlin.reflect.jvm.internal.ReflectionFactoryImpl")); - - public static final String LOCAL_VARIABLE_NAME_PREFIX_INLINE_ARGUMENT = "$i$a$"; - public static final String LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION = "$i$f$"; - - public static final String IMPL_SUFFIX_FOR_INLINE_CLASS_MEMBERS = "-impl"; - - /** - * @param baseName JVM name of the property getter since Kotlin 1.4, or Kotlin name of the property otherwise. - */ - @NotNull - public static String getSyntheticMethodNameForAnnotatedProperty(@NotNull String baseName) { - return baseName + ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX; - } - - @NotNull - public static String getSyntheticMethodNameForAnnotatedTypeAlias(@NotNull Name typeAliasName) { - return typeAliasName.asString() + ANNOTATED_TYPEALIAS_METHOD_NAME_SUFFIX; - } - - public static boolean isGetterName(@NotNull String name) { - return name.startsWith(GET_PREFIX) || name.startsWith(IS_PREFIX); - } - - public static boolean isSetterName(@NotNull String name) { - return name.startsWith(SET_PREFIX); - } - - @NotNull - public static String getterName(@NotNull String propertyName) { - return startsWithIsPrefix(propertyName) - ? propertyName - : GET_PREFIX + CapitalizeDecapitalizeKt.capitalizeAsciiOnly(propertyName); - } - - @NotNull - public static String setterName(@NotNull String propertyName) { - return SET_PREFIX + - (startsWithIsPrefix(propertyName) - ? propertyName.substring(IS_PREFIX.length()) - : CapitalizeDecapitalizeKt.capitalizeAsciiOnly(propertyName)); - } - - public static boolean startsWithIsPrefix(String name) { - if (!name.startsWith(IS_PREFIX)) return false; - if (name.length() == IS_PREFIX.length()) return false; - char c = name.charAt(IS_PREFIX.length()); - return !('a' <= c && c <= 'z'); - } - - public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) { - if (propertyDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) return false; - - if (isClassCompanionObjectWithBackingFieldsInOuter(propertyDescriptor.getContainingDeclaration())) return true; - - return isCompanionObject(propertyDescriptor.getContainingDeclaration()) && hasJvmFieldAnnotation(propertyDescriptor); - } - - public static boolean isClassCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) { - return isCompanionObject(companionObject) && - isClassOrEnumClass(companionObject.getContainingDeclaration()) && - !isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject); - } - - public static boolean isMappedIntrinsicCompanionObject(@NotNull ClassDescriptor companionObject) { - return CompanionObjectMappingUtilsKt.isMappedIntrinsicCompanionObject(CompanionObjectMapping.INSTANCE, companionObject); - } - - public static boolean hasJvmFieldAnnotation(@NotNull CallableMemberDescriptor memberDescriptor) { - // TODO: deduplicate this with org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmFieldAnnotation - if (memberDescriptor instanceof PropertyDescriptor) { - FieldDescriptor field = ((PropertyDescriptor) memberDescriptor).getBackingField(); - if (field != null && field.getAnnotations().hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME)) return true; - } - return memberDescriptor.getAnnotations().hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME); - } -} diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 6208aee958f..30f49a20b30 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.load.java.* import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.isRemoveAtByIndex import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.sameAsRenamedInJvmBuiltin import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.sameAsBuiltinMethodWithErasedValueParameters -import org.jetbrains.kotlin.load.java.BuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName +import org.jetbrains.kotlin.load.java.ClassicBuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName import org.jetbrains.kotlin.load.java.components.DescriptorResolverUtils.resolveOverridesForNonStaticMembers import org.jetbrains.kotlin.load.java.components.TypeUsage import org.jetbrains.kotlin.load.java.descriptors.* diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt index af03b2365ed..911c8905d6e 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/specialBuiltinMembers.kt @@ -19,29 +19,21 @@ package org.jetbrains.kotlin.load.java import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.StandardNames.FqNames import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.sameAsBuiltinMethodWithErasedValueParameters -import org.jetbrains.kotlin.load.java.BuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName +import org.jetbrains.kotlin.load.java.ClassicBuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents import org.jetbrains.kotlin.load.kotlin.computeJvmSignature import org.jetbrains.kotlin.load.kotlin.signatures -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.firstOverridden -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure -private fun FqName.child(name: String): FqName = child(Name.identifier(name)) -private fun FqNameUnsafe.childSafe(name: String): FqName = child(Name.identifier(name)).toSafe() - private data class NameAndSignature(val name: Name, val signature: String) private fun String.method(name: String, parameters: String, returnType: String) = @@ -50,50 +42,6 @@ private fun String.method(name: String, parameters: String, returnType: String) SignatureBuildingComponents.signature(this@method, "$name($parameters)$returnType") ) -object BuiltinSpecialProperties { - val PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP = mapOf( - FqNames._enum.childSafe("name") to Name.identifier("name"), - FqNames._enum.childSafe("ordinal") to Name.identifier("ordinal"), - FqNames.collection.child("size") to Name.identifier("size"), - FqNames.map.child("size") to Name.identifier("size"), - FqNames.charSequence.childSafe("length") to Name.identifier("length"), - FqNames.map.child("keys") to Name.identifier("keySet"), - FqNames.map.child("values") to Name.identifier("values"), - FqNames.map.child("entries") to Name.identifier("entrySet") - ) - - private val GETTER_JVM_NAME_TO_PROPERTIES_SHORT_NAME_MAP: Map> = - PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.entries - .map { Pair(it.key.shortName(), it.value) } - .groupBy({ it.second }, { it.first }) - - val SPECIAL_FQ_NAMES = PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.keys - val SPECIAL_SHORT_NAMES = SPECIAL_FQ_NAMES.map(FqName::shortName).toSet() - - fun hasBuiltinSpecialPropertyFqName(callableMemberDescriptor: CallableMemberDescriptor): Boolean { - if (callableMemberDescriptor.name !in SPECIAL_SHORT_NAMES) return false - - return callableMemberDescriptor.hasBuiltinSpecialPropertyFqNameImpl() - } - - private fun CallableMemberDescriptor.hasBuiltinSpecialPropertyFqNameImpl(): Boolean { - if (fqNameOrNull() in SPECIAL_FQ_NAMES && valueParameters.isEmpty()) return true - if (!KotlinBuiltIns.isBuiltIn(this)) return false - - return overriddenDescriptors.any { hasBuiltinSpecialPropertyFqName(it) } - } - - fun getPropertyNameCandidatesBySpecialGetterName(name1: Name): List = - GETTER_JVM_NAME_TO_PROPERTIES_SHORT_NAME_MAP[name1] ?: emptyList() - - fun CallableMemberDescriptor.getBuiltinSpecialPropertyGetterName(): String? { - assert(KotlinBuiltIns.isBuiltIn(this)) { "This method is defined only for builtin members, but $this found" } - - val descriptor = propertyIfAccessor.firstOverridden { hasBuiltinSpecialPropertyFqName(it) } ?: return null - return PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP[descriptor.fqNameSafe]?.asString() - } -} - object BuiltinMethodsWithSpecialGenericSignature { private val ERASED_COLLECTION_PARAMETER_NAME_AND_SIGNATURES = setOf( "containsAll", "removeAll", "retainAll" @@ -270,7 +218,7 @@ fun T.getOverriddenBuiltinWithDifferentJvmName(): return when (this) { is PropertyDescriptor, is PropertyAccessorDescriptor -> - firstOverridden { BuiltinSpecialProperties.hasBuiltinSpecialPropertyFqName(it.propertyIfAccessor) } as T? + firstOverridden { ClassicBuiltinSpecialProperties.hasBuiltinSpecialPropertyFqName(it.propertyIfAccessor) } as T? is SimpleFunctionDescriptor -> firstOverridden { BuiltinMethodsWithDifferentJvmName.isBuiltinFunctionWithDifferentNameInJvm(it as SimpleFunctionDescriptor) diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt index 3adccf87ef1..f0a69fdc9ad 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPropertyImpl.kt @@ -7,7 +7,7 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.resolve.DescriptorFactory import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -54,7 +54,7 @@ internal abstract class KPropertyImpl private constructor( is KotlinProperty -> { val descriptor = jvmSignature.descriptor JvmProtoBufUtil.getJvmFieldSignature(jvmSignature.proto, jvmSignature.nameResolver, jvmSignature.typeTable)?.let { - val owner = if (JvmAbi.isPropertyWithBackingFieldInOuterClass(descriptor) || + val owner = if (DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(descriptor) || JvmProtoBufUtil.isMovedFromInterfaceCompanion(jvmSignature.proto) ) { container.jClass.enclosingClass diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/modifierListModifactor.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/modifierListModifactor.kt index f0b1b8c9100..bd36eb50e27 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/modifierListModifactor.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/modifierListModifactor.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.annotations.JVM_FIELD_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode fun KtModifierListOwner.addAnnotation( diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 7ef201a8c88..ecdd0128898 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -17,10 +17,8 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.platform.* import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.js.JsPlatform import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.platform.jvm.JdkPlatform -import org.jetbrains.kotlin.platform.jvm.JvmPlatform import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.konan.* import java.lang.reflect.Modifier diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt index 6f10ea115d0..e73a72e1fa1 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt @@ -17,15 +17,10 @@ package org.jetbrains.kotlin.idea.debugger import com.intellij.debugger.SourcePosition -import com.intellij.debugger.engine.DebugProcess -import com.intellij.debugger.engine.DebuggerUtils import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiTreeUtil -import com.sun.jdi.AbsentInformationException -import com.sun.jdi.ObjectCollectedException -import com.sun.jdi.ReferenceType import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClassOrNull import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil @@ -46,7 +41,6 @@ import org.jetbrains.kotlin.psi.psiUtil.isTopLevelInFileOrScript import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.inline.InlineUtil import org.jetbrains.org.objectweb.asm.Type -import java.util.* class DebuggerClassNameProvider( val project: Project, val searchScope: GlobalSearchScope, diff --git a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/VariableFinder.kt b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/VariableFinder.kt index 5534fd7770c..cf108d4b647 100644 --- a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/VariableFinder.kt +++ b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/VariableFinder.kt @@ -5,10 +5,8 @@ package org.jetbrains.kotlin.idea.debugger.evaluate.variables -import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil import com.intellij.debugger.jdi.LocalVariableProxyImpl import com.intellij.debugger.jdi.StackFrameProxyImpl -import com.intellij.openapi.diagnostic.Attachment import com.sun.jdi.* import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.AsmUtil.getCapturedFieldName @@ -17,16 +15,12 @@ import org.jetbrains.kotlin.codegen.coroutines.CONTINUATION_VARIABLE_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME import org.jetbrains.kotlin.codegen.inline.INLINE_FUN_VAR_SUFFIX import org.jetbrains.kotlin.codegen.inline.INLINE_TRANSFORMATION_SUFFIX -import org.jetbrains.kotlin.idea.core.util.mergeAttachments import org.jetbrains.kotlin.idea.debugger.* import org.jetbrains.kotlin.idea.debugger.evaluate.ExecutionContext -import org.jetbrains.kotlin.idea.debugger.evaluate.LOG import org.jetbrains.kotlin.idea.debugger.evaluate.compilation.CodeFragmentParameter import org.jetbrains.kotlin.idea.debugger.evaluate.compilation.CodeFragmentParameter.* import org.jetbrains.kotlin.idea.debugger.evaluate.compilation.DebugLabelPropertyDescriptorProvider -import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.resolve.jvm.JvmClassName import kotlin.coroutines.Continuation import org.jetbrains.org.objectweb.asm.Type as AsmType import com.sun.jdi.Type as JdiType @@ -478,4 +472,4 @@ class VariableFinder(val context: ExecutionContext) { return frameProxy.thisObject() } -} \ No newline at end of file +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakePrivateAndOverrideMemberFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakePrivateAndOverrideMemberFix.kt index 7c936363625..7fcf0d80f82 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakePrivateAndOverrideMemberFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakePrivateAndOverrideMemberFix.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideImplementMembersHandler import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject @@ -21,10 +20,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.types.typeUtil.makeNotNullable