KT-2710 Extend root JS package with standard scope

#KT-2710 In Progress
This commit is contained in:
Nikolay Krasko
2012-09-19 20:08:48 +04:00
parent fbe4e9f96e
commit bffbe1dd38
2 changed files with 10 additions and 35 deletions
@@ -26,19 +26,13 @@ import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJs;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.lazy.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.k2js.config.Config;
import java.util.Collection;
@@ -150,34 +144,7 @@ public final class AnalyzerFacadeForJS {
public static ResolveSession getLazyResolveSession(Collection<JetFile> files, final Config config) {
FileBasedDeclarationProviderFactory declarationProviderFactory = new FileBasedDeclarationProviderFactory(
Config.withJsLibAdded(files, config), Predicates.<FqName>alwaysFalse());
// ModuleConfiguration moduleConfiguration = new JsConfiguration(config.getProject(), null);
ModuleConfiguration moduleConfigurationJs = new ModuleConfiguration() {
@Override
public void addDefaultImports(@NotNull Collection<JetImportDirective> directives) {
for (ImportPath path : JsConfiguration.DEFAULT_IMPORT_PATHS) {
directives.add(JetPsiFactory.createImportDirective(config.getProject(), path));
}
}
@Override
public void extendNamespaceScope(
@NotNull BindingTrace trace,
@NotNull NamespaceDescriptor namespaceDescriptor,
@NotNull WritableScope namespaceMemberScope
) {
namespaceMemberScope.importScope(JetStandardLibrary.getInstance().getLibraryScope());
}
@NotNull
@Override
public PlatformToKotlinClassMap getPlatformToKotlinClassMap() {
return PlatformToKotlinClassMap.EMPTY;
}
};
ModuleDescriptor lazyModule = new ModuleDescriptor(Name.special("<lazy module>"));
return new ResolveSession(config.getProject(), lazyModule, moduleConfigurationJs, declarationProviderFactory);
return new ResolveSession(config.getProject(), lazyModule, new JsConfiguration(config.getProject(), null), declarationProviderFactory);
}
}
@@ -31,8 +31,10 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import java.util.Arrays;
import java.util.Collection;
@@ -43,7 +45,7 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isRootNamespace;
/**
* @author Pavel Talanov
*/
public final class JsConfiguration implements ModuleConfiguration {
public class JsConfiguration implements ModuleConfiguration {
@NotNull
private static final List<ImportPath> DEFAULT_IMPORT_PATHS = Arrays.asList(new ImportPath("js.*"), new ImportPath("java.lang.*"),
@@ -75,6 +77,12 @@ public final class JsConfiguration implements ModuleConfiguration {
@NotNull WritableScope namespaceMemberScope) {
DefaultModuleConfiguration.createStandardConfiguration(project, BuiltinsScopeExtensionMode.ALL)
.extendNamespaceScope(trace, namespaceDescriptor, namespaceMemberScope);
// Extend root namespace with standard classes
if (namespaceDescriptor.getQualifiedName().shortNameOrSpecial().equals(FqNameUnsafe.ROOT_NAME)) {
namespaceMemberScope.importScope(JetStandardLibrary.getInstance().getLibraryScope());
}
if (hasPreanalyzedContextForTests()) {
extendScopeWithPreAnalyzedContextForTests(namespaceDescriptor, namespaceMemberScope);
}