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:
develar
2013-08-06 17:24:48 +04:00
committed by Zalim Bashorov
parent 995f898116
commit 1fab7346cc
@@ -83,29 +83,28 @@ public final class UsageTracker {
}
}
else if (descriptor instanceof SimpleFunctionDescriptor) {
checkOuterClass(descriptor);
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
// local named function
CallableDescriptor callableDescriptor = (CallableDescriptor) descriptor;
if (!JsDescriptorUtils.isExtension(callableDescriptor) &&
!(containingDeclaration instanceof ClassOrNamespaceDescriptor) &&
if (JsDescriptorUtils.isExtension(callableDescriptor)) {
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)) {
addCapturedMember(callableDescriptor);
}
}
else if (descriptor instanceof ClassDescriptor) {
if (trackedClassDescriptor == descriptor) {
used = true;
}
else if (parent != null) {
UsageTracker p = parent;
do {
if (p.trackedClassDescriptor == descriptor) {
break;
}
}
while ((p = p.parent) != null);
}
else if (descriptor instanceof ClassDescriptor && trackedClassDescriptor == descriptor) {
used = true;
}
}