From 88f061234b3db18db88b30c235725b94732e007b Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Tue, 22 Nov 2011 21:39:55 +0400 Subject: [PATCH] Refactoring. --- .../translate/ClassDeclarationTranslator.java | 4 +-- .../translate/ClassInitializerVisitor.java | 1 - .../k2js/translate/ClassTranslator.java | 8 ----- .../translate/DeclarationBodyVisitor.java | 3 +- .../k2js/translate/ExpressionVisitor.java | 5 +-- .../k2js/translate/FunctionTranslator.java | 8 ----- .../k2js/translate/GenerationState.java | 1 - .../org/jetbrains/k2js/translate/Namer.java | 4 +++ .../k2js/translate/NamespaceTranslator.java | 32 ++++++++++++------- .../k2js/translate/PatternTranslator.java | 8 +++-- .../k2js/translate/ReferenceProvider.java | 1 - .../k2js/translate/ReferenceTranslator.java | 4 --- .../jetbrains/k2js/translate/Translation.java | 3 +- 13 files changed, 37 insertions(+), 45 deletions(-) diff --git a/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java b/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java index fe5cc6fd541..40e72965ab4 100644 --- a/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java @@ -38,8 +38,8 @@ public final class ClassDeclarationTranslator extends AbstractTranslator { } public void generateDeclarations() { - //TODO: hardcoded string - declarationsObject = translationContext().enclosingScope().declareName("classes"); + declarationsObject = translationContext().enclosingScope().declareName(Namer.nameForClassesVariable()); + assert declarationsObject != null; declarationsStatement = AstUtil.newAssignmentStatement(declarationsObject.makeRef(), generateDummyFunctionInvocation()); } diff --git a/translator/src/org/jetbrains/k2js/translate/ClassInitializerVisitor.java b/translator/src/org/jetbrains/k2js/translate/ClassInitializerVisitor.java index d5fc56f3f40..95502588c0a 100644 --- a/translator/src/org/jetbrains/k2js/translate/ClassInitializerVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/ClassInitializerVisitor.java @@ -72,7 +72,6 @@ public final class ClassInitializerVisitor extends AbstractInitializerVisitor { return result; } - @Override @NotNull public List visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) { diff --git a/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java b/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java index 9b4bfa6efb3..22c6e54cbe2 100644 --- a/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java @@ -50,14 +50,6 @@ public final class ClassTranslator extends AbstractTranslator { } } - //TODO -// @NotNull -// private JsStatement classDeclarationStatement(@NotNull JetClass classDeclaration, -// @NotNull JsInvocation jsClassDeclaration) { -// JsNameRef unqualifiedClassNameReference = translationContext().getNameForElement(classDeclaration).makeRef(); -// return AstUtil.newAssignmentStatement(unqualifiedClassNameReference, jsClassDeclaration); -// } - private void addClassOwnDeclarations(@NotNull JetClass classDeclaration, @NotNull JsInvocation jsClassDeclaration) { JsObjectLiteral jsClassDescription = translateClassDeclarations(classDeclaration); diff --git a/translator/src/org/jetbrains/k2js/translate/DeclarationBodyVisitor.java b/translator/src/org/jetbrains/k2js/translate/DeclarationBodyVisitor.java index 056269c259d..082e6628d2b 100644 --- a/translator/src/org/jetbrains/k2js/translate/DeclarationBodyVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/DeclarationBodyVisitor.java @@ -38,11 +38,10 @@ public final class DeclarationBodyVisitor extends TranslatorVisitor visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) { - //return Arrays.asList(Translation.classTranslator(context).translateClass(expression)); + //TODO: we are interested only in class own declarations return Collections.emptyList(); } diff --git a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java index c428131d6b5..32530e12aae 100644 --- a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java @@ -108,8 +108,9 @@ public final class ExpressionVisitor extends TranslatorVisitor { private boolean isConstructorInvocation(@NotNull JetCallExpression expression, @NotNull TranslationContext context) { - ResolvedCall resolvedCall = - BindingUtils.getResolvedCall(context.bindingContext(), expression.getCalleeExpression()); + JetExpression calleeExpression = expression.getCalleeExpression(); + assert calleeExpression != null : "JetCallExpression should have not null callee"; + ResolvedCall resolvedCall = BindingUtils.getResolvedCall(context.bindingContext(), calleeExpression); if (resolvedCall == null) { return false; } diff --git a/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java b/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java index 9d39c124d24..4765575d6bf 100644 --- a/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java @@ -22,14 +22,6 @@ public final class FunctionTranslator extends AbstractTranslator { super(context); } - @NotNull - public JsStatement translateAsFunctionDeclaration(@NotNull JetNamedFunction expression) { - JsName functionName = translationContext().getNameForElement(expression); - JsFunction function = generateFunctionObject(expression); - return AstUtil.newAssignmentStatement - (translationContext().getNamespaceQualifiedReference(functionName), function); - } - @NotNull JsPropertyInitializer translateAsMethod(@NotNull JetNamedFunction expression) { JsName functionName = translationContext().getNameForElement(expression); diff --git a/translator/src/org/jetbrains/k2js/translate/GenerationState.java b/translator/src/org/jetbrains/k2js/translate/GenerationState.java index da6fe418b62..2cf358d7698 100644 --- a/translator/src/org/jetbrains/k2js/translate/GenerationState.java +++ b/translator/src/org/jetbrains/k2js/translate/GenerationState.java @@ -18,7 +18,6 @@ public final class GenerationState { public GenerationState() { } - //TODO method too long @NotNull public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext, @NotNull List namespaces) { //TODO hardcoded diff --git a/translator/src/org/jetbrains/k2js/translate/Namer.java b/translator/src/org/jetbrains/k2js/translate/Namer.java index 794c56eb618..c912338f3c0 100644 --- a/translator/src/org/jetbrains/k2js/translate/Namer.java +++ b/translator/src/org/jetbrains/k2js/translate/Namer.java @@ -83,5 +83,9 @@ public final class Namer { return AstUtil.newQualifiedNameRef("initialize"); } + public static String nameForClassesVariable() { + return "classes"; + } + } diff --git a/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java b/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java index eb7fb486b95..08836714537 100644 --- a/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java @@ -17,6 +17,8 @@ public final class NamespaceTranslator extends AbstractTranslator { private final JetNamespace namespace; @NotNull private final JsName namespaceName; + @NotNull + private final ClassDeclarationTranslator classDeclarationTranslator; @NotNull public static JsStatement translate(@NotNull TranslationContext context, @@ -28,23 +30,22 @@ public final class NamespaceTranslator extends AbstractTranslator { super(context); this.namespace = namespace; this.namespaceName = context.getNameForElement(namespace); + this.classDeclarationTranslator = new ClassDeclarationTranslator(context, namespace); } @NotNull public JsStatement translateNamespace() { - ClassDeclarationTranslator translator = new ClassDeclarationTranslator(translationContext(), namespace); - translator.generateDeclarations(); - JsName declarationsObjectName = translator.getDeclarationsObjectName(); - JsBlock result = new JsBlock(); - JsInvocation namespaceDeclaration = namespaceCreateMethodInvocation(); - namespaceDeclaration.getArguments().add(declarationsObjectName.makeRef()); - addMemberDeclarations(namespaceDeclaration); - result.addStatement(translator.getDeclarationsStatement()); - result.addStatement(namespaceDeclarationStatement(namespaceDeclaration)); - result.addStatement(namespaceInitializeStatement()); - return result; + classDeclarationTranslator.generateDeclarations(); + return AstUtil.newBlock(classDeclarationsStatement(), + namespaceOwnDeclarationStatement(), + namespaceInitializeStatement()); } + private JsStatement classDeclarationsStatement() { + return classDeclarationTranslator.getDeclarationsStatement(); + } + + @NotNull private JsStatement namespaceInitializeStatement() { JsNameRef initializeMethodReference = Namer.initializeMethodReference(); AstUtil.setQualifier(initializeMethodReference, namespaceName.makeRef()); @@ -57,11 +58,18 @@ public final class NamespaceTranslator extends AbstractTranslator { } @NotNull - private JsStatement namespaceDeclarationStatement(@NotNull JsInvocation namespaceDeclaration) { + private JsStatement namespaceOwnDeclarationStatement() { + JsInvocation namespaceDeclaration = namespaceCreateMethodInvocation(); + addMemberDeclarations(namespaceDeclaration); + addClassesDeclarations(namespaceDeclaration); return AstUtil.newAssignmentStatement (translationContext().getNameForElement(namespace).makeRef(), namespaceDeclaration); } + private void addClassesDeclarations(@NotNull JsInvocation namespaceDeclaration) { + namespaceDeclaration.getArguments().add(classDeclarationTranslator.getDeclarationsObjectName().makeRef()); + } + private void addMemberDeclarations(@NotNull JsInvocation jsNamespace) { JsObjectLiteral jsClassDescription = translateNamespaceMemberDeclarations(); jsNamespace.getArguments().add(jsClassDescription); diff --git a/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java b/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java index caa33a25633..e7eac5f991e 100644 --- a/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java @@ -1,6 +1,9 @@ package org.jetbrains.k2js.translate; -import com.google.dart.compiler.backend.js.ast.*; +import com.google.dart.compiler.backend.js.ast.JsExpression; +import com.google.dart.compiler.backend.js.ast.JsInvocation; +import com.google.dart.compiler.backend.js.ast.JsName; +import com.google.dart.compiler.backend.js.ast.JsNameRef; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; @@ -99,7 +102,6 @@ public final class PatternTranslator extends AbstractTranslator { assert patternExpression != null : "Expression patter should have an expression."; JsExpression expressionToMatchAgainst = Translation.translateAsExpression(patternExpression, translationContext()); - //TODO: should call equals method here - return new JsBinaryOperation(JsBinaryOperator.REF_EQ, expressionToMatch, expressionToMatchAgainst); + return AstUtil.equals(expressionToMatch, expressionToMatchAgainst); } } diff --git a/translator/src/org/jetbrains/k2js/translate/ReferenceProvider.java b/translator/src/org/jetbrains/k2js/translate/ReferenceProvider.java index e64dba921ff..3d53b06d604 100644 --- a/translator/src/org/jetbrains/k2js/translate/ReferenceProvider.java +++ b/translator/src/org/jetbrains/k2js/translate/ReferenceProvider.java @@ -29,7 +29,6 @@ public final class ReferenceProvider { this.requiresNamespaceQualifier = requiresNamespaceQualifier(); } - //TODO @NotNull public JsNameRef generateCorrectReference() { if (requiresNamespaceQualifier) { diff --git a/translator/src/org/jetbrains/k2js/translate/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/ReferenceTranslator.java index ec288fd9ec2..eba33d226df 100644 --- a/translator/src/org/jetbrains/k2js/translate/ReferenceTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/ReferenceTranslator.java @@ -24,11 +24,7 @@ public class ReferenceTranslator extends AbstractTranslator { @NotNull JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression) { - //TODO: this is only a hack for now - // Problem is that namespace properties do not generate getters and setter actually so they must be referenced - // by name JsExpression result; - String name = expression.getReferencedName(); result = resolveAsPropertyAccess(expression); if (result != null) { return result; diff --git a/translator/src/org/jetbrains/k2js/translate/Translation.java b/translator/src/org/jetbrains/k2js/translate/Translation.java index 95f45474b52..27b8e3631ab 100644 --- a/translator/src/org/jetbrains/k2js/translate/Translation.java +++ b/translator/src/org/jetbrains/k2js/translate/Translation.java @@ -13,7 +13,8 @@ import org.jetbrains.k2js.declarations.Declarations; /** * @author Talanov Pavel *

- * This class is a factory for obtaining instances of translators. + * This class provides a interface which all translators use to interact with each other. + * Goal is to simlify interaction between translators. */ public final class Translation {