From b0856cb3649aeb56274bfe093b2269992435208d Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 14 Aug 2012 17:46:45 +0400 Subject: [PATCH] Do not translate library (marked by annotation) declarations. --- .../test/semantics/NativeInteropTest.java | 4 ++ .../declaration/NamespaceTranslator.java | 6 +-- .../translate/utils/AnnotationsUtils.java | 9 +++++ .../testFiles/native/cases/library.kt | 15 ++++++++ .../testFiles/native/native/library.js | 37 +++++++++++++++++++ 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 js/js.translator/testFiles/native/cases/library.kt create mode 100644 js/js.translator/testFiles/native/native/library.js diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/NativeInteropTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/NativeInteropTest.java index 0b72d4095ac..b91f0157a87 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/NativeInteropTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/NativeInteropTest.java @@ -72,6 +72,10 @@ public final class NativeInteropTest extends SingleFileTranslationTest { fooBoxTest(); } + public void testLibrary() throws Exception { + fooBoxTest(); + } + public void testKt2209() throws Exception { fooBoxTest(); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java index 4570a364a7d..18a34e80809 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java @@ -28,8 +28,6 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; import org.jetbrains.k2js.translate.initializer.InitializerUtils; import org.jetbrains.k2js.translate.initializer.InitializerVisitor; -import org.jetbrains.k2js.translate.utils.AnnotationsUtils; -import org.jetbrains.k2js.translate.utils.BindingUtils; import org.jetbrains.k2js.translate.utils.JsAstUtils; import org.jetbrains.k2js.translate.utils.TranslationUtils; @@ -39,6 +37,8 @@ import java.util.List; import java.util.Map; import static org.jetbrains.k2js.translate.initializer.InitializerUtils.generateInitializerForProperty; +import static org.jetbrains.k2js.translate.utils.AnnotationsUtils.isPredefinedObject; +import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForElement; import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptor; /** @@ -64,7 +64,7 @@ final class NamespaceTranslator extends AbstractTranslator { public void translate(JetFile file) { for (JetDeclaration declaration : file.getDeclarations()) { - if (!AnnotationsUtils.isNativeObject(BindingUtils.getDescriptorForElement(bindingContext(), declaration))) { + if (!isPredefinedObject(getDescriptorForElement(bindingContext(), declaration))) { declaration.accept(visitor, context()); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/AnnotationsUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/AnnotationsUtils.java index bc4c92b2690..a6256535d82 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/AnnotationsUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/AnnotationsUtils.java @@ -112,6 +112,15 @@ public final class AnnotationsUtils { return hasAnnotationOrInsideAnnotatedClass(descriptor, PredefinedAnnotation.LIBRARY); } + public static boolean isPredefinedObject(@NotNull DeclarationDescriptor descriptor) { + for (PredefinedAnnotation annotation : PredefinedAnnotation.values()) { + if (hasAnnotationOrInsideAnnotatedClass(descriptor, annotation)) { + return true; + } + } + return false; + } + public static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor, @NotNull PredefinedAnnotation annotation) { return hasAnnotationOrInsideAnnotatedClass(descriptor, annotation.getFQName()); diff --git a/js/js.translator/testFiles/native/cases/library.kt b/js/js.translator/testFiles/native/cases/library.kt new file mode 100644 index 00000000000..a9833340c6c --- /dev/null +++ b/js/js.translator/testFiles/native/cases/library.kt @@ -0,0 +1,15 @@ +package foo + +library class A() { + library fun f() {} + library fun f(a: Int) {} +} + +library fun getResult() = false + +fun box(): Boolean { + val a = A() + a.f() + a.f(2) + return getResult() +} \ No newline at end of file diff --git a/js/js.translator/testFiles/native/native/library.js b/js/js.translator/testFiles/native/native/library.js new file mode 100644 index 00000000000..79adbd9b63d --- /dev/null +++ b/js/js.translator/testFiles/native/native/library.js @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function () { + var c = 0; + + Kotlin.A = Kotlin.$createClass( + { + initialize:function () { + this.f = function(i) { + if (i === undefined && c === 0) { + c = 1; + } + if (i === 2 && c === 1) { + c = 2; + } + } + } + }); + Kotlin.getResult = function () { + return c === 2; + }; +})(); +