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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -897,34 +922,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1037,6 +1034,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1223,11 +1252,11 @@
-
-
-
-
-
+
+
+
+
+
localhost
@@ -1315,7 +1344,7 @@
-
+
@@ -1363,7 +1392,7 @@
-
+
@@ -1376,7 +1405,6 @@
-
@@ -1401,6 +1429,7 @@
+
@@ -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));