From 04eb70774448fff602c05ea68a9b06065a482d9d Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Thu, 19 Jan 2012 17:38:59 +0400 Subject: [PATCH] migrated according to the last when changes --- .../org/jetbrains/k2js/K2JSTranslator.java | 4 +-- .../expression/ExpressionVisitor.java | 4 +++ .../translate/expression/WhenTranslator.java | 29 ++++++++++++++----- .../reference/PropertyAccessTranslator.java | 1 - .../patternMatching/cases/whenNotValue.kt | 1 + .../patternMatching/cases/whenValue.kt | 1 + .../webDemoExamples2/cases/bottles.kt | 2 +- 7 files changed, 30 insertions(+), 12 deletions(-) diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/K2JSTranslator.java index 41e5db39ab2..dae603da67a 100644 --- a/translator/src/org/jetbrains/k2js/K2JSTranslator.java +++ b/translator/src/org/jetbrains/k2js/K2JSTranslator.java @@ -40,8 +40,8 @@ import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getNameForNames public final class K2JSTranslator { private static final List LIB_FILE_NAMES = Arrays.asList( - "C:\\Dev\\Projects\\Kotlin\\jet\\stdlib\\ktSrc\\jssupport\\JsCollectionSupport.jet", - "C:\\Dev\\Projects\\Kotlin\\jet\\stdlib\\ktSrc\\jssupport\\JsSupport.jet" + "C:\\Dev\\Projects\\Kotlin\\jet\\stdlib\\ktSrc\\jssupport\\JsSupport.jet", + "C:\\Dev\\Projects\\Kotlin\\jet\\stdlib\\ktSrc\\jssupport\\JsDeclarations.kt" ); @NotNull diff --git a/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index 5ff7a09b211..7a2c921b2d5 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -244,6 +244,10 @@ public final class ExpressionVisitor extends TranslatorVisitor { @NotNull public JsNode visitDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression, @NotNull TranslationContext context) { + //TODO: problem with extension properties lies here +// if (PropertyAccessTranslator.canBePropertyGetterCall(expression, context)) { +// return PropertyAccessTranslator.translateAsPropertyGetterCall() +// } if (expression.getSelectorExpression() instanceof JetCallExpression) { return CallTranslator.translate(expression, context); } diff --git a/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java index 7c4c643ce41..6c1d1b6f774 100644 --- a/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java @@ -162,11 +162,10 @@ public class WhenTranslator extends AbstractTranslator { } } - @NotNull private JsExpression translateCondition(@NotNull JetWhenCondition condition) { - if (condition instanceof JetWhenConditionIsPattern) { - return translatePatternCondition((JetWhenConditionIsPattern) condition); + if ((condition instanceof JetWhenConditionIsPattern) || (condition instanceof JetWhenConditionWithExpression)) { + return translatePatternCondition(condition); } throw new AssertionError("Unsupported when condition " + condition.getClass()); } @@ -177,19 +176,33 @@ public class WhenTranslator extends AbstractTranslator { } @NotNull - private JsExpression translatePatternCondition(@NotNull JetWhenConditionIsPattern condition) { + private JsExpression translatePatternCondition(@NotNull JetWhenCondition condition) { JsExpression patternMatchExpression = Translation.patternTranslator(context()). translatePattern(getPattern(condition), expressionToMatch); - if (condition.isNegated()) { + if (isNegated(condition)) { return AstUtil.negated(patternMatchExpression); } return patternMatchExpression; } + private boolean isNegated(@NotNull JetWhenCondition condition) { + if (condition instanceof JetWhenConditionIsPattern) { + return ((JetWhenConditionIsPattern) condition).isNegated(); + } + return false; + } + @NotNull - private JetPattern getPattern(@NotNull JetWhenConditionIsPattern condition) { - JetPattern pattern = condition.getPattern(); - assert pattern != null : "Is condition should have a non null pattern."; + private JetPattern getPattern(@NotNull JetWhenCondition condition) { + JetPattern pattern; + if (condition instanceof JetWhenConditionIsPattern) { + pattern = ((JetWhenConditionIsPattern) condition).getPattern(); + } else if (condition instanceof JetWhenConditionWithExpression) { + pattern = ((JetWhenConditionWithExpression) condition).getPattern(); + } else { + throw new AssertionError("Wrong type of JetWhenCondition"); + } + assert pattern != null : "Condition should have a non null pattern."; return pattern; } diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java index 104fe0c5bb2..ec2cea7b475 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java @@ -77,7 +77,6 @@ public final class PropertyAccessTranslator extends AccessTranslator { return new PropertyAccessTranslator(propertyDescriptor, null, isBackingFieldReference(expression), context); } - @NotNull public static PropertyAccessTranslator newInstance(@NotNull JetExpression expression, @NotNull TranslationContext context) { diff --git a/translator/testFiles/patternMatching/cases/whenNotValue.kt b/translator/testFiles/patternMatching/cases/whenNotValue.kt index 5232916169d..5cd11718413 100644 --- a/translator/testFiles/patternMatching/cases/whenNotValue.kt +++ b/translator/testFiles/patternMatching/cases/whenNotValue.kt @@ -5,6 +5,7 @@ fun box() : Boolean { when(a) { !is 3 -> {a = 10;} !is 4 -> {a = 20;} + else -> {a = 30;} } return (a == 10) } \ No newline at end of file diff --git a/translator/testFiles/patternMatching/cases/whenValue.kt b/translator/testFiles/patternMatching/cases/whenValue.kt index d26784f0497..73bbc0484b0 100644 --- a/translator/testFiles/patternMatching/cases/whenValue.kt +++ b/translator/testFiles/patternMatching/cases/whenValue.kt @@ -5,6 +5,7 @@ fun box() : Boolean { when(a) { is 3 -> {a = 10;} is 4 -> {a = 20;} + else -> {a = 30;} } return (a == 20) } \ No newline at end of file diff --git a/translator/testFiles/webDemoExamples2/cases/bottles.kt b/translator/testFiles/webDemoExamples2/cases/bottles.kt index f6f96395c99..f31535c0953 100644 --- a/translator/testFiles/webDemoExamples2/cases/bottles.kt +++ b/translator/testFiles/webDemoExamples2/cases/bottles.kt @@ -33,7 +33,7 @@ fun main(args : Array) { printBottles(99) } else { - val bottles = Integer.parseInt(args[0]); + val bottles = parseInt(args[0]); if (bottles != null) { printBottles(bottles); } else {