From 70c5f05f6e64414fac4658280ccf4b9ba94548e0 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 9 Sep 2016 17:48:32 +0300 Subject: [PATCH] JS: fix compile-time failure when inheriting one local class from another local class --- .../jetbrains/kotlin/js/translate/context/UsageTracker.kt | 5 ++++- 1 file changed, 4 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 cbc75aba6c7..55ffb5c7b41 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 @@ -65,6 +65,7 @@ class UsageTracker( } private fun captureIfNeed(descriptor: DeclarationDescriptor?) { + if (descriptor == null || isCaptured(descriptor) || !isInLocalDeclaration() || isAncestor(containingDescriptor, descriptor, /* strict = */ true) || isReceiverAncestor(descriptor) || isSingletonReceiver(descriptor) @@ -111,7 +112,9 @@ class UsageTracker( val currentClass = descriptor.containingDeclaration as? ClassDescriptor ?: return false // We always capture enclosing class if it's not outer (i.e. we are capturing members of enclosing class to a local class) - if (containingClass.containingDeclaration !is ClassDescriptor) return false + if (containingClass != currentClass && containingClass.containingDeclaration !is ClassDescriptor) { + return false + } for (outerDeclaration in generateSequence(containingClass) { it.containingDeclaration as? ClassDescriptor }) { if (DescriptorUtils.isSubclass(outerDeclaration, currentClass)) return true