diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ObjectTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ObjectTest.java index 5b167222d22..cf22cc95160 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/ObjectTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/ObjectTest.java @@ -28,7 +28,6 @@ public final class ObjectTest extends SingleFileTranslationTest { fooBoxTest(); } - public void testObjectDeclaration() throws Exception { fooBoxTest(); } @@ -52,7 +51,12 @@ public final class ObjectTest extends SingleFileTranslationTest { public void testObjectInheritingFromClass() throws Exception { fooBoxTest(); } + public void testObjectInObjectWithClosure() throws Exception { fooBoxTest(); } + + public void testLambdaInObjectInsideObject() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index 45938140f7f..b938b543529 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.k2js.translate.context.*; -import org.jetbrains.k2js.translate.expression.InnerObjectTranslator; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator; import org.jetbrains.k2js.translate.utils.JsAstUtils; @@ -38,13 +37,13 @@ import java.util.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances; -import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName; import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer; import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor; import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getSupertypesWithoutFakes; import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters; +import static org.jetbrains.k2js.translate.utils.TranslationUtils.getSuggestedName; import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction; /** @@ -105,21 +104,16 @@ public final class ClassTranslator extends AbstractTranslator { boolean isTopLevelDeclaration = context() == declarationContext; - JsNameRef qualifiedReference; - if (!isTopLevelDeclaration) { - qualifiedReference = null; - } - else { - JsScope scope = context().getScopeForDescriptor(descriptor); - DefinitionPlace definitionPlace; - if (descriptor.getKind().isSingleton() || isAnonymousObject(descriptor)) { - qualifiedReference = null; - definitionPlace = new DefinitionPlace(scope, context().getThisObject(descriptor), properties); - } - else { + JsNameRef qualifiedReference = null; + if (isTopLevelDeclaration) { + DefinitionPlace definitionPlace = null; + + if (!descriptor.getKind().isSingleton() && !isAnonymousObject(descriptor)) { qualifiedReference = declarationContext.getQualifiedReference(descriptor); + JsScope scope = context().getScopeForDescriptor(descriptor); definitionPlace = new DefinitionPlace(scope, qualifiedReference, staticProperties); } + declarationContext = declarationContext.newDeclaration(descriptor, definitionPlace); } diff --git a/js/js.translator/testData/object/cases/lambdaInObjectInsideObject.kt b/js/js.translator/testData/object/cases/lambdaInObjectInsideObject.kt new file mode 100644 index 00000000000..e0730b475d6 --- /dev/null +++ b/js/js.translator/testData/object/cases/lambdaInObjectInsideObject.kt @@ -0,0 +1,10 @@ +package foo + +object A { + object B { + val lambda = { "OK" } + } +} + +fun box() = A.B.lambda() +