From d9504dfe2bde34248e10c6fa53dc5fda9afc6c10 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 23 Mar 2016 16:25:07 +0300 Subject: [PATCH] KT-11030 When local function is declared inside constructor, capture `this` into this function --- .../kotlin/js/translate/context/UsageTracker.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/UsageTracker.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/UsageTracker.kt index 32418cdaf16..d5086ccc427 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/UsageTracker.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/UsageTracker.kt @@ -74,7 +74,16 @@ class UsageTracker( val value = descriptor.value if (value !is ImplicitReceiver) return false - return DescriptorUtils.isObject(value.declarationDescriptor) + if (!DescriptorUtils.isObject(value.declarationDescriptor)) return false + if (containingDescriptor == value.declarationDescriptor) return false + + if (containingDescriptor !is ClassDescriptor) { + val containingClass = generateSequence(containingDescriptor) { it.containingDeclaration as? MemberDescriptor } + .first { it is ClassDescriptor } as? ClassDescriptor + if (containingClass != null && containingClass == value.declarationDescriptor) return false + } + + return true } private fun DeclarationDescriptor.getJsNameForCapturedDescriptor(): JsName {