From b43b559ca6b353b5645b508e189e50cc54474d73 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Wed, 1 Feb 2012 00:20:17 +0400 Subject: [PATCH] run code coverage eliminate dead and unuseful code --- .../org/jetbrains/k2js/analyze/Analyzer.java | 8 ++-- .../k2js/generate/CodeGenerator.java | 6 --- .../translate/context/StandardClasses.java | 35 ++------------- .../k2js/translate/context/StaticContext.java | 17 +------ .../translate/context/TranslationContext.java | 5 +-- .../AbstractDeclarationVisitor.java | 17 +++---- .../AnnotatedDeclarationVisitor.java | 5 --- .../declaration/KotlinDeclarationVisitor.java | 7 +++ .../declaration/ClassTranslator.java | 4 +- .../expression/ExpressionVisitor.java | 9 ++++ .../expression/PatternTranslator.java | 1 - .../QualifiedExpressionTranslator.java | 45 +++---------------- .../translate/expression/TryTranslator.java | 1 + .../initializer/InitializerVisitor.java | 8 ---- .../k2js/translate/intrinsic/Intrinsics.java | 3 +- .../intrinsic/array/ArrayGetIntrinsic.java | 4 -- .../intrinsic/array/IntrinsicArrayUtils.java | 43 ------------------ .../operation/IncrementTranslator.java | 1 + .../translate/reference/CallTranslator.java | 13 ------ .../reference/PropertyAccessTranslator.java | 4 +- .../reference/ReferenceTranslator.java | 7 --- .../k2js/translate/utils/BindingUtils.java | 15 ++----- .../k2js/translate/utils/DescriptorUtils.java | 7 --- .../k2js/translate/utils/PsiUtils.java | 10 ++++- .../translate/utils/TranslationUtils.java | 5 +-- translator/testFiles/kotlin_lib.js | 10 +++++ 26 files changed, 65 insertions(+), 225 deletions(-) delete mode 100644 translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java diff --git a/translator/src/org/jetbrains/k2js/analyze/Analyzer.java b/translator/src/org/jetbrains/k2js/analyze/Analyzer.java index fdb6b7b1a26..cb99a0ea832 100644 --- a/translator/src/org/jetbrains/k2js/analyze/Analyzer.java +++ b/translator/src/org/jetbrains/k2js/analyze/Analyzer.java @@ -22,6 +22,9 @@ import java.util.List; */ public final class Analyzer { + private Analyzer() { + } + @NotNull public static BindingContext analyzeFilesAndCheckErrors(@NotNull List files, @NotNull Config config) { @@ -57,7 +60,7 @@ public final class Analyzer { @Override public boolean apply(@Nullable PsiFile file) { assert file instanceof JetFile; - boolean notLibFile = !jsLibFiles.contains(file); + @SuppressWarnings("UnnecessaryLocalVariable") boolean notLibFile = !jsLibFiles.contains(file); return notLibFile; } }; @@ -88,7 +91,4 @@ public final class Analyzer { @NotNull WritableScope namespaceMemberScope) { } } - - private Analyzer() { - } } diff --git a/translator/src/org/jetbrains/k2js/generate/CodeGenerator.java b/translator/src/org/jetbrains/k2js/generate/CodeGenerator.java index 7eeefa7e776..d8db032e77f 100644 --- a/translator/src/org/jetbrains/k2js/generate/CodeGenerator.java +++ b/translator/src/org/jetbrains/k2js/generate/CodeGenerator.java @@ -19,12 +19,6 @@ public final class CodeGenerator { private final TextOutput output = new DefaultTextOutput(false); public CodeGenerator() { - - } - - public void generateToConsole(@NotNull JsProgram program) { - generateCode(program); - System.out.println(output.toString()); } public void generateToFile(@NotNull JsProgram program, @NotNull File file) throws IOException { diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index f06e53ca92b..48397232fba 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -36,12 +36,6 @@ public final class StandardClasses { return this; } - private void externalObject(@NotNull String nativeName) { - currentObjectName = nativeName; - assert currentFQName != null; - declareExternalTopLevelObject(currentFQName, nativeName); - } - private void kotlinTopLevelObject(@NotNull String kotlinName) { assert currentFQName != null; currentObjectName = kotlinName; @@ -78,9 +72,8 @@ public final class StandardClasses { } @NotNull - public static StandardClasses bindImplementations(@NotNull JsScope kotlinObjectScope, - @NotNull JsScope rootScope) { - StandardClasses standardClasses = new StandardClasses(kotlinObjectScope, rootScope); + public static StandardClasses bindImplementations(@NotNull JsScope kotlinObjectScope) { + StandardClasses standardClasses = new StandardClasses(kotlinObjectScope); declareJetObjects(standardClasses); return standardClasses; } @@ -93,9 +86,6 @@ public final class StandardClasses { standardClasses.declare().forFQ("jet.IntRange").kotlinClass("NumberRange") .methods("iterator", "contains").properties("start", "size", "end", "reversed"); -// standardClasses.declare().forFQ("jet.String").kotlinClass("String"). -// properties("length"); - standardClasses.declare().forFQ("jet.Any.toString").kotlinFunction("toString"); } @@ -103,20 +93,14 @@ public final class StandardClasses { @NotNull private final JsScope kotlinScope; - @NotNull - private final JsScope rootScope; @NotNull private final Map standardObjects = new HashMap(); - @NotNull - private final Map externalObjects = new HashMap(); - @NotNull private final Map scopeMap = new HashMap(); - private StandardClasses(@NotNull JsScope kotlinScope, @NotNull JsScope rootScope) { - this.rootScope = rootScope; + private StandardClasses(@NotNull JsScope kotlinScope) { this.kotlinScope = kotlinScope; } @@ -132,10 +116,6 @@ public final class StandardClasses { declareTopLevelObjectInScope(kotlinScope, standardObjects, fullQualifiedName, kotlinLibName); } - private void declareExternalTopLevelObject(@NotNull String fullQualifiedName, @NotNull String externalObjectName) { - declareTopLevelObjectInScope(rootScope, externalObjects, fullQualifiedName, externalObjectName); - } - private void declareInner(@NotNull String fullQualifiedClassName, @NotNull String shortMethodName, @NotNull String javascriptName) { @@ -165,15 +145,6 @@ public final class StandardClasses { return standardObjects.containsKey(getFQName(descriptor)); } - public boolean isExternalObject(@NotNull DeclarationDescriptor descriptor) { - return externalObjects.containsKey(getFQName(descriptor)); - } - - @NotNull - public JsName getExternalObjectName(@NotNull DeclarationDescriptor descriptor) { - return externalObjects.get(getFQName(descriptor)); - } - @NotNull public JsName getStandardObjectName(@NotNull DeclarationDescriptor descriptor) { return standardObjects.get(getFQName(descriptor)); diff --git a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index 4f4831b7e39..80d35e611d8 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -26,7 +26,7 @@ public class StaticContext { DeclarationFacade declarations = DeclarationFacade.createFacade(scope); Intrinsics intrinsics = Intrinsics.standardLibraryIntrinsics(library); StandardClasses standardClasses = - StandardClasses.bindImplementations(namer.getKotlinScope(), jsRootScope); + StandardClasses.bindImplementations(namer.getKotlinScope()); return new StaticContext(program, bindingContext, declarations, aliaser, namer, intrinsics, standardClasses, scope); } @@ -111,21 +111,6 @@ public class StaticContext { return standardClasses; } - @NotNull - public Declarations getLibraryDeclarations() { - return declarationFacade.getJetLibraryDeclarations(); - } - - @NotNull - public Declarations getNativeDeclarations() { - return declarationFacade.getKotlinDeclarations(); - } - - @NotNull - public Declarations getKotlinDeclarations() { - return declarationFacade.getKotlinDeclarations(); - } - //TODO: helper method outdated @NotNull public NamingScope getScopeForDescriptor(@NotNull DeclarationDescriptor descriptor) { diff --git a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index 32aa282bdd4..881d19e9c87 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -105,12 +105,10 @@ public final class TranslationContext { @NotNull public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) { + //TODO: rewrite if (aliaser().hasAliasForDeclaration(descriptor)) { return aliaser().getAliasForDeclaration(descriptor); } - if (standardClasses().isExternalObject(descriptor)) { - return standardClasses().getExternalObjectName(descriptor); - } if (standardClasses().isStandardObject(descriptor)) { return standardClasses().getStandardObjectName(descriptor); } @@ -195,6 +193,7 @@ public final class TranslationContext { return dynamicContext.jsBlock(); } + //TODO: deletE? @NotNull private DeclarationFacade declarationFacade() { return staticContext.getDeclarationFacade(); diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java index 536594ac789..50a5d0e4334 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java @@ -35,6 +35,8 @@ public abstract class AbstractDeclarationVisitor extends DeclarationDescriptorVi abstract protected boolean accept(@NotNull DeclarationDescriptor descriptor); + abstract public void traverseNamespace(@NotNull NamespaceDescriptor namespace, @NotNull DeclarationContext context); + @NotNull protected Declarations declarations() { return declarations; @@ -100,9 +102,7 @@ public abstract class AbstractDeclarationVisitor extends DeclarationDescriptorVi @Override public Void visitConstructorDescriptor(@NotNull ConstructorDescriptor descriptor, @NotNull DeclarationContext context) { - if (!accept(descriptor)) { - return null; - } + assert accept(descriptor) : "Must accept constructor fot he class we accepted"; JsName alreadyDeclaredClassName = declarations.getName(descriptor.getContainingDeclaration()); //already defined in declarations.putName(descriptor, alreadyDeclaredClassName); @@ -161,17 +161,10 @@ public abstract class AbstractDeclarationVisitor extends DeclarationDescriptorVi return null; } - public void traverseNamespace(@NotNull NamespaceDescriptor descriptor, @NotNull DeclarationContext context) { - if (!accept(descriptor)) { - return; - } - DeclarationContext namespaceContext = extractNamespaceDeclaration(descriptor, context); - declareMembers(descriptor, namespaceContext); - } @NotNull - private DeclarationContext extractNamespaceDeclaration(@NotNull NamespaceDescriptor descriptor, - @NotNull DeclarationContext context) { + protected DeclarationContext extractNamespaceDeclaration(@NotNull NamespaceDescriptor descriptor, + @NotNull DeclarationContext context) { String nameForNamespace = getNameForNamespace(descriptor); JsName namespaceName = doDeclareName(descriptor, context, nameForNamespace); NamingScope namespaceScope = doDeclareScope(descriptor, context, "namespace " + namespaceName.getIdent()); diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotatedDeclarationVisitor.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotatedDeclarationVisitor.java index 093cfe442fb..51b0e0e93c2 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotatedDeclarationVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotatedDeclarationVisitor.java @@ -106,11 +106,6 @@ public class AnnotatedDeclarationVisitor extends AbstractDeclarationVisitor { throw new AssertionError("Use isAnnotatedClass to check"); } - public boolean isAnnotatedDeclaration(@NotNull DeclarationDescriptor descriptor) { - return hasClassAnnotation(descriptor) || hasFunctionAnnotation(descriptor) - || declaredInAnnotatedClass(descriptor); - } - public boolean isAnnotatedFunction(@NotNull FunctionDescriptor functionDescriptor) { return hasFunctionAnnotation(functionDescriptor) || declaredInAnnotatedClass(functionDescriptor); } diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java index 99eefaca4d2..eeb0324bffa 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java @@ -3,6 +3,7 @@ package org.jetbrains.k2js.translate.context.declaration; import com.google.dart.compiler.backend.js.ast.JsName; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.k2js.translate.context.NamingScope; import static org.jetbrains.k2js.translate.context.declaration.AnnotationsUtils.doesNotHaveInternalAnnotations; @@ -42,4 +43,10 @@ public final class KotlinDeclarationVisitor extends AbstractDeclarationVisitor { protected boolean accept(@NotNull DeclarationDescriptor descriptor) { return (doesNotHaveInternalAnnotations(descriptor)); } + + @Override + public void traverseNamespace(@NotNull NamespaceDescriptor descriptor, @NotNull DeclarationContext context) { + DeclarationContext namespaceContext = extractNamespaceDeclaration(descriptor, context); + declareMembers(descriptor, namespaceContext); + } } diff --git a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index 7504f3ba3c3..ab0d2065ef3 100644 --- a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -15,7 +15,6 @@ import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; -import org.jetbrains.k2js.translate.reference.ReferenceTranslator; import org.jetbrains.k2js.translate.utils.BindingUtils; import java.util.ArrayList; @@ -107,9 +106,8 @@ public final class ClassTranslator extends AbstractTranslator { // in future it might change if (aliaser().hasAliasForDeclaration(superClassDescriptor)) { return context().aliaser().getAliasForDeclaration(superClassDescriptor).makeRef(); - } else { - return ReferenceTranslator.translateAsFQReference(superClassDescriptor, context()); } + throw new AssertionError("Inherited from unknown class"); } @Nullable diff --git a/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index 53809fd9178..275a2b29870 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -56,6 +56,15 @@ public final class ExpressionVisitor extends TranslatorVisitor { if (value instanceof Boolean) { return context.program().getBooleanLiteral((Boolean) value); } + + //TODO: test + if (value instanceof Float) { + return context.program().getNumberLiteral((Float) value); + } + if (value instanceof Double) { + return context.program().getNumberLiteral((Double) value); + } + //TODO: all values throw new AssertionError("Unsupported constant expression" + expression.toString()); } diff --git a/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java index 29280cdc1fc..fe40320e810 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java @@ -60,7 +60,6 @@ public final class PatternTranslator extends AbstractTranslator { @NotNull private JsExpression translateTypePattern(@NotNull JsExpression expressionToMatch, @NotNull JetTypePattern pattern) { - //TODO: HACK to make some examples work //TODO: look into using intrinsics or other mechanisms to implement this logic JsName className = getClassReference(pattern).getName(); if (className.getIdent().equals("String")) { diff --git a/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java index f738ca8e1ea..dc9be6cb630 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java @@ -1,6 +1,8 @@ package org.jetbrains.k2js.translate.expression; -import com.google.dart.compiler.backend.js.ast.*; +import com.google.dart.compiler.backend.js.ast.JsConditional; +import com.google.dart.compiler.backend.js.ast.JsExpression; +import com.google.dart.compiler.backend.js.ast.JsNullLiteral; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.*; @@ -12,6 +14,7 @@ import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator; import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression; import static org.jetbrains.k2js.translate.utils.PsiUtils.getNotNullSimpleNameSelector; +import static org.jetbrains.k2js.translate.utils.PsiUtils.getSelector; import static org.jetbrains.k2js.translate.utils.TranslationUtils.notNullCheck; /** @@ -47,20 +50,11 @@ public final class QualifiedExpressionTranslator { @NotNull public static JsExpression translateDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression, @NotNull TranslationContext context) { - //TODO: problem with extension properties lies here JsExpression receiver = translateReceiver(expression, context); JetExpression selector = getSelector(expression); return translate(receiver, selector, context); } - @NotNull - private static JetExpression getSelector(@NotNull JetQualifiedExpression expression) { - JetExpression selector = expression.getSelectorExpression(); - //TODO: util? - assert selector != null; - return selector; - } - @NotNull private static JsExpression translate(@NotNull JsExpression receiver, @NotNull JetExpression selector, @NotNull TranslationContext context) { @@ -71,22 +65,7 @@ public final class QualifiedExpressionTranslator { if (selector instanceof JetCallExpression) { return CallTranslator.translate((JetCallExpression) selector, receiver, context); } - return composeQualifiedExpression(receiver, translateAsExpression(selector, context)); - } - - @NotNull - private static JsExpression composeQualifiedExpression(@NotNull JsExpression receiver, @NotNull JsExpression selector) { - //TODO: make sure that logic would not break for binary operation. check if there is a way to provide clearer logic - assert (selector instanceof JsNameRef || selector instanceof JsInvocation || selector instanceof JsBinaryOperation) - : "Selector should be a name reference or a method invocation in dot qualified expression."; - if (selector instanceof JsInvocation) { - return translateAsQualifiedInvocation(receiver, (JsInvocation) selector); - } else if (selector instanceof JsNameRef) { - return translateAsQualifiedNameReference(receiver, (JsNameRef) selector); - } else { - ((JsBinaryOperation) selector).setArg1(receiver); - return selector; - } + throw new AssertionError("Unexpected qualified expression"); } @NotNull @@ -94,18 +73,4 @@ public final class QualifiedExpressionTranslator { @NotNull TranslationContext context) { return translateAsExpression(expression.getReceiverExpression(), context); } - - @NotNull - private static JsExpression translateAsQualifiedNameReference(@NotNull JsExpression receiver, @NotNull JsNameRef selector) { - selector.setQualifier(receiver); - return selector; - } - - @NotNull - private static JsExpression translateAsQualifiedInvocation(@NotNull JsExpression receiver, @NotNull JsInvocation selector) { - JsExpression qualifier = selector.getQualifier(); - JsNameRef nameRef = (JsNameRef) qualifier; - nameRef.setQualifier(receiver); - return selector; - } } diff --git a/translator/src/org/jetbrains/k2js/translate/expression/TryTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/TryTranslator.java index 7d488fb4b00..40751c300b8 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/TryTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/TryTranslator.java @@ -19,6 +19,7 @@ import static com.google.dart.compiler.util.AstUtil.convertToBlock; /** * @author Pavel Talanov */ +//TODO: not tested at all //TODO: not implemented catch logic public final class TryTranslator extends AbstractTranslator { diff --git a/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java b/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java index 02a72ede5bc..77fcbf4a160 100644 --- a/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java @@ -81,12 +81,4 @@ public final class InitializerVisitor extends TranslatorVisitor traverse(@NotNull JetDeclaration declaration, @NotNull TranslationContext context) { - if (declaration instanceof JetClass) { - return traverseClass((JetClass) declaration, context); - } - throw new AssertionError("Cannot traverse anything else."); - } } diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java index 428985f3838..f15342ab98b 100644 --- a/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java +++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java @@ -75,7 +75,8 @@ public final class Intrinsics { } private void declareNullConstructorIntrinsic() { - FunctionDescriptor nullArrayConstructor = getFunctionByName(library.getLibraryScope(), "Array"); + //TODO: + FunctionDescriptor nullArrayConstructor = library.getLibraryScope().getFunctions("Array").iterator().next(); functionIntrinsics.put(nullArrayConstructor, ArrayNullConstructorIntrinsic.INSTANCE); } diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java index 4efd7f83fb4..8f70ac6ca1f 100644 --- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java +++ b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java @@ -23,10 +23,6 @@ public enum ArrayGetIntrinsic implements FunctionIntrinsic { assert receiver != null; assert arguments.size() == 1 : "Array get expression must have one argument."; JsExpression indexExpression = arguments.get(0); -// TemporaryVariable arrayExpression = context.declareTemporary(receiver); -// JsConditional indexInBoundsCheck = -// IntrinsicArrayUtils.indexInBoundsCheck(indexExpression, arrayExpression, context); -// return AstUtil.newSequence(arrayExpression.assignmentExpression(), AstUtil.newArrayAccess(receiver, indexExpression)); return new JsArrayAccess(receiver, indexExpression); } } diff --git a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java b/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java deleted file mode 100644 index fcea8f81319..00000000000 --- a/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.jetbrains.k2js.translate.intrinsic.array; - -import com.google.dart.compiler.backend.js.ast.*; -import com.google.dart.compiler.util.AstUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.k2js.translate.context.TemporaryVariable; -import org.jetbrains.k2js.translate.context.TranslationContext; - -import static org.jetbrains.k2js.translate.utils.TranslationUtils.zeroLiteral; - -//TODO: decide if needed - -/** - * @author Pavel Talanov - */ -public final class IntrinsicArrayUtils { - - private IntrinsicArrayUtils() { - } - - @NotNull - public static JsConditional indexInBoundsCheck(@NotNull JsExpression indexExpression, - @NotNull TemporaryVariable arrayTemporary, - @NotNull TranslationContext context) { - JsExpression positiveOrZero = new JsBinaryOperation - (JsBinaryOperator.GTE, indexExpression, zeroLiteral(context)); - JsNameRef lengthExpression = AstUtil.newQualifiedNameRef("length"); - lengthExpression.setQualifier(arrayTemporary.nameReference()); - JsExpression lessThanLength = new JsBinaryOperation - (JsBinaryOperator.LT, indexExpression, lengthExpression); - JsExpression indexInBounds = AstUtil.and(positiveOrZero, lessThanLength); - JsConditional indexCheck = new JsConditional(); - indexCheck.setTestExpression(indexInBounds); - indexCheck.setElseExpression(throwOutOfBoundsException()); - return indexCheck; - } - - @NotNull - private static JsExpression throwOutOfBoundsException() { - //TODO: think about exception - return AstUtil.newQualifiedNameRef("ErrorName"); - } -} diff --git a/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java b/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java index 357daf3d37c..2599a0d0d2c 100644 --- a/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/operation/IncrementTranslator.java @@ -87,6 +87,7 @@ public abstract class IncrementTranslator extends AbstractTranslator { variableReassignment, t2.nameReference()); } + //TODO: TEST @NotNull private JsExpression asPostfixWithNoReassignment() { // code fragment: expr(a++) diff --git a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java index 6b67b25ee5e..5db6a7197e0 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java @@ -86,19 +86,6 @@ public final class CallTranslator extends AbstractTranslator { return new CallTranslator(receiver, callee, arguments, resolvedCall, null, context); } - //TODO: inspect dead code - @Nullable - private JsExpression translateCalleeIfExpressionAsFunction(@NotNull JetCallExpression callExpression) { - //TODO: util - JetExpression calleeExpression = callExpression.getCalleeExpression(); - assert calleeExpression != null; - JsExpression callee = null; - if (isExpressionAsFunction(context.bindingContext(), calleeExpression)) { - callee = Translation.translateAsExpression(calleeExpression, context); - } - return callee; - } - @NotNull private List translateArgumentsForCallExpression(@NotNull JetCallExpression callExpression, @NotNull TranslationContext context) { diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java index 1e202ac2720..cbda54ad3d9 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java @@ -26,9 +26,6 @@ import static org.jetbrains.k2js.translate.utils.TranslationUtils.backingFieldRe */ public final class PropertyAccessTranslator extends AccessTranslator { - private static final String MESSAGE = "Cannot be accessor call. Use canBeProperty*Call to ensure this method " + - "can be called safely."; - @NotNull private static PropertyDescriptor getPropertyDescriptor(@NotNull JetSimpleNameExpression expression, @NotNull TranslationContext context) { @@ -76,6 +73,7 @@ public final class PropertyAccessTranslator extends AccessTranslator { @NotNull TranslationContext context) { JetSimpleNameExpression selector = getSelectorAsSimpleName(expression); if (selector == null) { + //TODO: never get there. review return false; } return canBePropertyGetterCall(selector, context); diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java index 933c8b2dbaa..27fcbe8a44a 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java @@ -5,7 +5,6 @@ import com.google.dart.compiler.backend.js.ast.JsName; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; import org.jetbrains.k2js.translate.context.TranslationContext; @@ -41,13 +40,7 @@ public final class ReferenceTranslator { @NotNull public static JsExpression translateAsLocalNameReference(@NotNull DeclarationDescriptor referencedDescriptor, @NotNull TranslationContext context) { - //TODO: prove correctness - if ((referencedDescriptor.getContainingDeclaration() instanceof NamespaceDescriptor) - && (context.hasQualifierForDescriptor(referencedDescriptor))) { - assert context.hasQualifierForDescriptor(referencedDescriptor) : referencedDescriptor; - return translateAsFQReference(referencedDescriptor, context); - } JsName referencedName = context.getNameForDescriptor(referencedDescriptor); return referencedName.makeRef(); } diff --git a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java index 806ce582a4d..322cc6f456b 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java @@ -6,7 +6,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.calls.ExpressionAsFunctionDescriptor; import org.jetbrains.jet.lang.resolve.calls.ResolvedCall; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.types.JetStandardClasses; @@ -99,6 +98,7 @@ public final class BindingUtils { @NotNull DeclarationDescriptor descriptor) { PsiElement result = context.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor); if (result == null) { + //TODO: never get there return null; } assert result instanceof JetDeclaration : "Descriptor should correspond to an element."; @@ -207,6 +207,8 @@ public final class BindingUtils { return !superClassDescriptor.equals(JetStandardClasses.getAny()); } + + //TODO: check where we use there, suspicious public static boolean isOwnedByNamespace(@NotNull DeclarationDescriptor descriptor) { if (descriptor instanceof ConstructorDescriptor) { DeclarationDescriptor classDescriptor = descriptor.getContainingDeclaration(); @@ -310,15 +312,4 @@ public final class BindingUtils { assert hasNextDescriptor != null : "Range expression must have a descriptor for hasNext function or property."; return hasNextDescriptor; } - - public static boolean isExpressionAsFunction(@NotNull BindingContext context, - @NotNull JetExpression calleeExpression) { - DeclarationDescriptor declarationDescriptor = - context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, calleeExpression); - if (declarationDescriptor == null) { - return false; - } - return (declarationDescriptor instanceof ExpressionAsFunctionDescriptor); - } - } diff --git a/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java index af2ea09b5d6..2355bc738d0 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java @@ -60,13 +60,6 @@ public final class DescriptorUtils { return resultingList; } - @NotNull - public static FunctionDescriptor getFunctionByName(@NotNull ClassDescriptor classDescriptor, - @NotNull String name) { - JetScope scope = classDescriptor.getDefaultType().getMemberScope(); - return getFunctionByName(scope, name); - } - @NotNull public static FunctionDescriptor getFunctionByName(@NotNull JetScope scope, @NotNull String name) { diff --git a/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java index ba459b4ceda..f94416be951 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java @@ -17,14 +17,20 @@ public final class PsiUtils { @Nullable public static JetSimpleNameExpression getSelectorAsSimpleName(@NotNull JetQualifiedExpression expression) { - JetExpression selectorExpression = expression.getSelectorExpression(); - assert selectorExpression != null : "Selector should not be null."; + JetExpression selectorExpression = getSelector(expression); if (!(selectorExpression instanceof JetSimpleNameExpression)) { return null; } return (JetSimpleNameExpression) selectorExpression; } + @NotNull + public static JetExpression getSelector(@NotNull JetQualifiedExpression expression) { + JetExpression selectorExpression = expression.getSelectorExpression(); + assert selectorExpression != null : "Selector should not be null."; + return selectorExpression; + } + @NotNull public static JetSimpleNameExpression getNotNullSimpleNameSelector(@NotNull JetQualifiedExpression expression) { JetSimpleNameExpression selectorAsSimpleName = getSelectorAsSimpleName(expression); diff --git a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 40094f9eb38..bba6a350756 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -49,9 +49,7 @@ public final class TranslationUtils { @NotNull private static JsExpression translateArgument(@NotNull TranslationContext context, @NotNull ValueArgument argument) { JetExpression jetExpression = argument.getArgumentExpression(); - if (jetExpression == null) { - throw new AssertionError("Argument with no expression encountered!"); - } + assert jetExpression != null : "Argument with no expression"; return Translation.translateAsExpression(jetExpression, context); } @@ -148,6 +146,7 @@ public final class TranslationUtils { return Translation.translateAsExpression(baseExpression, context); } + //TODO: @NotNull public static JsExpression translateReceiver(@NotNull TranslationContext context, @NotNull JetDotQualifiedExpression expression) { diff --git a/translator/testFiles/kotlin_lib.js b/translator/testFiles/kotlin_lib.js index 8870fd97338..469c9b5fc45 100644 --- a/translator/testFiles/kotlin_lib.js +++ b/translator/testFiles/kotlin_lib.js @@ -519,6 +519,16 @@ return obj.toString(); }; + Kotlin.jsonFromTuples = function(pairArr) { + var i = pairArr.length; + var res = {}; + while (i > 0) { + --i; + res[pairArr[i][0]] = pairArr[i][1]; + } + return res; + }; + /** * Copyright 2010 Tim Down.