diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e2a3868f8ed..0c7183a2088 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,7 @@ - @@ -15,24 +15,15 @@ - + + + + - - - - - - - - - - - - - + @@ -182,6 +173,32 @@ - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - - - - + + + + + + + + + + + @@ -321,16 +343,7 @@ - - - - - - - - - - + @@ -340,60 +353,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -412,10 +371,57 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -430,6 +436,15 @@ + + + + + + + + + @@ -454,22 +469,22 @@ @@ -674,6 +689,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1522,24 +1194,100 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1698,14 +1446,38 @@ - + + + + + + + + + + + - - - - - + + + + + + localhost @@ -1761,7 +1533,7 @@ - + @@ -1781,12 +1553,12 @@ - + + - @@ -1826,7 +1598,7 @@ @@ -1873,72 +1645,74 @@ - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - + - + - + - - - - - - - - + - + @@ -1947,44 +1721,44 @@ - + - + - + - + - + - + + + + + + + + - + - + - - - - - - - - + diff --git a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java index 2365a589bf5..6c5cecc8a12 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java @@ -248,8 +248,9 @@ public final class CallTranslator extends AbstractTranslator { assert descriptor instanceof FunctionDescriptor; FunctionIntrinsic functionIntrinsic = context().intrinsics().getFunctionIntrinsic((FunctionDescriptor) descriptor); - assert receiver != null : "Functions that have functionIntrinsic implementation should have a receiver."; - return functionIntrinsic.apply(receiver, arguments, context()); + JsExpression receiverExpression = thisObject(); + assert receiverExpression != null : "Intrinsic function should have a receiver."; + return functionIntrinsic.apply(receiverExpression, arguments, context()); } @NotNull diff --git a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java index ed737f70a81..357bc94aa17 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java @@ -102,8 +102,8 @@ public final class BindingUtils { } @NotNull - public static JetParameter getParameterForDescriptor(@NotNull BindingContext context, - @NotNull ValueParameterDescriptor descriptor) { + private static JetParameter getParameterForDescriptor(@NotNull BindingContext context, + @NotNull ValueParameterDescriptor descriptor) { PsiElement result = context.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor); assert result instanceof JetParameter : "ValueParameterDescriptor should have corresponding JetParameter."; return (JetParameter) result; diff --git a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 6f66c4c71d3..1e76faf7219 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -4,10 +4,7 @@ import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.k2js.translate.context.NamingScope; import org.jetbrains.k2js.translate.context.TemporaryVariable; @@ -120,8 +117,9 @@ public final class TranslationUtils { thisRef = context.aliaser().getAliasForThis(correspondingDeclaration); } } - if (correspondingDeclaration instanceof FunctionDescriptor) { - DeclarationDescriptor receiverDescriptor = getExpectedReceiverDescriptor((FunctionDescriptor) correspondingDeclaration); + if (correspondingDeclaration instanceof CallableDescriptor) { + DeclarationDescriptor receiverDescriptor = + getExpectedReceiverDescriptor((CallableDescriptor) correspondingDeclaration); assert receiverDescriptor != null; if (context.aliaser().hasAliasForThis(receiverDescriptor)) { thisRef = context.aliaser().getAliasForThis(receiverDescriptor); diff --git a/translator/test/org/jetbrains/k2js/test/ExtensionPropertyTest.java b/translator/test/org/jetbrains/k2js/test/ExtensionPropertyTest.java new file mode 100644 index 00000000000..510a1830f63 --- /dev/null +++ b/translator/test/org/jetbrains/k2js/test/ExtensionPropertyTest.java @@ -0,0 +1,26 @@ +package org.jetbrains.k2js.test; + +import org.junit.Test; + +/** + * @author Pavel Talanov + */ +public final class ExtensionPropertyTest extends TranslationTest { + final private static String MAIN = "extensionProperty/"; + + @Override + protected String mainDirectory() { + return MAIN; + } + + @Test + public void simplePropertyWithGetter() throws Exception { + testFooBoxIsTrue("simplePropertyWithGetter.kt"); + } + + + @Test + public void propertyWithGetterAndSetter() throws Exception { + testFooBoxIsTrue("propertyWithGetterAndSetter.kt"); + } +} diff --git a/translator/test/org/jetbrains/k2js/test/JavaClassesTest.java b/translator/test/org/jetbrains/k2js/test/JavaClassesTest.java index e6d27202b56..219a064f614 100644 --- a/translator/test/org/jetbrains/k2js/test/JavaClassesTest.java +++ b/translator/test/org/jetbrains/k2js/test/JavaClassesTest.java @@ -4,6 +4,7 @@ package org.jetbrains.k2js.test; * @author Pavel Talanov */ public abstract class JavaClassesTest extends TranslationTest { + private final String SUITE = "java/"; @Override diff --git a/translator/test/org/jetbrains/k2js/test/WebDemoExamples2Test.java b/translator/test/org/jetbrains/k2js/test/WebDemoExamples2Test.java index 27be1739a55..f569816bbe9 100644 --- a/translator/test/org/jetbrains/k2js/test/WebDemoExamples2Test.java +++ b/translator/test/org/jetbrains/k2js/test/WebDemoExamples2Test.java @@ -20,15 +20,15 @@ public final class WebDemoExamples2Test extends TranslationTest { testWithMain("bottles", ""); } - @Test - public void life() throws Exception { - testWithMain("life", "", "2"); - } + //TODO: a couple of classes not supported +// @Test +// public void life() throws Exception { +// testWithMain("life", "", "2"); +// } @Test public void builder() throws Exception { testWithMain("builder", ""); - testWithMain("builder", "1", "over9000" + - ""); + testWithMain("builder", "1", "over9000"); } } diff --git a/translator/testFiles/expression/misc/cases/KT-962.kt b/translator/testFiles/expression/misc/cases/KT-962.kt deleted file mode 100644 index c922a8c4136..00000000000 --- a/translator/testFiles/expression/misc/cases/KT-962.kt +++ /dev/null @@ -1,10 +0,0 @@ -iimport - -fun stdout(): java.io.PrintStream? { - println("stdout") - return System.out -} - -fun main(args : Array) { - stdout()?.println("Hello, world!") -} \ No newline at end of file diff --git a/translator/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt b/translator/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt new file mode 100644 index 00000000000..aba51251279 --- /dev/null +++ b/translator/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt @@ -0,0 +1,23 @@ +package foo + +class Test() { + var a = 0 +} + +var Test.b : Int + get() = a * 3 + set(c : Int) { + a = c - 1 + } + +fun box() : Boolean { + val c = Test() + if (c.a != 0) return false; + if (c.b != 0) return false; + c.a = 3; + if (c.b != 9) return false; + c.b = 10; + if (c.a != 9) return false; + if (c.b != 27) return false; + return true; +} \ No newline at end of file diff --git a/translator/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt b/translator/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt new file mode 100644 index 00000000000..f073c5ce546 --- /dev/null +++ b/translator/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt @@ -0,0 +1,17 @@ +package foo + +val String.size : Int + get() = length + +val Int.quadruple : Int + get() = this * 4 + +fun box() : Boolean +{ + if ("1".size != 1) return false; + if ("11".size != 2) return false; + if (("121" + "123").size != 6) return false; + if (1.quadruple != 4) return false; + if (0.quadruple != 0) return false; + return true; +} \ No newline at end of file