Fix AssertionError in CodegenUtil.getDelegates
Change getAllOverriddenDescriptors contracti, now it returns original (not substituted) descriptors without any duplicates. First of all it's necessary in CodegenUtil.getDelegates to avoid duplicates (see assertion there), but also it's convenient for all other usages of this method #KT-8154 Fixed
This commit is contained in:
@@ -469,6 +469,9 @@ public class DescriptorUtils {
|
||||
return classDescriptor.getModality() != Modality.FINAL || classDescriptor.getKind() == ClassKind.ENUM_CLASS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return original (not substituted) descriptors without any duplicates
|
||||
*/
|
||||
@NotNull
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <D extends CallableDescriptor> Set<D> getAllOverriddenDescriptors(@NotNull D f) {
|
||||
@@ -481,7 +484,7 @@ public class DescriptorUtils {
|
||||
if (result.contains(current)) return;
|
||||
for (CallableDescriptor callableDescriptor : current.getOriginal().getOverriddenDescriptors()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
D descriptor = (D) callableDescriptor;
|
||||
D descriptor = (D) callableDescriptor.getOriginal();
|
||||
collectAllOverriddenDescriptors(descriptor, result);
|
||||
result.add(descriptor);
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public class OverridingUtil {
|
||||
|
||||
CallableDescriptor originalG = g.getOriginal();
|
||||
for (D overriddenFunction : DescriptorUtils.getAllOverriddenDescriptors(f)) {
|
||||
if (DescriptorEquivalenceForOverrides.INSTANCE.areEquivalent(originalG, overriddenFunction.getOriginal())) return true;
|
||||
if (DescriptorEquivalenceForOverrides.INSTANCE.areEquivalent(originalG, overriddenFunction)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user