Remove some strange code from StaticContext. Also use Collection<JetFile> instead of List<JetFile> in some APIs
This commit is contained in:
@@ -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<JetFile> files) {
|
||||
public static JetNamedFunction getMainFunction(@NotNull Collection<JetFile> files) {
|
||||
for (JetFile file : files) {
|
||||
JetNamedFunction mainFunction = findMainFunction(file.getDeclarations());
|
||||
if (mainFunction != null) {
|
||||
|
||||
@@ -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<JetFile> withJsLibAdded(@NotNull Collection<JetFile> files, @NotNull Config config) {
|
||||
Collection<JetFile> allFiles = Lists.newArrayList();
|
||||
allFiles.addAll(files);
|
||||
allFiles.addAll(config.getLibFiles());
|
||||
return allFiles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<JsNameRef> namespaceLevelDeclarationsHaveEnclosingNamespacesNamesAsQualifier = new Rule<JsNameRef>() {
|
||||
@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<JsNameRef> constructorHaveTheSameQualifierAsTheClass = new Rule<JsNameRef>() {
|
||||
|
||||
+2
-1
@@ -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<JsStatement> translateFiles(@NotNull List<JetFile> files, @NotNull TranslationContext context) {
|
||||
public static List<JsStatement> translateFiles(@NotNull Collection<JetFile> files, @NotNull TranslationContext context) {
|
||||
Set<NamespaceDescriptor> namespaceDescriptorSet = getAllNonNativeNamespaceDescriptors(context.bindingContext(), files);
|
||||
return (new NamespaceDeclarationTranslator(Lists.newArrayList(namespaceDescriptorSet), context)).translate();
|
||||
}
|
||||
|
||||
@@ -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<NamespaceDescriptor> getAllNonNativeNamespaceDescriptors(@NotNull BindingContext context,
|
||||
@NotNull List<JetFile> files) {
|
||||
@NotNull Collection<JetFile> files) {
|
||||
Set<NamespaceDescriptor> descriptorSet = new OrderedSet<NamespaceDescriptor>();
|
||||
for (JetFile file : files) {
|
||||
//TODO: can't be
|
||||
|
||||
Reference in New Issue
Block a user