ModuleDescriptor stores a ModuleConfiguration

This commit is contained in:
Andrey Breslav
2013-04-16 18:55:48 +04:00
parent 2e44996cd0
commit e29418cde5
18 changed files with 67 additions and 15 deletions
@@ -95,6 +95,7 @@ public class ReplInterpreter {
true,
Collections.<AnalyzerScriptParameter>emptyList());
injector = new InjectorForTopDownAnalyzerForJvm(project, topDownAnalysisParameters, trace, module);
module.setModuleConfiguration(injector.getModuleConfiguration());
List<URL> classpath = Lists.newArrayList();
@@ -92,7 +92,7 @@ public class InjectorForJavaDescriptorResolver {
this.javaInnerClassResolver = new JavaInnerClassResolver();
this.javaPropertyResolver = new JavaPropertyResolver();
javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
this.javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver);
this.javaSemanticServices.setPsiClassFinder(psiClassFinder);
@@ -183,6 +183,10 @@ public class InjectorForJavaDescriptorResolver {
return this.moduleDescriptor;
}
public JavaBridgeConfiguration getJavaBridgeConfiguration() {
return this.javaBridgeConfiguration;
}
public JavaSemanticServices getJavaSemanticServices() {
return this.javaSemanticServices;
}
@@ -107,6 +107,8 @@ public class InjectorForJavaSemanticServices {
this.psiClassFinder.setProject(project);
moduleDescriptor.setModuleConfiguration(javaBridgeConfiguration);
javaTypeTransformer.setJavaSemanticServices(javaSemanticServices);
javaTypeTransformer.setResolver(javaDescriptorResolver);
@@ -31,14 +31,13 @@ import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.DefaultModuleConfiguration;
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.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
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.JetScope;
@@ -83,7 +82,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@NotNull
@Override
public ResolveSession getLazyResolveSession(@NotNull Project fileProject, @NotNull Collection<JetFile> files) {
ModuleDescriptor javaModule = new ModuleDescriptorImpl(Name.special("<java module>"));
ModuleDescriptorImpl javaModule = new ModuleDescriptorImpl(Name.special("<java module>"));
BindingTraceContext javaResolverTrace = new BindingTraceContext();
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(fileProject, javaResolverTrace, javaModule);
@@ -132,8 +131,10 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
return JavaToKotlinClassMap.getInstance();
}
};
javaModule.setModuleConfiguration(moduleConfiguration);
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(moduleConfiguration);
return new ResolveSession(fileProject, storageManager, lazyModule, moduleConfiguration, declarationProviderFactory, javaResolverTrace);
}
@@ -208,6 +209,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(
project, topDownAnalysisParameters,
new ObservableBindingTrace(trace), owner);
owner.setModuleConfiguration(injector.getModuleConfiguration());
try {
injector.getTopDownAnalyzer().analyzeFiles(files, scriptParameters);
BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ?
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.types.TypeSubstitutor;
@@ -28,6 +29,9 @@ public interface ModuleDescriptor extends DeclarationDescriptor, NamespaceDescri
NamespaceDescriptor getRootNamespace();
@NotNull
ModuleConfiguration getModuleConfiguration();
@NotNull
@Override
ModuleDescriptor substitute(@NotNull TypeSubstitutor substitutor);
@@ -18,16 +18,19 @@ package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.TypeSubstitutor;
import javax.inject.Inject;
import java.util.Collections;
public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, ModuleDescriptor {
private NamespaceDescriptor rootNamepsace;
private ModuleConfiguration moduleConfiguration;
public ModuleDescriptorImpl(@NotNull Name name) {
super(Collections.<AnnotationDescriptor>emptyList(), name);
@@ -54,6 +57,18 @@ public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements C
return rootNamepsace;
}
@NotNull
@Override
public ModuleConfiguration getModuleConfiguration() {
return moduleConfiguration;
}
@Inject
public ModuleDescriptorImpl setModuleConfiguration(@NotNull ModuleConfiguration moduleConfiguration) {
this.moduleConfiguration = moduleConfiguration;
return this;
}
public NamespaceDescriptorImpl getRootNamespaceDescriptorImpl() {
return (NamespaceDescriptorImpl) rootNamepsace;
}
@@ -187,6 +187,7 @@ public class TopDownAnalyzer {
@NotNull JetClassOrObject object
) {
ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl(Name.special("<dummy for object>"));
moduleDescriptor.setModuleConfiguration(ModuleConfiguration.EMPTY);
TopDownAnalysisParameters topDownAnalysisParameters =
new TopDownAnalysisParameters(Predicates.equalTo(object.getContainingFile()),
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.types;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.*;
@@ -31,7 +32,12 @@ import java.util.*;
public class ErrorUtils {
private static final ModuleDescriptor ERROR_MODULE = new ModuleDescriptorImpl(Name.special("<ERROR MODULE>"));
private static final ModuleDescriptor ERROR_MODULE;
static {
ModuleDescriptorImpl module = new ModuleDescriptorImpl(Name.special("<ERROR MODULE>"));
module.setModuleConfiguration(ModuleConfiguration.EMPTY);
ERROR_MODULE = module;
}
public static class ErrorScope implements JetScope {
@@ -171,6 +171,7 @@ public class KotlinBuiltIns {
private KotlinBuiltIns(@NotNull Project project) {
try {
this.builtInsModule = new ModuleDescriptorImpl(Name.special("<built-ins lazy module>"));
builtInsModule.setModuleConfiguration(SpecialModuleConfiguration.INSTANCE);
this.analyzer = createLazyResolveSession(project);
this.functionClassesSet = computeIndexedClasses("Function", FUNCTION_TRAIT_COUNT);
@@ -228,7 +229,7 @@ public class KotlinBuiltIns {
project,
storageManager,
builtInsModule,
new SpecialModuleConfiguration(),
SpecialModuleConfiguration.INSTANCE,
new FileBasedDeclarationProviderFactory(storageManager, files),
ResolveSession.NO_ALIASES,
Predicates.in(Sets.newHashSet(new FqNameUnsafe("jet.Any"), new FqNameUnsafe("jet.Nothing"))),
@@ -258,6 +259,8 @@ public class KotlinBuiltIns {
private static class SpecialModuleConfiguration implements ModuleConfiguration {
public static final ModuleConfiguration INSTANCE = new SpecialModuleConfiguration();
private SpecialModuleConfiguration() {
}
@@ -153,6 +153,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
Predicates.<PsiFile>alwaysFalse(), false, false, Collections.<AnalyzerScriptParameter>emptyList()),
trace,
moduleDescriptor);
moduleDescriptor.setModuleConfiguration(injectorForAnalyzer.getModuleConfiguration());
injectorForAnalyzer.getTopDownAnalyzer().analyzeFiles(environment.getSourceFiles(), Collections.<AnalyzerScriptParameter>emptyList());
@@ -55,6 +55,7 @@ public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTe
Collection<JetFile> files = Lists.newArrayList(psiFile);
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(injectorForTopDownAnalyzer.getModuleConfiguration());
LockBasedStorageManager storageManager = new LockBasedStorageManager();
final ResolveSession resolveSession = new ResolveSession(getProject(), storageManager, lazyModule, injectorForTopDownAnalyzer.getModuleConfiguration(),
new FileBasedDeclarationProviderFactory(storageManager, files));
@@ -63,6 +63,7 @@ public class LazyResolveTestUtil {
ModuleDescriptorImpl eagerModuleForLazy = new ModuleDescriptorImpl(Name.special("<eager module for lazy>"));
InjectorForTopDownAnalyzer tdaInjectorForLazy = createInjectorForTDA(eagerModuleForLazy, environment);
eagerModuleForLazy.setModuleConfiguration(tdaInjectorForLazy.getModuleConfiguration());
// This line is required fro the 'jet' namespace to be filled in with functions
tdaInjectorForLazy.getTopDownAnalyzer().analyzeFiles(
Collections.singletonList(JetPsiFactory.createFile(environment.getProject(), "")), Collections.<AnalyzerScriptParameter>emptyList());
@@ -81,6 +82,7 @@ public class LazyResolveTestUtil {
public static ModuleDescriptor resolveEagerly(List<JetFile> files, JetCoreEnvironment environment) {
ModuleDescriptorImpl module = new ModuleDescriptorImpl(Name.special("<test module>"));
InjectorForTopDownAnalyzer injector = createInjectorForTDA(module, environment);
module.setModuleConfiguration(injector.getModuleConfiguration());
injector.getTopDownAnalyzer().analyzeFiles(files, Collections.<AnalyzerScriptParameter>emptyList());
return module;
}
@@ -88,7 +90,7 @@ public class LazyResolveTestUtil {
public static KotlinCodeAnalyzer resolveLazilyWithSession(List<JetFile> files, JetCoreEnvironment environment) {
JetTestUtils.newTrace(environment);
ModuleDescriptor javaModule = new ModuleDescriptorImpl(Name.special("<java module>"));
ModuleDescriptorImpl javaModule = new ModuleDescriptorImpl(Name.special("<java module>"));
Project project = environment.getProject();
BindingTrace sharedTrace = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject()).getTrace();
@@ -137,8 +139,10 @@ public class LazyResolveTestUtil {
return JavaToKotlinClassMap.getInstance();
}
};
javaModule.setModuleConfiguration(moduleConfiguration);
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(moduleConfiguration);
return new ResolveSession(project, storageManager, lazyModule, moduleConfiguration, declarationProviderFactory, sharedTrace);
}
@@ -60,7 +60,7 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture {
}
public class JetDefaultModalityModifiersTestCase {
private ModuleDescriptor root = new ModuleDescriptorImpl(Name.special("<test_root>"));
private ModuleDescriptorImpl root = new ModuleDescriptorImpl(Name.special("<test_root>"));
private DescriptorResolver descriptorResolver;
private JetScope scope;
@@ -120,7 +120,7 @@ public class GenerateInjectors {
generator.addPublicParameter(ModuleDescriptor.class);
// Fields
generator.addField(JavaBridgeConfiguration.class);
generator.addPublicField(JavaBridgeConfiguration.class);
generator.addPublicField(JavaSemanticServices.class);
generator.addPublicField(JavaDescriptorResolver.class);
generator.addPublicField(PsiClassFinderImpl.class);
@@ -116,7 +116,10 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
BindingContext bindingContext = declarationsCache.getBindingContext();
DelegatingBindingTrace delegatingTrace = new DelegatingBindingTrace(bindingContext, "wrapped context of declarations cache");
return new InjectorForJavaDescriptorResolver(project, delegatingTrace, new ModuleDescriptorImpl(Name.special("<fake>")));
ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl(Name.special("<fake>"));
InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, delegatingTrace, moduleDescriptor);
moduleDescriptor.setModuleConfiguration(injector.getJavaBridgeConfiguration());
return injector;
}
@Nullable
@@ -221,10 +221,12 @@ public class JetSourceNavigationHelper {
return KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName);
}
});
ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl(Name.special("<library module>"));
moduleDescriptor.setModuleConfiguration(DefaultModuleConfiguration.createStandardConfiguration());
KotlinCodeAnalyzer analyzer = new ResolveSession(
project,
storageManager,
new ModuleDescriptorImpl(Name.special("<library module>")),
moduleDescriptor,
DefaultModuleConfiguration.createStandardConfiguration(),
providerFactory);
@@ -34,6 +34,7 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
@@ -224,9 +225,9 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
private WritableScope memberScope;
private FakeJetNamespaceDescriptor() {
super(new NamespaceDescriptorImpl(new ModuleDescriptorImpl(Name.special("<fake_module>")),
Collections.<AnnotationDescriptor>emptyList(), Name.special("<root>")),
Collections.<AnnotationDescriptor>emptyList(),
super(new NamespaceDescriptorImpl(
new ModuleDescriptorImpl(Name.special("<fake_module>")).setModuleConfiguration(ModuleConfiguration.EMPTY),
Collections.<AnnotationDescriptor>emptyList(), Name.special("<root>")), Collections.<AnnotationDescriptor>emptyList(),
KotlinBuiltIns.getInstance().getBuiltInsPackage().getName());
}
@@ -90,6 +90,7 @@ public final class AnalyzerFacadeForJS {
InjectorForTopDownAnalyzerForJs injector = new InjectorForTopDownAnalyzerForJs(
project, topDownAnalysisParameters, trace, owner,
new JsConfiguration(libraryBindingContext));
owner.setModuleConfiguration(injector.getModuleConfiguration());
try {
Collection<JetFile> allFiles = libraryBindingContext != null ?
files :
@@ -144,6 +145,7 @@ public final class AnalyzerFacadeForJS {
FileBasedDeclarationProviderFactory declarationProviderFactory = new FileBasedDeclarationProviderFactory(
storageManager, Config.withJsLibAdded(files, config), Predicates.<FqName>alwaysFalse());
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
return new ResolveSession(config.getProject(), storageManager, lazyModule, new JsConfiguration(null), declarationProviderFactory);
lazyModule.setModuleConfiguration(new JsConfiguration(null));
return new ResolveSession(config.getProject(), storageManager, lazyModule, lazyModule.getModuleConfiguration(), declarationProviderFactory);
}
}