diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 51be0ea12eb..0ed2d1c2a22 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -13,16 +13,13 @@ - - - - - - + + + - + @@ -122,40 +119,13 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -163,10 +133,30 @@ + + + + + + + + + + + + + + + + + + + + - + @@ -174,10 +164,19 @@ - + + + + + + + + + + - + @@ -188,7 +187,7 @@ - + @@ -265,10 +264,10 @@ - + - + @@ -312,10 +311,10 @@ - + - + @@ -346,9 +345,6 @@ @@ -756,6 +755,32 @@ - - - - - - - - - - - - - @@ -1037,6 +1034,38 @@ + + + + + + + + + + + + + + @@ -1410,62 +1439,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1480,15 +1453,6 @@ - - - - - - - - - @@ -1498,15 +1462,6 @@ - - - - - - - - - @@ -1516,24 +1471,100 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index 86a9024f426..fc84f2edb31 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -36,19 +36,6 @@ public final class StandardClasses { return this; } - @NotNull - public Builder externalClass(@NotNull String nativeName) { - externalObject(nativeName); - constructor(); - return this; - } - - @NotNull - public Builder externalFunction(@NotNull String nativeName) { - externalObject(nativeName); - return this; - } - private void externalObject(@NotNull String nativeName) { currentObjectName = nativeName; assert currentFQName != null; @@ -95,42 +82,9 @@ public final class StandardClasses { @NotNull JsScope rootScope) { StandardClasses standardClasses = new StandardClasses(kotlinObjectScope, rootScope); declareJetObjects(standardClasses); - declareJavaUtilObjects(standardClasses); - declareTopLevelFunctions(standardClasses); - // declareJQuery(standardClasses); return standardClasses; } - private static void declareJQuery(@NotNull StandardClasses standardClasses) { - standardClasses.declare().forFQ("jquery.JQuery").externalClass("jQuery") - .methods("addClass", "attr", "hasClass", "append", - "text", "ready", "click", "hover", "slideUp", - "removeClass"); - standardClasses.declare().forFQ("jquery.jq").externalFunction("jQuery"); - //standardClasses.declare().forFQ("jquery.get-document").externalObject("document"); - } - - //TODO: test all the methods - private static void declareJavaUtilObjects(@NotNull StandardClasses standardClasses) { - standardClasses.declare().forFQ("java.util.ArrayList").kotlinClass("ArrayList") - .methods("size", "add", "get", "isEmpty", "set", "remove", "addAll", "contains", "clear", "iterator"); - - standardClasses.declare().forFQ("java.util.Collection").kotlinClass("Collection") - .methods("iterator"); - - standardClasses.declare().forFQ("java.util.HashMap").kotlinClass("HashMap") - .methods("size", "put", "get", "isEmpty", "remove", "addAll", "clear", "keySet"); - - standardClasses.declare().forFQ("java.util.StringBuilder").kotlinClass("StringBuilder") - .methods("append", "toString"); - - standardClasses.declare().forFQ("java.util.Map").kotlinClass("Map") - .methods("size", "put", "get", "isEmpty", "remove", "addAll", "clear", "keySet"); - - standardClasses.declare().forFQ("Integer").kotlinClass("Integer") - .methods("parseInt"); - } - private static void declareJetObjects(@NotNull StandardClasses standardClasses) { standardClasses.declare().forFQ("jet.Array").kotlinClass("Array") .properties("size", "indices"); @@ -149,12 +103,6 @@ public final class StandardClasses { standardClasses.declare().forFQ("jet.Any.toString").kotlinFunction("toString"); } - private static void declareTopLevelFunctions(@NotNull StandardClasses standardClasses) { - standardClasses.declare().forFQ("js.parseInt").kotlinFunction("parseInt"); - standardClasses.declare().forFQ("js.println").kotlinFunction("println"); - standardClasses.declare().forFQ("js.print").kotlinFunction("print"); - standardClasses.declare().forFQ("js.Exception").kotlinClass("Exception"); - } @NotNull private final JsScope kotlinScope; diff --git a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index dd4ef7cb091..4f4831b7e39 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -113,7 +113,7 @@ public class StaticContext { @NotNull public Declarations getLibraryDeclarations() { - return declarationFacade.getLibraryDeclarations(); + return declarationFacade.getJetLibraryDeclarations(); } @NotNull diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotationsUtils.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotationsUtils.java index f92fec84269..cbf857c667d 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotationsUtils.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotationsUtils.java @@ -20,9 +20,9 @@ public final class AnnotationsUtils { @NotNull public static final String NATIVE_CLASS_ANNOTATION_FQNAME = "js.annotations.NativeClass"; @NotNull - public static final String LIBRARY_FUNCTION_ANNOTATION_FQNAME = "js.annotations.NativeFun"; + public static final String LIBRARY_FUNCTION_ANNOTATION_FQNAME = "js.annotations.LibraryFun"; @NotNull - public static final String LIBRARY_CLASS_ANNOTATION_FQNAME = "js.annotations.NativeClass"; + public static final String LIBRARY_CLASS_ANNOTATION_FQNAME = "js.annotations.LibraryClass"; @NotNull public static Set INTERNAL_ANNOTATIONS_FQNAMES = Sets.newHashSet( NATIVE_CLASS_ANNOTATION_FQNAME, NATIVE_FUNCTION_ANNOTATION_FQNAME, diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java index 5aeb7a1b8df..9ec3561c536 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java @@ -3,12 +3,12 @@ package org.jetbrains.k2js.translate.context.declaration; import com.google.common.collect.Sets; import com.google.dart.compiler.backend.js.ast.JsNameRef; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.types.JetStandardLibrary; +import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.NamingScope; import org.jetbrains.k2js.translate.utils.BindingUtils; @@ -18,6 +18,8 @@ import java.util.Set; /** * @author Pavel Talanov */ +//TODO: decide to maybe not to use different declaration objects +//TODO: methods receiver too many parameters and also unneccessary information like rootScope is stored inside public final class DeclarationFacade { @NotNull @@ -26,7 +28,7 @@ public final class DeclarationFacade { } @NotNull - private final Declarations libraryDeclarations; + private final Declarations jetLibraryDeclarations; @NotNull private final Declarations kotlinDeclarations; @@ -34,19 +36,23 @@ public final class DeclarationFacade { @NotNull private final Declarations nativeDeclarations; + @NotNull + private final Declarations jsLibraryDeclarations; + @NotNull private final NamingScope rootScope; private DeclarationFacade(@NotNull NamingScope rootScope) { this.rootScope = rootScope; - this.libraryDeclarations = Declarations.newInstance(); + this.jetLibraryDeclarations = Declarations.newInstance(); this.kotlinDeclarations = Declarations.newInstance(); this.nativeDeclarations = Declarations.newInstance(); + this.jsLibraryDeclarations = Declarations.newInstance(); } @NotNull - public Declarations getLibraryDeclarations() { - return libraryDeclarations; + public Declarations getJetLibraryDeclarations() { + return jetLibraryDeclarations; } @NotNull @@ -61,13 +67,13 @@ public final class DeclarationFacade { @NotNull public Set getAllDeclarations() { - return Sets.newHashSet(libraryDeclarations, kotlinDeclarations, nativeDeclarations); + return Sets.newHashSet(jetLibraryDeclarations, kotlinDeclarations, nativeDeclarations, jsLibraryDeclarations); } @NotNull public DeclarationFacade extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary, @NotNull JsNameRef standardLibraryObjectName) { - KotlinDeclarationVisitor visitor = new KotlinDeclarationVisitor(libraryDeclarations, false); + KotlinDeclarationVisitor visitor = new KotlinDeclarationVisitor(jetLibraryDeclarations, false); for (DeclarationDescriptor descriptor : standardLibrary.getLibraryScope().getAllDescriptors()) { descriptor.accept(visitor, DeclarationContext.rootContext(rootScope, standardLibraryObjectName)); @@ -77,18 +83,23 @@ public final class DeclarationFacade { //TODO: decide if is public public void extractDeclarationsFromNamespace(@NotNull NamespaceDescriptor descriptor, - @Nullable JsNameRef namespaceQualifier) { + @NotNull Namer namer) { KotlinDeclarationVisitor kotlinDeclarationVisitor = new KotlinDeclarationVisitor(kotlinDeclarations, true); kotlinDeclarationVisitor.traverseNamespace - (descriptor, DeclarationContext.rootContext(rootScope, namespaceQualifier)); + (descriptor, DeclarationContext.rootContext(rootScope, null)); NativeDeclarationVisitor nativeDeclarationVisitor = new NativeDeclarationVisitor(nativeDeclarations); nativeDeclarationVisitor.traverseNamespace (descriptor, DeclarationContext.rootContext(rootScope, null)); + LibraryDeclarationVisitor libraryDeclarationVisitor = new LibraryDeclarationVisitor(jsLibraryDeclarations); + libraryDeclarationVisitor.traverseNamespace + (descriptor, DeclarationContext.rootContext(rootScope, namer.kotlinObject())); } - public void extractDeclarationsFromFiles(@NotNull List files, @NotNull BindingContext context) { + public void extractDeclarationsFromFiles(@NotNull List files, + @NotNull BindingContext context, + @NotNull Namer namer) { for (NamespaceDescriptor namespace : getAllNamespaces(files, context)) { - extractDeclarationsFromNamespace(namespace, null); + extractDeclarationsFromNamespace(namespace, namer); } } 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 f73c8bf3d36..99eefaca4d2 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java @@ -12,7 +12,6 @@ import static org.jetbrains.k2js.translate.context.declaration.AnnotationsUtils. */ public final class KotlinDeclarationVisitor extends AbstractDeclarationVisitor { - @NotNull private final boolean shouldObfuscate; /*package*/ KotlinDeclarationVisitor(@NotNull Declarations declarations, boolean obfuscateNames) { diff --git a/translator/src/org/jetbrains/k2js/translate/general/Translation.java b/translator/src/org/jetbrains/k2js/translate/general/Translation.java index bfafa6ebccd..4c924977f55 100644 --- a/translator/src/org/jetbrains/k2js/translate/general/Translation.java +++ b/translator/src/org/jetbrains/k2js/translate/general/Translation.java @@ -100,7 +100,7 @@ public final class Translation { staticContext.getDeclarationFacade(). extractStandardLibrary(standardLibrary, staticContext.getNamer().kotlinObject()); staticContext.getDeclarationFacade(). - extractDeclarationsFromFiles(files, bindingContext); + extractDeclarationsFromFiles(files, bindingContext, staticContext.getNamer()); JsBlock block = staticContext.getProgram().getFragmentBlock(0); TranslationContext context = TranslationContext.rootContext(staticContext); block.addStatement(Translation.translateNamespace(namespaceToTranslate, context));