Big refactoring. Migrating to package views and fragments.

This commit is contained in:
Evgeny Gerashchenko
2013-10-11 21:43:40 +04:00
parent 369824cd2e
commit 7abe6a5b4a
141 changed files with 1728 additions and 1465 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
@@ -27,12 +28,13 @@ import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationRe
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer;
@@ -58,12 +60,13 @@ public class InjectorForJavaDescriptorResolver {
private final JavaDescriptorResolver javaDescriptorResolver;
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
private final VirtualFileFinder virtualFileFinder;
private final ModuleDescriptorImpl module;
private final JavaAnnotationResolver javaAnnotationResolver;
private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver;
private final JavaClassResolver javaClassResolver;
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
private final JavaNamespaceResolver javaNamespaceResolver;
private final JavaPackageFragmentProvider javaPackageFragmentProvider;
private final JavaMemberResolver javaMemberResolver;
private final JavaConstructorResolver javaConstructorResolver;
private final JavaTypeTransformer javaTypeTransformer;
@@ -88,12 +91,13 @@ public class InjectorForJavaDescriptorResolver {
this.javaDescriptorResolver = new JavaDescriptorResolver();
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule("<fake-jdr-module>");
this.javaAnnotationResolver = new JavaAnnotationResolver();
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
this.javaClassResolver = new JavaClassResolver();
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
this.javaNamespaceResolver = new JavaNamespaceResolver();
this.javaPackageFragmentProvider = new JavaPackageFragmentProvider();
this.javaMemberResolver = new JavaMemberResolver();
this.javaConstructorResolver = new JavaConstructorResolver();
this.javaTypeTransformer = new JavaTypeTransformer();
@@ -116,7 +120,7 @@ public class InjectorForJavaDescriptorResolver {
psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
this.javaDescriptorResolver.setClassResolver(javaClassResolver);
this.javaDescriptorResolver.setNamespaceResolver(javaNamespaceResolver);
this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
@@ -135,29 +139,29 @@ public class InjectorForJavaDescriptorResolver {
javaClassResolver.setJavaClassFinder(javaClassFinder);
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaClassResolver.setMemberResolver(javaMemberResolver);
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider);
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
javaNamespaceResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaNamespaceResolver.setMemberResolver(javaMemberResolver);
javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache);
javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder);
javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaPackageFragmentProvider.setMemberResolver(javaMemberResolver);
javaPackageFragmentProvider.setModule(module);
javaMemberResolver.setClassResolver(javaClassResolver);
javaMemberResolver.setConstructorResolver(javaConstructorResolver);
javaMemberResolver.setFunctionResolver(javaFunctionResolver);
javaMemberResolver.setNamespaceResolver(javaNamespaceResolver);
javaMemberResolver.setPropertyResolver(javaPropertyResolver);
javaConstructorResolver.setCache(traceBasedJavaResolverCache);
@@ -206,4 +210,8 @@ public class InjectorForJavaDescriptorResolver {
return this.javaDescriptorResolver;
}
public ModuleDescriptorImpl getModule() {
return this.module;
}
}
@@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
@@ -63,7 +64,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolv
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
@@ -98,6 +99,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final NamespaceFactoryImpl namespaceFactory;
private final VirtualFileFinder virtualFileFinder;
private final DeclarationResolver declarationResolver;
@@ -124,7 +126,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final JavaTypeTransformer javaTypeTransformer;
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
private final JavaNamespaceResolver javaNamespaceResolver;
private final JavaPackageFragmentProvider javaPackageFragmentProvider;
private final JavaMemberResolver javaMemberResolver;
private final JavaConstructorResolver javaConstructorResolver;
private final JavaValueParameterResolver javaValueParameterResolver;
@@ -160,6 +162,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.namespaceFactory = new NamespaceFactoryImpl();
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
this.declarationResolver = new DeclarationResolver();
@@ -186,7 +189,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.javaTypeTransformer = new JavaTypeTransformer();
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
this.javaNamespaceResolver = new JavaNamespaceResolver();
this.javaPackageFragmentProvider = new JavaPackageFragmentProvider();
this.javaMemberResolver = new JavaMemberResolver();
this.javaConstructorResolver = new JavaConstructorResolver();
this.javaValueParameterResolver = new JavaValueParameterResolver();
@@ -199,9 +202,9 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.topDownAnalyzer.setContext(topDownAnalysisContext);
this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
this.topDownAnalyzer.setModuleDescriptor(moduleDescriptor);
this.topDownAnalyzer.setNamespaceFactory(namespaceFactory);
this.topDownAnalyzer.setOverloadResolver(overloadResolver);
this.topDownAnalyzer.setOverrideResolver(overrideResolver);
this.topDownAnalyzer.setPackageFragmentProvider(mutablePackageFragmentProvider);
this.topDownAnalyzer.setTopDownAnalysisParameters(topDownAnalysisParameters);
this.topDownAnalyzer.setTrace(bindingTrace);
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
@@ -230,10 +233,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setTypeResolver(typeResolver);
this.javaBridgeConfiguration.setJavaDescriptorResolver(javaDescriptorResolver);
javaDescriptorResolver.setClassResolver(javaClassResolver);
javaDescriptorResolver.setNamespaceResolver(javaNamespaceResolver);
javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
javaClassFinder.setProject(project);
@@ -249,8 +250,9 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
this.namespaceFactory.setModuleDescriptor(moduleDescriptor);
this.namespaceFactory.setTrace(bindingTrace);
namespaceFactory.setModule(moduleDescriptor);
namespaceFactory.setPackageFragmentProvider(mutablePackageFragmentProvider);
namespaceFactory.setTrace(bindingTrace);
declarationResolver.setAnnotationResolver(annotationResolver);
declarationResolver.setContext(topDownAnalysisContext);
@@ -330,7 +332,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaClassResolver.setJavaClassFinder(javaClassFinder);
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaClassResolver.setMemberResolver(javaMemberResolver);
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
@@ -347,22 +349,22 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider);
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
javaNamespaceResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaNamespaceResolver.setMemberResolver(javaMemberResolver);
javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache);
javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder);
javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder);
javaPackageFragmentProvider.setMemberResolver(javaMemberResolver);
javaPackageFragmentProvider.setModule(moduleDescriptor);
javaMemberResolver.setClassResolver(javaClassResolver);
javaMemberResolver.setConstructorResolver(javaConstructorResolver);
javaMemberResolver.setFunctionResolver(javaFunctionResolver);
javaMemberResolver.setNamespaceResolver(javaNamespaceResolver);
javaMemberResolver.setPropertyResolver(javaPropertyResolver);
javaConstructorResolver.setCache(traceBasedJavaResolverCache);
@@ -445,8 +447,4 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
return this.javaBridgeConfiguration;
}
public NamespaceFactoryImpl getNamespaceFactory() {
return this.namespaceFactory;
}
}
@@ -26,10 +26,9 @@ import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything;
import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.DefaultModuleConfiguration;
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.java.mapping.JavaToKotlinClassMap;
@@ -38,8 +37,6 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProv
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedLazyResolveStorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import java.util.Collection;
@@ -90,7 +87,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@NotNull Collection<JetFile> files,
@NotNull BindingTrace trace,
@NotNull InjectorForJavaDescriptorResolver injector,
final boolean addBuiltIns
boolean addBuiltIns
) {
final JavaClassFinderImpl classFinder = injector.getJavaClassFinder();
@@ -103,30 +100,17 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
}
});
final JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
ModuleConfiguration moduleConfiguration = new ModuleConfiguration() {
@Override
public void extendNamespaceScope(
@NotNull NamespaceDescriptor namespaceDescriptor,
@NotNull WritableScope namespaceMemberScope
) {
FqName fqName = DescriptorUtils.getFQName(namespaceDescriptor).toSafe();
if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName) && addBuiltIns) {
namespaceMemberScope.importScope(KotlinBuiltIns.getInstance().getBuiltInsScope());
}
if (classFinder.findPackage(fqName) != null) {
JetScope javaPackageScope = javaDescriptorResolver.getJavaPackageScope(namespaceDescriptor);
assert javaPackageScope != null;
namespaceMemberScope.importScope(javaPackageScope);
}
}
};
ModuleDescriptorImpl module = injector.getModule();
ModuleDescriptorImpl lazyModule = createJavaModule("<lazy module>");
lazyModule.setModuleConfiguration(moduleConfiguration);
module.setModuleConfiguration(DefaultModuleConfiguration.INSTANCE);
module.addFragmentProvider(javaDescriptorResolver.getPackageFragmentProvider());
if (addBuiltIns) {
module.addFragmentProvider(KotlinBuiltIns.getInstance().getBuiltInsModule().getPackageFragmentProvider());
}
return new ResolveSession(project, storageManager, lazyModule, declarationProviderFactory, trace);
return new ResolveSession(project, storageManager, module, declarationProviderFactory, trace);
}
public static AnalyzeExhaust analyzeOneFileWithJavaIntegrationAndCheckForErrors(
@@ -192,7 +176,6 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
boolean storeContextForBodiesResolve
) {
ModuleDescriptorImpl owner = createJavaModule("<module>");
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false, scriptParameters);
@@ -206,7 +189,8 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) :
null;
return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, owner);
} finally {
}
finally {
injector.destroy();
}
}
@@ -17,7 +17,7 @@
package org.jetbrains.jet.lang.resolve.java;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.util.slicedmap.Slices;
import org.jetbrains.jet.util.slicedmap.WritableSlice;
@@ -32,7 +32,7 @@ public class JavaBindingContext {
/**
* @see BindingContext#NAMESPACE_IS_SRC
*/
public static final WritableSlice<NamespaceDescriptor, JavaNamespaceKind> JAVA_NAMESPACE_KIND = Slices.createSimpleSlice();
public static final WritableSlice<PackageFragmentDescriptor, JavaNamespaceKind> JAVA_NAMESPACE_KIND = Slices.createSimpleSlice();
public static final WritableSlice<DeclarationDescriptor, List<String>> LOAD_FROM_JAVA_SIGNATURE_ERRORS = Slices.createCollectiveSlice();
@@ -64,12 +64,6 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache {
return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName);
}
@Nullable
@Override
public NamespaceDescriptor getPackageResolvedFromSource(@NotNull FqName fqName) {
return trace.get(FQNAME_TO_NAMESPACE_DESCRIPTOR, fqName);
}
@Nullable
@Override
public SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method) {
@@ -132,17 +126,12 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache {
}
@Override
public void recordProperNamespace(@NotNull NamespaceDescriptor descriptor) {
public void recordProperPackage(@NotNull PackageFragmentDescriptor descriptor) {
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, descriptor, JavaNamespaceKind.PROPER);
}
@Override
public void recordClassStaticMembersNamespace(@NotNull NamespaceDescriptor descriptor) {
public void recordClassStaticMembersNamespace(@NotNull PackageFragmentDescriptor descriptor) {
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, descriptor, JavaNamespaceKind.CLASS_STATICS);
}
@Override
public void recordPackage(@NotNull JavaElement element, @NotNull NamespaceDescriptor descriptor) {
trace.record(NAMESPACE, ((JavaElementImpl) element).getPsi(), descriptor);
}
}