JS backend: don't bind this if it is not need -- skip methods defined in class, for example Int::plus
(cherry picked from commit e2334f7)
This commit is contained in:
@@ -83,29 +83,28 @@ public final class UsageTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof SimpleFunctionDescriptor) {
|
else if (descriptor instanceof SimpleFunctionDescriptor) {
|
||||||
checkOuterClass(descriptor);
|
|
||||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
|
||||||
// local named function
|
|
||||||
CallableDescriptor callableDescriptor = (CallableDescriptor) descriptor;
|
CallableDescriptor callableDescriptor = (CallableDescriptor) descriptor;
|
||||||
if (!JsDescriptorUtils.isExtension(callableDescriptor) &&
|
if (JsDescriptorUtils.isExtension(callableDescriptor)) {
|
||||||
!(containingDeclaration instanceof ClassOrNamespaceDescriptor) &&
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
||||||
|
if (containingDeclaration instanceof ClassDescriptor) {
|
||||||
|
// skip methods defined in class, for example Int::plus
|
||||||
|
if (outerClassDescriptor == null && (callableDescriptor.getExpectedThisObject() == null || isAncestor(containingDeclaration, memberDescriptor))) {
|
||||||
|
outerClassDescriptor = (ClassDescriptor) containingDeclaration;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// local named function
|
||||||
|
if (!(containingDeclaration instanceof ClassOrNamespaceDescriptor) &&
|
||||||
!isAncestor(memberDescriptor, descriptor)) {
|
!isAncestor(memberDescriptor, descriptor)) {
|
||||||
addCapturedMember(callableDescriptor);
|
addCapturedMember(callableDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof ClassDescriptor) {
|
else if (descriptor instanceof ClassDescriptor && trackedClassDescriptor == descriptor) {
|
||||||
if (trackedClassDescriptor == descriptor) {
|
used = true;
|
||||||
used = true;
|
|
||||||
}
|
|
||||||
else if (parent != null) {
|
|
||||||
UsageTracker p = parent;
|
|
||||||
do {
|
|
||||||
if (p.trackedClassDescriptor == descriptor) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while ((p = p.parent) != null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user