Move BuiltinSpecialProperties and JvmAbi to :core:compiler.common.jvm
This commit is contained in:
@@ -51,7 +51,7 @@ import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor;
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens;
|
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.MethodSignatureMappingKt;
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeSignatureMappingKt;
|
import org.jetbrains.kotlin.load.kotlin.TypeSignatureMappingKt;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
@@ -2174,7 +2174,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
|
DeclarationDescriptor containingDeclaration = propertyDescriptor.getContainingDeclaration();
|
||||||
|
|
||||||
boolean isBackingFieldMovedFromCompanion = JvmAbi.isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
|
boolean isBackingFieldMovedFromCompanion = DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
|
||||||
AccessorKind fieldAccessorKind;
|
AccessorKind fieldAccessorKind;
|
||||||
if (skipLateinitAssertion) {
|
if (skipLateinitAssertion) {
|
||||||
fieldAccessorKind = AccessorKind.LATEINIT_INTRINSIC;
|
fieldAccessorKind = AccessorKind.LATEINIT_INTRINSIC;
|
||||||
|
|||||||
@@ -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.JvmCodegenUtil.*;
|
||||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass;
|
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.enumEntryNeedSubclass;
|
||||||
import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.getDelegatedLocalVariableMetadata;
|
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.load.java.JvmAbi.*;
|
||||||
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_GET;
|
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_GET;
|
||||||
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_SET;
|
import static org.jetbrains.kotlin.resolve.BindingContext.INDEXED_LVALUE_SET;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings;
|
|||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor;
|
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.JavaCallableMemberDescriptor;
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor;
|
import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor;
|
||||||
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
|
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt;
|
||||||
@@ -108,7 +108,7 @@ public class JvmCodegenUtil {
|
|||||||
boolean isDelegate = descriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION;
|
boolean isDelegate = descriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION;
|
||||||
|
|
||||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration().getOriginal();
|
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
|
// 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.
|
// not the class that declared the field.
|
||||||
containingDeclaration = containingDeclaration.getContainingDeclaration();
|
containingDeclaration = containingDeclaration.getContainingDeclaration();
|
||||||
@@ -340,7 +340,7 @@ public class JvmCodegenUtil {
|
|||||||
public static boolean isCompanionObjectInInterfaceNotIntrinsic(@NotNull DeclarationDescriptor companionObject) {
|
public static boolean isCompanionObjectInInterfaceNotIntrinsic(@NotNull DeclarationDescriptor companionObject) {
|
||||||
return isCompanionObject(companionObject) &&
|
return isCompanionObject(companionObject) &&
|
||||||
isJvmInterface(companionObject.getContainingDeclaration()) &&
|
isJvmInterface(companionObject.getContainingDeclaration()) &&
|
||||||
!JvmAbi.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject);
|
!DescriptorsJvmAbiUtil.isMappedIntrinsicCompanionObject((ClassDescriptor) companionObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isNonIntrinsicPrivateCompanionObjectInInterface(@NotNull DeclarationDescriptorWithVisibility companionObject) {
|
public static boolean isNonIntrinsicPrivateCompanionObjectInInterface(@NotNull DeclarationDescriptorWithVisibility companionObject) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl;
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
|
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.JavaVisibilities;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
@@ -877,7 +878,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
|||||||
AccessorKind fieldAccessorKind = accessor instanceof AccessorForPropertyBackingField
|
AccessorKind fieldAccessorKind = accessor instanceof AccessorForPropertyBackingField
|
||||||
? accessor.getAccessorKind() : null;
|
? accessor.getAccessorKind() : null;
|
||||||
boolean syntheticBackingField = fieldAccessorKind == AccessorKind.FIELD_FROM_LOCAL;
|
boolean syntheticBackingField = fieldAccessorKind == AccessorKind.FIELD_FROM_LOCAL;
|
||||||
boolean forceFieldForCompanionProperty = JvmAbi.isPropertyWithBackingFieldInOuterClass(original) &&
|
boolean forceFieldForCompanionProperty = DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(original) &&
|
||||||
!isCompanionObject(accessor.getContainingDeclaration());
|
!isCompanionObject(accessor.getContainingDeclaration());
|
||||||
boolean forceField = forceFieldForCompanionProperty ||
|
boolean forceField = forceFieldForCompanionProperty ||
|
||||||
syntheticBackingField ||
|
syntheticBackingField ||
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
|||||||
import org.jetbrains.kotlin.config.LanguageFeature;
|
import org.jetbrains.kotlin.config.LanguageFeature;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
|
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
@@ -410,7 +411,7 @@ public class PropertyCodegen {
|
|||||||
if (AsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor) ) {
|
if (AsmUtil.isInstancePropertyWithStaticBackingField(propertyDescriptor) ) {
|
||||||
modifiers |= ACC_STATIC;
|
modifiers |= ACC_STATIC;
|
||||||
|
|
||||||
if (JvmAbi.isPropertyWithBackingFieldInOuterClass(propertyDescriptor)) {
|
if (DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(propertyDescriptor)) {
|
||||||
ImplementationBodyCodegen codegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen();
|
ImplementationBodyCodegen codegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen();
|
||||||
builder = codegen.v;
|
builder = codegen.v;
|
||||||
backingFieldContext = codegen.context;
|
backingFieldContext = codegen.context;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
|||||||
import org.jetbrains.kotlin.config.LanguageFeature;
|
import org.jetbrains.kotlin.config.LanguageFeature;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
|
||||||
|
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil;
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi;
|
import org.jetbrains.kotlin.load.java.JvmAbi;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.KtExpression;
|
import org.jetbrains.kotlin.psi.KtExpression;
|
||||||
@@ -1761,7 +1762,7 @@ public abstract class StackValue {
|
|||||||
// is from a different context), the assertion will be generated on each access, see KT-28331.
|
// is from a different context), the assertion will be generated on each access, see KT-28331.
|
||||||
if (descriptor instanceof AccessorForPropertyBackingField) {
|
if (descriptor instanceof AccessorForPropertyBackingField) {
|
||||||
PropertyDescriptor property = ((AccessorForPropertyBackingField) descriptor).getCalleeDescriptor();
|
PropertyDescriptor property = ((AccessorForPropertyBackingField) descriptor).getCalleeDescriptor();
|
||||||
if (!skipLateinitAssertion && property.isLateInit() && JvmAbi.isPropertyWithBackingFieldInOuterClass(property) &&
|
if (!skipLateinitAssertion && property.isLateInit() && DescriptorsJvmAbiUtil.isPropertyWithBackingFieldInOuterClass(property) &&
|
||||||
!JvmCodegenUtil.couldUseDirectAccessToProperty(property, true, false, codegen.context, false)) {
|
!JvmCodegenUtil.couldUseDirectAccessToProperty(property, true, false, codegen.context, false)) {
|
||||||
genNonNullAssertForLateinit(v, property.getName().asString());
|
genNonNullAssertForLateinit(v, property.getName().asString());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,14 +19,13 @@ import org.jetbrains.kotlin.codegen.inline.ReificationArgument
|
|||||||
import org.jetbrains.kotlin.codegen.intrinsics.TypeIntrinsics
|
import org.jetbrains.kotlin.codegen.intrinsics.TypeIntrinsics
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.config.ApiVersion
|
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.isReleaseCoroutines
|
import org.jetbrains.kotlin.config.isReleaseCoroutines
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.SpecialSignatureInfo
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.SpecialSignatureInfo
|
||||||
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.JavaCallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -153,7 +152,7 @@ fun populateCompanionBackingFieldNamesToOuterContextIfNeeded(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!JvmAbi.isClassCompanionObjectWithBackingFieldsInOuter(descriptor)) {
|
if (!DescriptorsJvmAbiUtil.isClassCompanionObjectWithBackingFieldsInOuter(descriptor)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val properties = companion.declarations.filterIsInstance<KtProperty>()
|
val properties = companion.declarations.filterIsInstance<KtProperty>()
|
||||||
@@ -684,4 +683,4 @@ internal fun LabelNode.linkWithLabel(): LabelNode {
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
fun linkedLabel(): Label = LabelNode().linkWithLabel().label
|
fun linkedLabel(): Label = LabelNode().linkWithLabel().label
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.codegen.ASSERTIONS_DISABLED_FIELD_NAME
|
import org.jetbrains.kotlin.codegen.ASSERTIONS_DISABLED_FIELD_NAME
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.BaseExpressionCodegen
|
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.SamWrapperCodegen.SAM_WRAPPER_SUFFIX
|
||||||
import org.jetbrains.kotlin.codegen.`when`.WhenByEnumsMapping
|
import org.jetbrains.kotlin.codegen.`when`.WhenByEnumsMapping
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapperBase
|
|||||||
import org.jetbrains.kotlin.config.JvmDefaultMode
|
import org.jetbrains.kotlin.config.JvmDefaultMode
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
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.java.lazy.types.RawTypeImpl
|
||||||
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
|
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
@@ -283,7 +283,7 @@ class JvmSerializerExtension @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
||||||
if (!JvmAbi.hasJvmFieldAnnotation(this)) return false
|
if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(this)) return false
|
||||||
|
|
||||||
val container = containingDeclaration
|
val container = containingDeclaration
|
||||||
if (!DescriptorUtils.isCompanionObject(container)) return false
|
if (!DescriptorUtils.isCompanionObject(container)) return false
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.serialization.nonSourceAnnotations
|
|||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
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.load.kotlin.NON_EXISTENT_CLASS_NAME
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||||
@@ -291,7 +291,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
||||||
if (!JvmAbi.hasJvmFieldAnnotation(this)) return false
|
if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(this)) return false
|
||||||
|
|
||||||
val container = containingDeclaration
|
val container = containingDeclaration
|
||||||
if (!DescriptorUtils.isCompanionObject(container)) return false
|
if (!DescriptorUtils.isCompanionObject(container)) return false
|
||||||
|
|||||||
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
|
import org.jetbrains.kotlin.fileClasses.isInsideJvmMultifileClassFile
|
||||||
|
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
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 (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
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -25,9 +25,9 @@ import org.jetbrains.kotlin.ir.builders.setSourceRange
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
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.JavaVisibilities
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
||||||
|
|
||||||
|
|||||||
+38
@@ -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<FqName, Name> = 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<Name, List<Name>> =
|
||||||
|
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<FqName> = PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.keys
|
||||||
|
val SPECIAL_SHORT_NAMES: Set<Name> = SPECIAL_FQ_NAMES.map(FqName::shortName).toSet()
|
||||||
|
|
||||||
|
fun getPropertyNameCandidatesBySpecialGetterName(name1: Name): List<Name> =
|
||||||
|
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()
|
||||||
@@ -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')
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-14
@@ -1,17 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
* 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.
|
||||||
* 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.load.java
|
package org.jetbrains.kotlin.load.java
|
||||||
@@ -26,7 +15,7 @@ fun propertyNameByGetMethodName(methodName: Name): Name? =
|
|||||||
fun propertyNameBySetMethodName(methodName: Name, withIsPrefix: Boolean): Name? =
|
fun propertyNameBySetMethodName(methodName: Name, withIsPrefix: Boolean): Name? =
|
||||||
propertyNameFromAccessorMethodName(methodName, "set", addPrefix = if (withIsPrefix) "is" else null)
|
propertyNameFromAccessorMethodName(methodName, "set", addPrefix = if (withIsPrefix) "is" else null)
|
||||||
|
|
||||||
fun propertyNamesBySetMethodName(methodName: Name) =
|
fun propertyNamesBySetMethodName(methodName: Name): List<Name> =
|
||||||
listOfNotNull(propertyNameBySetMethodName(methodName, false), propertyNameBySetMethodName(methodName, true))
|
listOfNotNull(propertyNameBySetMethodName(methodName, false), propertyNameBySetMethodName(methodName, true))
|
||||||
|
|
||||||
private fun propertyNameFromAccessorMethodName(
|
private fun propertyNameFromAccessorMethodName(
|
||||||
+35
@@ -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) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -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.isRemoveAtByIndex
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.sameAsRenamedInJvmBuiltin
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithDifferentJvmName.sameAsRenamedInJvmBuiltin
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.sameAsBuiltinMethodWithErasedValueParameters
|
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.DescriptorResolverUtils.resolveOverridesForNonStaticMembers
|
||||||
import org.jetbrains.kotlin.load.java.components.TypeUsage
|
import org.jetbrains.kotlin.load.java.components.TypeUsage
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.*
|
import org.jetbrains.kotlin.load.java.descriptors.*
|
||||||
|
|||||||
@@ -19,29 +19,21 @@
|
|||||||
package org.jetbrains.kotlin.load.java
|
package org.jetbrains.kotlin.load.java
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames.FqNames
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.sameAsBuiltinMethodWithErasedValueParameters
|
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.java.descriptors.JavaClassDescriptor
|
||||||
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents
|
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents
|
||||||
import org.jetbrains.kotlin.load.kotlin.computeJvmSignature
|
import org.jetbrains.kotlin.load.kotlin.computeJvmSignature
|
||||||
import org.jetbrains.kotlin.load.kotlin.signatures
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.firstOverridden
|
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.descriptorUtil.propertyIfAccessor
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
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 data class NameAndSignature(val name: Name, val signature: String)
|
||||||
|
|
||||||
private fun String.method(name: String, parameters: String, returnType: 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")
|
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<Name, List<Name>> =
|
|
||||||
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<Name> =
|
|
||||||
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 {
|
object BuiltinMethodsWithSpecialGenericSignature {
|
||||||
private val ERASED_COLLECTION_PARAMETER_NAME_AND_SIGNATURES = setOf(
|
private val ERASED_COLLECTION_PARAMETER_NAME_AND_SIGNATURES = setOf(
|
||||||
"containsAll", "removeAll", "retainAll"
|
"containsAll", "removeAll", "retainAll"
|
||||||
@@ -270,7 +218,7 @@ fun <T : CallableMemberDescriptor> T.getOverriddenBuiltinWithDifferentJvmName():
|
|||||||
|
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is PropertyDescriptor, is PropertyAccessorDescriptor ->
|
is PropertyDescriptor, is PropertyAccessorDescriptor ->
|
||||||
firstOverridden { BuiltinSpecialProperties.hasBuiltinSpecialPropertyFqName(it.propertyIfAccessor) } as T?
|
firstOverridden { ClassicBuiltinSpecialProperties.hasBuiltinSpecialPropertyFqName(it.propertyIfAccessor) } as T?
|
||||||
is SimpleFunctionDescriptor ->
|
is SimpleFunctionDescriptor ->
|
||||||
firstOverridden {
|
firstOverridden {
|
||||||
BuiltinMethodsWithDifferentJvmName.isBuiltinFunctionWithDifferentNameInJvm(it as SimpleFunctionDescriptor)
|
BuiltinMethodsWithDifferentJvmName.isBuiltinFunctionWithDifferentNameInJvm(it as SimpleFunctionDescriptor)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package kotlin.reflect.jvm.internal
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
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.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -54,7 +54,7 @@ internal abstract class KPropertyImpl<out V> private constructor(
|
|||||||
is KotlinProperty -> {
|
is KotlinProperty -> {
|
||||||
val descriptor = jvmSignature.descriptor
|
val descriptor = jvmSignature.descriptor
|
||||||
JvmProtoBufUtil.getJvmFieldSignature(jvmSignature.proto, jvmSignature.nameResolver, jvmSignature.typeTable)?.let {
|
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)
|
JvmProtoBufUtil.isMovedFromInterfaceCompanion(jvmSignature.proto)
|
||||||
) {
|
) {
|
||||||
container.jClass.enclosingClass
|
container.jClass.enclosingClass
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.load.java.JvmAbi
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.annotations.JVM_FIELD_ANNOTATION_FQ_NAME
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
fun KtModifierListOwner.addAnnotation(
|
fun KtModifierListOwner.addAnnotation(
|
||||||
|
|||||||
@@ -17,10 +17,8 @@ import org.jetbrains.kotlin.load.java.JvmAbi
|
|||||||
import org.jetbrains.kotlin.platform.*
|
import org.jetbrains.kotlin.platform.*
|
||||||
import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments
|
import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments
|
||||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
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.js.isJs
|
||||||
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
|
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.jvm.isJvm
|
||||||
import org.jetbrains.kotlin.platform.konan.*
|
import org.jetbrains.kotlin.platform.konan.*
|
||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
|
|||||||
-6
@@ -17,15 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.idea.debugger
|
package org.jetbrains.kotlin.idea.debugger
|
||||||
|
|
||||||
import com.intellij.debugger.SourcePosition
|
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.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
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.codegen.binding.CodegenBinding.asmTypeForAnonymousClassOrNull
|
||||||
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
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.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class DebuggerClassNameProvider(
|
class DebuggerClassNameProvider(
|
||||||
val project: Project, val searchScope: GlobalSearchScope,
|
val project: Project, val searchScope: GlobalSearchScope,
|
||||||
|
|||||||
+1
-7
@@ -5,10 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.debugger.evaluate.variables
|
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.LocalVariableProxyImpl
|
||||||
import com.intellij.debugger.jdi.StackFrameProxyImpl
|
import com.intellij.debugger.jdi.StackFrameProxyImpl
|
||||||
import com.intellij.openapi.diagnostic.Attachment
|
|
||||||
import com.sun.jdi.*
|
import com.sun.jdi.*
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil.getCapturedFieldName
|
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.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
||||||
import org.jetbrains.kotlin.codegen.inline.INLINE_FUN_VAR_SUFFIX
|
import org.jetbrains.kotlin.codegen.inline.INLINE_FUN_VAR_SUFFIX
|
||||||
import org.jetbrains.kotlin.codegen.inline.INLINE_TRANSFORMATION_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.*
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.ExecutionContext
|
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.CodeFragmentParameter.*
|
import org.jetbrains.kotlin.idea.debugger.evaluate.compilation.CodeFragmentParameter.*
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.compilation.DebugLabelPropertyDescriptorProvider
|
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.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
|
||||||
import kotlin.coroutines.Continuation
|
import kotlin.coroutines.Continuation
|
||||||
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
import org.jetbrains.org.objectweb.asm.Type as AsmType
|
||||||
import com.sun.jdi.Type as JdiType
|
import com.sun.jdi.Type as JdiType
|
||||||
@@ -478,4 +472,4 @@ class VariableFinder(val context: ExecutionContext) {
|
|||||||
|
|
||||||
return frameProxy.thisObject()
|
return frameProxy.thisObject()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
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.ImplementMembersHandler
|
||||||
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideImplementMembersHandler
|
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideImplementMembersHandler
|
||||||
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject
|
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.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
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.jvm.diagnostics.ErrorsJvm
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user