Pass accessorKind into AccessorForCallableDescriptor
This commit is contained in:
@@ -24,4 +24,5 @@ interface AccessorForCallableDescriptor<T : CallableMemberDescriptor> {
|
||||
|
||||
val superCallTarget: ClassDescriptor?
|
||||
|
||||
val accessorKind: AccessorKind
|
||||
}
|
||||
|
||||
+18
-19
@@ -23,13 +23,13 @@ import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
|
||||
class AccessorForConstructorDescriptor(
|
||||
private val calleeDescriptor: ClassConstructorDescriptor,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
private val superCallTarget: ClassDescriptor?
|
||||
override val calleeDescriptor: ClassConstructorDescriptor,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
override val superCallTarget: ClassDescriptor?,
|
||||
override val accessorKind: AccessorKind
|
||||
) : AbstractAccessorForFunctionDescriptor(containingDeclaration, Name.special("<init>")),
|
||||
ClassConstructorDescriptor,
|
||||
AccessorForCallableDescriptor<ConstructorDescriptor> {
|
||||
override fun getCalleeDescriptor(): ConstructorDescriptor = calleeDescriptor
|
||||
ClassConstructorDescriptor,
|
||||
AccessorForCallableDescriptor<ConstructorDescriptor> {
|
||||
|
||||
override fun getContainingDeclaration(): ClassDescriptor = calleeDescriptor.containingDeclaration
|
||||
|
||||
@@ -39,16 +39,15 @@ class AccessorForConstructorDescriptor(
|
||||
|
||||
override fun getReturnType(): KotlinType = super.getReturnType()!!
|
||||
|
||||
override fun getSuperCallTarget(): ClassDescriptor? = superCallTarget
|
||||
|
||||
override fun substitute(substitutor: TypeSubstitutor) = super.substitute(substitutor) as ClassConstructorDescriptor
|
||||
|
||||
override fun copy(
|
||||
newOwner: DeclarationDescriptor,
|
||||
modality: Modality,
|
||||
visibility: Visibility,
|
||||
kind: CallableMemberDescriptor.Kind,
|
||||
copyOverrides: Boolean
|
||||
newOwner: DeclarationDescriptor,
|
||||
modality: Modality,
|
||||
visibility: Visibility,
|
||||
kind: CallableMemberDescriptor.Kind,
|
||||
copyOverrides: Boolean
|
||||
): AccessorForConstructorDescriptor {
|
||||
throw UnsupportedOperationException()
|
||||
}
|
||||
@@ -57,13 +56,13 @@ class AccessorForConstructorDescriptor(
|
||||
|
||||
init {
|
||||
initialize(
|
||||
DescriptorUtils.getReceiverParameterType(extensionReceiverParameter),
|
||||
calleeDescriptor.dispatchReceiverParameter,
|
||||
copyTypeParameters(calleeDescriptor),
|
||||
copyValueParameters(calleeDescriptor),
|
||||
calleeDescriptor.returnType,
|
||||
Modality.FINAL,
|
||||
Visibilities.LOCAL
|
||||
DescriptorUtils.getReceiverParameterType(extensionReceiverParameter),
|
||||
calleeDescriptor.dispatchReceiverParameter,
|
||||
copyTypeParameters(calleeDescriptor),
|
||||
copyValueParameters(calleeDescriptor),
|
||||
calleeDescriptor.returnType,
|
||||
Modality.FINAL,
|
||||
Visibilities.LOCAL
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,8 @@ class AccessorForFunctionDescriptor(
|
||||
override val calleeDescriptor: FunctionDescriptor,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
override val superCallTarget: ClassDescriptor?,
|
||||
private val nameSuffix: String
|
||||
private val nameSuffix: String,
|
||||
override val accessorKind: AccessorKind
|
||||
) : AbstractAccessorForFunctionDescriptor(containingDeclaration, Name.identifier("access$$nameSuffix")),
|
||||
AccessorForCallableDescriptor<FunctionDescriptor> {
|
||||
|
||||
@@ -63,6 +64,6 @@ class AccessorForFunctionDescriptor(
|
||||
annotations: Annotations,
|
||||
source: SourceElement
|
||||
): FunctionDescriptorImpl {
|
||||
return AccessorForFunctionDescriptor(calleeDescriptor, newOwner, superCallTarget, nameSuffix)
|
||||
return AccessorForFunctionDescriptor(calleeDescriptor, newOwner, superCallTarget, nameSuffix, accessorKind)
|
||||
}
|
||||
}
|
||||
|
||||
+15
-14
@@ -22,19 +22,20 @@ import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class AccessorForPropertyBackingField(
|
||||
property: PropertyDescriptor,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
delegateType: KotlinType?,
|
||||
extensionReceiverParameter: ReceiverParameterDescriptor?,
|
||||
dispatchReceiverParameter: ReceiverParameterDescriptor?,
|
||||
nameSuffix: String,
|
||||
val fieldAccessorKind: AccessorKind
|
||||
property: PropertyDescriptor,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
delegateType: KotlinType?,
|
||||
extensionReceiverParameter: ReceiverParameterDescriptor?,
|
||||
dispatchReceiverParameter: ReceiverParameterDescriptor?,
|
||||
nameSuffix: String,
|
||||
fieldAccessorKind: AccessorKind
|
||||
) : AccessorForPropertyDescriptor(
|
||||
property,
|
||||
delegateType ?: property.type,
|
||||
extensionReceiverParameter?.type,
|
||||
dispatchReceiverParameter,
|
||||
containingDeclaration,
|
||||
null,
|
||||
nameSuffix
|
||||
property,
|
||||
delegateType ?: property.type,
|
||||
extensionReceiverParameter?.type,
|
||||
dispatchReceiverParameter,
|
||||
containingDeclaration,
|
||||
null,
|
||||
nameSuffix,
|
||||
fieldAccessorKind
|
||||
)
|
||||
|
||||
+15
-11
@@ -35,7 +35,8 @@ open class AccessorForPropertyDescriptor private constructor(
|
||||
override val superCallTarget: ClassDescriptor?,
|
||||
val accessorSuffix: String,
|
||||
val isWithSyntheticGetterAccessor: Boolean,
|
||||
val isWithSyntheticSetterAccessor: Boolean
|
||||
val isWithSyntheticSetterAccessor: Boolean,
|
||||
final override val accessorKind: AccessorKind
|
||||
) : PropertyDescriptorImpl(
|
||||
containingDeclaration,
|
||||
null,
|
||||
@@ -60,13 +61,15 @@ open class AccessorForPropertyDescriptor private constructor(
|
||||
superCallTarget: ClassDescriptor?,
|
||||
nameSuffix: String,
|
||||
getterAccessorRequired: Boolean,
|
||||
setterAccessorRequired: Boolean
|
||||
setterAccessorRequired: Boolean,
|
||||
accessorKind: AccessorKind
|
||||
) : this(
|
||||
property, property.type, DescriptorUtils.getReceiverParameterType(property.extensionReceiverParameter),
|
||||
/* dispatchReceiverParameter = */
|
||||
if (property.isJvmStaticInObjectOrClassOrInterface()) null else property.dispatchReceiverParameter,
|
||||
containingDeclaration, superCallTarget, nameSuffix,
|
||||
getterAccessorRequired, setterAccessorRequired
|
||||
getterAccessorRequired, setterAccessorRequired,
|
||||
accessorKind
|
||||
)
|
||||
|
||||
protected constructor(
|
||||
@@ -76,7 +79,8 @@ open class AccessorForPropertyDescriptor private constructor(
|
||||
dispatchReceiverParameter: ReceiverParameterDescriptor?,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
superCallTarget: ClassDescriptor?,
|
||||
nameSuffix: String
|
||||
nameSuffix: String,
|
||||
accessorKind: AccessorKind
|
||||
) : this(
|
||||
original,
|
||||
propertyType,
|
||||
@@ -86,20 +90,20 @@ open class AccessorForPropertyDescriptor private constructor(
|
||||
superCallTarget,
|
||||
nameSuffix,
|
||||
true,
|
||||
true
|
||||
) {
|
||||
}
|
||||
true,
|
||||
accessorKind
|
||||
)
|
||||
|
||||
init {
|
||||
setType(propertyType, emptyList<TypeParameterDescriptorImpl>(), dispatchReceiverParameter, receiverType)
|
||||
|
||||
val getterDescriptor =
|
||||
if (isWithSyntheticGetterAccessor) Getter(this) else calleeDescriptor.getter as PropertyGetterDescriptorImpl?
|
||||
val setterDescriptor = if (isWithSyntheticSetterAccessor) Setter(this) else calleeDescriptor.setter
|
||||
if (isWithSyntheticGetterAccessor) Getter(this, accessorKind) else calleeDescriptor.getter as PropertyGetterDescriptorImpl?
|
||||
val setterDescriptor = if (isWithSyntheticSetterAccessor) Setter(this, accessorKind) else calleeDescriptor.setter
|
||||
initialize(getterDescriptor, setterDescriptor)
|
||||
}
|
||||
|
||||
class Getter(property: AccessorForPropertyDescriptor) : PropertyGetterDescriptorImpl(
|
||||
class Getter(property: AccessorForPropertyDescriptor, override val accessorKind: AccessorKind) : PropertyGetterDescriptorImpl(
|
||||
property,
|
||||
Annotations.EMPTY,
|
||||
Modality.FINAL,
|
||||
@@ -124,7 +128,7 @@ open class AccessorForPropertyDescriptor private constructor(
|
||||
|
||||
}
|
||||
|
||||
class Setter(property: AccessorForPropertyDescriptor) : PropertySetterDescriptorImpl(
|
||||
class Setter(property: AccessorForPropertyDescriptor, override val accessorKind: AccessorKind) : PropertySetterDescriptorImpl(
|
||||
property,
|
||||
Annotations.EMPTY,
|
||||
Modality.FINAL,
|
||||
|
||||
@@ -759,7 +759,7 @@ public abstract class MemberCodegen<T extends KtPureElement/* TODO: & KtDeclarat
|
||||
@Override
|
||||
public void doGenerateBody(@NotNull ExpressionCodegen codegen, @NotNull JvmMethodSignature signature) {
|
||||
AccessorKind fieldAccessorKind = accessor instanceof AccessorForPropertyBackingField
|
||||
? ((AccessorForPropertyBackingField) accessor).getFieldAccessorKind() : null;
|
||||
? accessor.getAccessorKind() : null;
|
||||
boolean syntheticBackingField = fieldAccessorKind == AccessorKind.FIELD_FROM_LOCAL;
|
||||
boolean forceFieldForCompanionProperty = JvmAbi.isPropertyWithBackingFieldInOuterClass(original) &&
|
||||
!isCompanionObject(accessor.getContainingDeclaration());
|
||||
|
||||
@@ -88,6 +88,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
private final @NotNull DeclarationDescriptor containingDeclaration;
|
||||
private final @Nullable ClassDescriptor superCallTarget;
|
||||
private final @NotNull String nameSuffix;
|
||||
private final @NotNull AccessorKind accessorKind;
|
||||
|
||||
private AccessorForPropertyDescriptor withSyntheticGetterAndSetter = null;
|
||||
private AccessorForPropertyDescriptor withSyntheticGetter = null;
|
||||
@@ -97,12 +98,14 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
@NotNull PropertyDescriptor property,
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@Nullable ClassDescriptor superCallTarget,
|
||||
@NotNull String nameSuffix
|
||||
@NotNull String nameSuffix,
|
||||
@NotNull AccessorKind accessorKind
|
||||
) {
|
||||
this.property = property;
|
||||
this.containingDeclaration = containingDeclaration;
|
||||
this.superCallTarget = superCallTarget;
|
||||
this.nameSuffix = nameSuffix;
|
||||
this.accessorKind = accessorKind;
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@@ -114,7 +117,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
if (withSyntheticGetter == null) {
|
||||
withSyntheticGetter = new AccessorForPropertyDescriptor(
|
||||
property, containingDeclaration, superCallTarget, nameSuffix,
|
||||
true, false);
|
||||
true, false, accessorKind);
|
||||
}
|
||||
return withSyntheticGetter;
|
||||
}
|
||||
@@ -122,7 +125,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
if (withSyntheticSetter == null) {
|
||||
withSyntheticSetter = new AccessorForPropertyDescriptor(
|
||||
property, containingDeclaration, superCallTarget, nameSuffix,
|
||||
false, true);
|
||||
false, true, accessorKind);
|
||||
}
|
||||
return withSyntheticSetter;
|
||||
}
|
||||
@@ -136,7 +139,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
if (withSyntheticGetterAndSetter == null) {
|
||||
withSyntheticGetterAndSetter = new AccessorForPropertyDescriptor(
|
||||
property, containingDeclaration, superCallTarget, nameSuffix,
|
||||
true, true);
|
||||
true, true, accessorKind);
|
||||
}
|
||||
return withSyntheticGetterAndSetter;
|
||||
}
|
||||
@@ -482,16 +485,16 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
String nameSuffix = SyntheticAccessorUtilKt.getAccessorNameSuffix(descriptor, key.superCallLabelTarget, accessorKind);
|
||||
AccessorForCallableDescriptor<?> accessor;
|
||||
if (descriptor instanceof SimpleFunctionDescriptor) {
|
||||
accessor = new AccessorForFunctionDescriptor((FunctionDescriptor) descriptor, contextDescriptor, superCallTarget, nameSuffix);
|
||||
accessor = new AccessorForFunctionDescriptor((FunctionDescriptor) descriptor, contextDescriptor, superCallTarget, nameSuffix, accessorKind);
|
||||
}
|
||||
else if (descriptor instanceof ClassConstructorDescriptor) {
|
||||
accessor = new AccessorForConstructorDescriptor((ClassConstructorDescriptor) descriptor, contextDescriptor, superCallTarget);
|
||||
accessor = new AccessorForConstructorDescriptor((ClassConstructorDescriptor) descriptor, contextDescriptor, superCallTarget, accessorKind);
|
||||
}
|
||||
else if (descriptor instanceof PropertyDescriptor) {
|
||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||
if (accessorKind == AccessorKind.NORMAL) {
|
||||
AccessorForPropertyDescriptorFactory factory =
|
||||
new AccessorForPropertyDescriptorFactory(propertyDescriptor, contextDescriptor, superCallTarget, nameSuffix);
|
||||
new AccessorForPropertyDescriptorFactory(propertyDescriptor, contextDescriptor, superCallTarget, nameSuffix, accessorKind);
|
||||
propertyAccessorFactories.put(key, factory);
|
||||
|
||||
// Record worst case accessor for accessor methods generation.
|
||||
|
||||
Reference in New Issue
Block a user