Add optimization for fake overrides creation.
This commit is contained in:
@@ -558,12 +558,14 @@ package test {
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun reparentChild(/*0*/ p0: java.awt.Component!): kotlin.Unit
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun reparentTraverse(/*0*/ p0: [ERROR : Unresolved java classifier: ContainerPeer]!, /*1*/ p1: java.awt.Container!): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun requestFocus(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun requestFocus(/*0*/ p0: kotlin.Boolean): kotlin.Boolean
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun requestFocus(/*0*/ p0: [ERROR : Unresolved java classifier: Cause]!): kotlin.Boolean
|
||||
protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun requestFocus(/*0*/ p0: kotlin.Boolean): kotlin.Boolean
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun requestFocus(/*0*/ p0: kotlin.Boolean, /*1*/ p1: [ERROR : Unresolved java classifier: Cause]!): kotlin.Boolean
|
||||
invisible_fake final override /*1*/ /*fake_override*/ fun requestFocusHelper(/*0*/ p0: kotlin.Boolean, /*1*/ p1: kotlin.Boolean): kotlin.Boolean
|
||||
invisible_fake final override /*1*/ /*fake_override*/ fun requestFocusHelper(/*0*/ p0: kotlin.Boolean, /*1*/ p1: kotlin.Boolean, /*2*/ p2: [ERROR : Unresolved java classifier: Cause]!): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun requestFocusInWindow(): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun requestFocusInWindow(/*0*/ p0: kotlin.Boolean): kotlin.Boolean
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun requestFocusInWindow(/*0*/ p0: [ERROR : Unresolved java classifier: Cause]!): kotlin.Boolean
|
||||
protected/*protected and package*/ open override /*1*/ /*fake_override*/ fun requestFocusInWindow(/*0*/ p0: kotlin.Boolean): kotlin.Boolean
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun requestFocusInWindow(/*0*/ p0: kotlin.Boolean, /*1*/ p1: [ERROR : Unresolved java classifier: Cause]!): kotlin.Boolean
|
||||
@kotlin.Deprecated(message = "Deprecated in Java") public open override /*1*/ /*fake_override*/ fun reshape(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.Int, /*3*/ p3: kotlin.Int): kotlin.Unit
|
||||
invisible_fake open override /*1*/ /*fake_override*/ fun reshapeNativePeer(/*0*/ p0: kotlin.Int, /*1*/ p1: kotlin.Int, /*2*/ p2: kotlin.Int, /*3*/ p3: kotlin.Int, /*4*/ p4: kotlin.Int): kotlin.Unit
|
||||
|
||||
@@ -317,11 +317,32 @@ public class OverridingUtil {
|
||||
return bound;
|
||||
}
|
||||
|
||||
private static boolean allHasSameContainingDeclaration(@NotNull Collection<CallableMemberDescriptor> notOverridden) {
|
||||
if (notOverridden.size() < 2) return true;
|
||||
|
||||
final DeclarationDescriptor containingDeclaration = notOverridden.iterator().next().getContainingDeclaration();
|
||||
return CollectionsKt.all(notOverridden, new Function1<CallableMemberDescriptor, Boolean>() {
|
||||
@Override
|
||||
public Boolean invoke(CallableMemberDescriptor descriptor) {
|
||||
return descriptor.getContainingDeclaration() == containingDeclaration;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void createAndBindFakeOverrides(
|
||||
@NotNull ClassDescriptor current,
|
||||
@NotNull Collection<CallableMemberDescriptor> notOverridden,
|
||||
@NotNull DescriptorSink sink
|
||||
) {
|
||||
// Optimization: If all notOverridden descriptors have the same containing declaration,
|
||||
// then we can just create fake overrides for them, because they should be matched correctly in their containing declaration
|
||||
if (allHasSameContainingDeclaration(notOverridden)) {
|
||||
for (CallableMemberDescriptor descriptor : notOverridden) {
|
||||
createAndBindFakeOverride(Collections.singleton(descriptor), current, sink);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Queue<CallableMemberDescriptor> fromSuperQueue = new LinkedList<CallableMemberDescriptor>(notOverridden);
|
||||
while (!fromSuperQueue.isEmpty()) {
|
||||
CallableMemberDescriptor notOverriddenFromSuper = VisibilityUtilKt.findMemberWithMaxVisibility(fromSuperQueue);
|
||||
|
||||
Reference in New Issue
Block a user