diff --git a/js/js.translator/lib/dart-ast.jar b/js/js.translator/lib/dart-ast.jar index dbf3f9dd080..9926c43e053 100644 Binary files a/js/js.translator/lib/dart-ast.jar and b/js/js.translator/lib/dart-ast.jar differ diff --git a/js/js.translator/lib/src/dart-ast-src.jar b/js/js.translator/lib/src/dart-ast-src.jar index 495c44df8ff..fb9b4724a22 100644 Binary files a/js/js.translator/lib/src/dart-ast-src.jar and b/js/js.translator/lib/src/dart-ast-src.jar differ 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 9491ed3fc8c..88fba263404 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 @@ -123,25 +123,28 @@ public final class ClassTranslator extends AbstractTranslator { private void translate(@NotNull JsInvocation createInvocation, @NotNull TranslationContext context) { addSuperclassReferences(createInvocation); - addClassOwnDeclarations(createInvocation, context); + addClassOwnDeclarations(createInvocation.getArguments(), context); } private boolean isTrait() { return descriptor.getKind().equals(ClassKind.TRAIT); } - private void addClassOwnDeclarations(@NotNull JsInvocation jsClassDeclaration, @NotNull final TranslationContext declarationContext) { + private void addClassOwnDeclarations(@NotNull List invocationArguments, @NotNull TranslationContext declarationContext) { final List properties = new SmartList(); final List staticProperties; boolean isTopLevelDeclaration = context() == declarationContext; + final JsNameRef qualifiedReference; if (!isTopLevelDeclaration) { staticProperties = null; + qualifiedReference = null; } else if (descriptor.getKind().isObject()) { staticProperties = null; - declarationContext.literalFunctionTranslator() - .setDefinitionPlace(new NotNullLazyValue, LabelGenerator, JsExpression>>() { + qualifiedReference = null; + declarationContext.literalFunctionTranslator().setDefinitionPlace( + new NotNullLazyValue, LabelGenerator, JsExpression>>() { @Override @NotNull public Trinity, LabelGenerator, JsExpression> compute() { @@ -150,13 +153,14 @@ public final class ClassTranslator extends AbstractTranslator { }); } else { + qualifiedReference = getQualifiedReference(declarationContext, descriptor); staticProperties = new SmartList(); - declarationContext.literalFunctionTranslator() - .setDefinitionPlace(new NotNullLazyValue, LabelGenerator, JsExpression>>() { + declarationContext.literalFunctionTranslator().setDefinitionPlace( + new NotNullLazyValue, LabelGenerator, JsExpression>>() { @Override @NotNull public Trinity, LabelGenerator, JsExpression> compute() { - return createPlace(staticProperties, getQualifiedReference(declarationContext, descriptor)); + return createPlace(staticProperties, qualifiedReference); } }); } @@ -164,7 +168,7 @@ public final class ClassTranslator extends AbstractTranslator { if (!isTrait()) { JsFunction initializer = new ClassInitializerTranslator(classDeclaration, declarationContext).generateInitializeMethod(); if (context().isEcma5()) { - jsClassDeclaration.getArguments().add(initializer.getBody().getStatements().isEmpty() ? JsLiteral.NULL : initializer); + invocationArguments.add(initializer.getBody().getStatements().isEmpty() ? JsLiteral.NULL : initializer); } else { properties.add(new JsPropertyInitializer(Namer.initializeMethodReference(), initializer)); @@ -180,10 +184,20 @@ public final class ClassTranslator extends AbstractTranslator { boolean hasStaticProperties = staticProperties != null && !staticProperties.isEmpty(); if (!properties.isEmpty() || hasStaticProperties) { - jsClassDeclaration.getArguments().add(properties.isEmpty() ? JsLiteral.NULL : new JsObjectLiteral(properties, true)); + if (properties.isEmpty()) { + invocationArguments.add(JsLiteral.NULL); + } + else { + if (qualifiedReference != null) { + // about "prototype" -- see http://code.google.com/p/jsdoc-toolkit/wiki/TagLends + invocationArguments.add(new JsDocComment("lends", new JsNameRef("prototype", qualifiedReference))); + } + invocationArguments.add(new JsObjectLiteral(properties, true)); + } } if (hasStaticProperties) { - jsClassDeclaration.getArguments().add(new JsObjectLiteral(staticProperties, true)); + invocationArguments.add(new JsDocComment("lends", qualifiedReference)); + invocationArguments.add(new JsObjectLiteral(staticProperties, true)); } }