diff --git a/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java b/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java index 5657df41a84..10432025535 100644 --- a/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java +++ b/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; +import java.util.Collection; import java.util.List; /** @@ -47,7 +48,7 @@ public class JetMainDetector { } @Nullable - public static JetNamedFunction getMainFunction(@NotNull List files) { + public static JetNamedFunction getMainFunction(@NotNull Collection files) { for (JetFile file : files) { JetNamedFunction mainFunction = findMainFunction(file.getDeclarations()); if (mainFunction != null) { diff --git a/js/js.translator/src/org/jetbrains/k2js/config/Config.java b/js/js.translator/src/org/jetbrains/k2js/config/Config.java index 43e21dcd01c..c2e89f832ec 100644 --- a/js/js.translator/src/org/jetbrains/k2js/config/Config.java +++ b/js/js.translator/src/org/jetbrains/k2js/config/Config.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -172,4 +173,12 @@ public abstract class Config { public BindingContext getLibraryBindingContext() { return null; } + + @NotNull + public static Collection withJsLibAdded(@NotNull Collection files, @NotNull Config config) { + Collection allFiles = Lists.newArrayList(); + allFiles.addAll(files); + allFiles.addAll(config.getLibFiles()); + return allFiles; + } } diff --git a/js/js.translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java b/js/js.translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java index 88b6a423dcc..5208e863800 100644 --- a/js/js.translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java @@ -34,6 +34,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; +import static org.jetbrains.k2js.config.Config.withJsLibAdded; import static org.jetbrains.k2js.facade.FacadeUtils.parseString; import static org.jetbrains.k2js.facade.FacadeUtils.writeCodeToFile; import static org.jetbrains.k2js.generate.CodeGenerator.generateProgramToString; @@ -96,7 +97,7 @@ public final class K2JSTranslator { throws TranslationException { JetStandardLibrary.initialize(config.getProject()); BindingContext bindingContext = AnalyzerFacadeForJS.analyzeFilesAndCheckErrors(filesToTranslate, config); - return Translation.generateAst(bindingContext, filesToTranslate, mainCallParameters, config, rawStatements); + return Translation.generateAst(bindingContext, withJsLibAdded(filesToTranslate, config), mainCallParameters, config, rawStatements); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index ee732580478..4d714ff8f02 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -18,17 +18,13 @@ package org.jetbrains.k2js.translate.context; import com.google.common.collect.Maps; import com.google.dart.compiler.backend.js.ast.*; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import org.jetbrains.k2js.config.EcmaVersion; -import org.jetbrains.k2js.config.LibrarySourcesConfig; import org.jetbrains.k2js.translate.context.generator.Generator; import org.jetbrains.k2js.translate.context.generator.Rule; import org.jetbrains.k2js.translate.intrinsic.Intrinsics; @@ -398,50 +394,14 @@ public final class StaticContext { Rule namespaceLevelDeclarationsHaveEnclosingNamespacesNamesAsQualifier = new Rule() { @Override public JsNameRef apply(@NotNull DeclarationDescriptor descriptor) { - DeclarationDescriptor containingDescriptor = getContainingDeclaration(descriptor); - if (!(containingDescriptor instanceof NamespaceDescriptor)) { + DeclarationDescriptor containingDeclaration = getContainingDeclaration(descriptor); + if (!(containingDeclaration instanceof NamespaceDescriptor)) { return null; } - - final JsNameRef result = new JsNameRef(getNameForDescriptor(containingDescriptor)); - if (DescriptorUtils.isRootNamespace((NamespaceDescriptor) containingDescriptor)) { - return result; - } - - JsNameRef qualifier = result; - while ((containingDescriptor = getContainingDeclaration(containingDescriptor)) instanceof NamespaceDescriptor && - !DescriptorUtils.isRootNamespace((NamespaceDescriptor) containingDescriptor)) { - JsNameRef ref = getNameForDescriptor(containingDescriptor).makeRef(); - qualifier.setQualifier(ref); - qualifier = ref; - } - - PsiElement element = BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor); - if (element == null && descriptor instanceof PropertyAccessorDescriptor) { - element = BindingContextUtils.descriptorToDeclaration(bindingContext, ((PropertyAccessorDescriptor) descriptor) - .getCorrespondingProperty()); - } - - if (element != null) { - PsiFile file = element.getContainingFile(); - String moduleName = file.getUserData(LibrarySourcesConfig.EXTERNAL_MODULE_NAME); - if (LibrarySourcesConfig.UNKNOWN_EXTERNAL_MODULE_NAME.equals(moduleName)) { - return null; - } - else if (moduleName != null) { - qualifier.setQualifier(new JsArrayAccess(namer.kotlin("modules"), program.getStringLiteral(moduleName))); - } - else if (result == qualifier && result.getIdent().equals("kotlin")) { - // todo WebDemoExamples2Test#testBuilder, package "kotlin" from kotlin/js/js.libraries/src/stdlib/JUMaps.kt must be inlined - return qualifier; - } - } - - if (qualifier.getQualifier() == null) { - qualifier.setQualifier(new JsNameRef(Namer.getRootNamespaceName())); - } - - return result; + JsName containingDeclarationName = getNameForDescriptor(containingDeclaration); + JsNameRef qualifier = containingDeclarationName.makeRef(); + qualifier.setQualifier(getQualifierForDescriptor(containingDeclaration)); + return qualifier; } }; Rule constructorHaveTheSameQualifierAsTheClass = new Rule() { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java index 817ba79db5d..46d24b72dbd 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java @@ -32,6 +32,7 @@ import org.jetbrains.k2js.translate.utils.JsAstUtils; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -42,7 +43,7 @@ import static org.jetbrains.k2js.translate.utils.BindingUtils.getAllNonNativeNam */ public final class NamespaceDeclarationTranslator extends AbstractTranslator { - public static List translateFiles(@NotNull List files, @NotNull TranslationContext context) { + public static List translateFiles(@NotNull Collection files, @NotNull TranslationContext context) { Set namespaceDescriptorSet = getAllNonNativeNamespaceDescriptors(context.bindingContext(), files); return (new NamespaceDeclarationTranslator(Lists.newArrayList(namespaceDescriptorSet), context)).translate(); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java index 9ef7572e550..e5993f0b17d 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; @@ -320,7 +321,7 @@ public final class BindingUtils { @NotNull public static Set getAllNonNativeNamespaceDescriptors(@NotNull BindingContext context, - @NotNull List files) { + @NotNull Collection files) { Set descriptorSet = new OrderedSet(); for (JetFile file : files) { //TODO: can't be