FIR synthetics: make setter subtype check more precise #KT-43347 Fixed

This commit is contained in:
Mikhail Glukhikh
2020-12-24 16:02:38 +03:00
parent 8c8f81330a
commit 0d40fde713
8 changed files with 95 additions and 22 deletions
@@ -0,0 +1,3 @@
fun foo(descriptor: PropertyDescriptorImpl) {
descriptor.setOverriddenDescriptors(overriddenDescriptors = emptyList<PropertyDescriptor?>())
}
@@ -0,0 +1,8 @@
FILE fqName:<root> fileName:/SyntheticSetterType.kt
FUN name:foo visibility:public modality:FINAL <> (descriptor:<root>.PropertyDescriptorImpl) returnType:kotlin.Unit
VALUE_PARAMETER name:descriptor index:0 type:<root>.PropertyDescriptorImpl
BLOCK_BODY
CALL 'public open fun setOverriddenDescriptors (overriddenDescriptors: @[EnhancedNullability] kotlin.collections.Collection<out <root>.CallableMemberDescriptor?>): kotlin.Unit declared in <root>.PropertyDescriptorImpl' type=kotlin.Unit origin=EQ
$this: GET_VAR 'descriptor: <root>.PropertyDescriptorImpl declared in <root>.foo' type=<root>.PropertyDescriptorImpl origin=null
overriddenDescriptors: CALL 'public final fun emptyList <T> (): kotlin.collections.List<T of kotlin.collections.emptyList> declared in kotlin.collections' type=kotlin.collections.List<<root>.PropertyDescriptor?> origin=null
<T>: <root>.PropertyDescriptor?
@@ -0,0 +1,47 @@
// WITH_RUNTIME
// FILE: PropertyDescriptorImpl.java
import org.jetbrains.annotations.NotNull;
import java.util.*;
public class PropertyDescriptorImpl implements PropertyDescriptor {
@Override
public void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors) {
this.overriddenProperties = (Collection<? extends PropertyDescriptor>) overriddenDescriptors;
}
@NotNull
@Override
public Collection<? extends PropertyDescriptor> getOverriddenDescriptors() {
return overriddenProperties != null ? overriddenProperties : Collections.<PropertyDescriptor>emptyList();
}
}
// FILE: PropertyDescriptor.java
import org.jetbrains.annotations.NotNull;
import java.util.*;
public interface PropertyDescriptor extends CallableMemberDescriptor {
@NotNull
@Override
Collection<? extends PropertyDescriptor> getOverriddenDescriptors();
}
// FILE: CallableMemberDescriptor.java
import org.jetbrains.annotations.NotNull;
import java.util.*;
public interface CallableMemberDescriptor {
@NotNull
Collection<? extends CallableMemberDescriptor> getOverriddenDescriptors();
void setOverriddenDescriptors(@NotNull Collection<? extends CallableMemberDescriptor> overriddenDescriptors);
}
// FILE: SyntheticSetterType.kt
fun foo(descriptor: PropertyDescriptorImpl) {
descriptor.overriddenDescriptors = emptyList()
}
@@ -0,0 +1,3 @@
fun foo(descriptor: PropertyDescriptorImpl) {
descriptor.setOverriddenDescriptors(overriddenDescriptors = emptyList<@FlexibleNullability PropertyDescriptor?>())
}
@@ -0,0 +1,8 @@
FILE fqName:<root> fileName:/SyntheticSetterType.kt
FUN name:foo visibility:public modality:FINAL <> (descriptor:<root>.PropertyDescriptorImpl) returnType:kotlin.Unit
VALUE_PARAMETER name:descriptor index:0 type:<root>.PropertyDescriptorImpl
BLOCK_BODY
CALL 'public open fun setOverriddenDescriptors (overriddenDescriptors: @[EnhancedNullability] kotlin.collections.MutableCollection<out @[FlexibleNullability] <root>.CallableMemberDescriptor?>): kotlin.Unit declared in <root>.PropertyDescriptorImpl' type=kotlin.Unit origin=EQ
$this: GET_VAR 'descriptor: <root>.PropertyDescriptorImpl declared in <root>.foo' type=<root>.PropertyDescriptorImpl origin=null
overriddenDescriptors: CALL 'public final fun emptyList <T> (): kotlin.collections.List<T of kotlin.collections.emptyList> declared in kotlin.collections' type=kotlin.collections.List<@[FlexibleNullability] <root>.PropertyDescriptor?> origin=null
<T>: @[FlexibleNullability] <root>.PropertyDescriptor?