Support property accessor in compatibility mode

This commit is contained in:
Mikhael Bogdanov
2018-05-28 20:47:12 +02:00
parent 7f4bd549aa
commit 60f2dbeb8a
5 changed files with 94 additions and 1 deletions
@@ -410,6 +410,13 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
public <D extends CallableMemberDescriptor> D getAccessorForJvmDefaultCompatibility(@NotNull D descriptor) {
if (descriptor instanceof PropertyAccessorDescriptor) {
PropertyDescriptor propertyAccessor = getAccessor(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty(),
AccessorKind.JVM_DEFAULT_COMPATIBILITY, null, null,
descriptor instanceof PropertyGetterDescriptor,
descriptor instanceof PropertySetterDescriptor);
return descriptor instanceof PropertyGetterDescriptor ? (D) propertyAccessor.getGetter() : (D) propertyAccessor.getSetter();
}
return getAccessor(descriptor, AccessorKind.JVM_DEFAULT_COMPATIBILITY, null, null);
}
@@ -491,7 +498,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
}
else if (descriptor instanceof PropertyDescriptor) {
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
if (accessorKind == AccessorKind.NORMAL) {
if (accessorKind == AccessorKind.NORMAL || accessorKind == AccessorKind.JVM_DEFAULT_COMPATIBILITY) {
AccessorForPropertyDescriptorFactory factory =
new AccessorForPropertyDescriptorFactory(propertyDescriptor, contextDescriptor, superCallTarget, nameSuffix, accessorKind);
propertyAccessorFactories.put(key, factory);