JS backend: added generation @lends JsDoc annotation.
For more information about @lends see https://code.google.com/p/jsdoc-toolkit/wiki/TagLends (cherry picked from commit 1269911)
This commit is contained in:
Binary file not shown.
Binary file not shown.
+24
-10
@@ -123,25 +123,28 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
|
|
||||||
private void translate(@NotNull JsInvocation createInvocation, @NotNull TranslationContext context) {
|
private void translate(@NotNull JsInvocation createInvocation, @NotNull TranslationContext context) {
|
||||||
addSuperclassReferences(createInvocation);
|
addSuperclassReferences(createInvocation);
|
||||||
addClassOwnDeclarations(createInvocation, context);
|
addClassOwnDeclarations(createInvocation.getArguments(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isTrait() {
|
private boolean isTrait() {
|
||||||
return descriptor.getKind().equals(ClassKind.TRAIT);
|
return descriptor.getKind().equals(ClassKind.TRAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addClassOwnDeclarations(@NotNull JsInvocation jsClassDeclaration, @NotNull final TranslationContext declarationContext) {
|
private void addClassOwnDeclarations(@NotNull List<JsExpression> invocationArguments, @NotNull TranslationContext declarationContext) {
|
||||||
final List<JsPropertyInitializer> properties = new SmartList<JsPropertyInitializer>();
|
final List<JsPropertyInitializer> properties = new SmartList<JsPropertyInitializer>();
|
||||||
|
|
||||||
final List<JsPropertyInitializer> staticProperties;
|
final List<JsPropertyInitializer> staticProperties;
|
||||||
boolean isTopLevelDeclaration = context() == declarationContext;
|
boolean isTopLevelDeclaration = context() == declarationContext;
|
||||||
|
final JsNameRef qualifiedReference;
|
||||||
if (!isTopLevelDeclaration) {
|
if (!isTopLevelDeclaration) {
|
||||||
staticProperties = null;
|
staticProperties = null;
|
||||||
|
qualifiedReference = null;
|
||||||
}
|
}
|
||||||
else if (descriptor.getKind().isObject()) {
|
else if (descriptor.getKind().isObject()) {
|
||||||
staticProperties = null;
|
staticProperties = null;
|
||||||
declarationContext.literalFunctionTranslator()
|
qualifiedReference = null;
|
||||||
.setDefinitionPlace(new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
declarationContext.literalFunctionTranslator().setDefinitionPlace(
|
||||||
|
new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression> compute() {
|
public Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression> compute() {
|
||||||
@@ -150,13 +153,14 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
qualifiedReference = getQualifiedReference(declarationContext, descriptor);
|
||||||
staticProperties = new SmartList<JsPropertyInitializer>();
|
staticProperties = new SmartList<JsPropertyInitializer>();
|
||||||
declarationContext.literalFunctionTranslator()
|
declarationContext.literalFunctionTranslator().setDefinitionPlace(
|
||||||
.setDefinitionPlace(new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression> compute() {
|
public Trinity<List<JsPropertyInitializer>, 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()) {
|
if (!isTrait()) {
|
||||||
JsFunction initializer = new ClassInitializerTranslator(classDeclaration, declarationContext).generateInitializeMethod();
|
JsFunction initializer = new ClassInitializerTranslator(classDeclaration, declarationContext).generateInitializeMethod();
|
||||||
if (context().isEcma5()) {
|
if (context().isEcma5()) {
|
||||||
jsClassDeclaration.getArguments().add(initializer.getBody().getStatements().isEmpty() ? JsLiteral.NULL : initializer);
|
invocationArguments.add(initializer.getBody().getStatements().isEmpty() ? JsLiteral.NULL : initializer);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
properties.add(new JsPropertyInitializer(Namer.initializeMethodReference(), initializer));
|
properties.add(new JsPropertyInitializer(Namer.initializeMethodReference(), initializer));
|
||||||
@@ -180,10 +184,20 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
|
|
||||||
boolean hasStaticProperties = staticProperties != null && !staticProperties.isEmpty();
|
boolean hasStaticProperties = staticProperties != null && !staticProperties.isEmpty();
|
||||||
if (!properties.isEmpty() || hasStaticProperties) {
|
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) {
|
if (hasStaticProperties) {
|
||||||
jsClassDeclaration.getArguments().add(new JsObjectLiteral(staticProperties, true));
|
invocationArguments.add(new JsDocComment("lends", qualifiedReference));
|
||||||
|
invocationArguments.add(new JsObjectLiteral(staticProperties, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user