Replace ModuleDescriptorImpl implementation
Change the way modules are configured: Add dependencies on other modules instead of adding additional package fragment providers Refactor related code Drop DependencyKind Hide common new module creation in CliLightClassGenerationSupport
This commit is contained in:
@@ -58,6 +58,8 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
private val moduleDescriptor =
|
||||
ModuleDescriptorImpl(Name.special("<module for building decompiled sources>"), listOf(), PlatformToKotlinClassMap.EMPTY)
|
||||
|
||||
private fun createDummyModule(name: String) = ModuleDescriptorImpl(Name.special("<$name>"), listOf(), PlatformToKotlinClassMap.EMPTY)
|
||||
|
||||
override fun resolveTopLevelClass(classFqName: FqName) = deserializationContext.classDeserializer.deserializeClass(classFqName.toClassId())
|
||||
|
||||
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
|
||||
@@ -140,10 +142,17 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
}
|
||||
|
||||
{
|
||||
moduleDescriptor.addFragmentProvider(DependencyKind.BUILT_INS,
|
||||
KotlinBuiltIns.getInstance().getBuiltInsModule().getPackageFragmentProvider())
|
||||
moduleDescriptor.addFragmentProvider(DependencyKind.SOURCES, packageFragmentProvider)
|
||||
moduleDescriptor.addFragmentProvider(DependencyKind.BINARIES, PackageFragmentProviderForMissingDependencies(moduleDescriptor))
|
||||
moduleDescriptor.initialize(packageFragmentProvider)
|
||||
moduleDescriptor.addDependencyOnModule(moduleDescriptor)
|
||||
moduleDescriptor.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule())
|
||||
val moduleContainingMissingDependencies = createDummyModule("module containing missing dependencies for decompiled sources")
|
||||
moduleContainingMissingDependencies.addDependencyOnModule(moduleContainingMissingDependencies)
|
||||
moduleContainingMissingDependencies.initialize(
|
||||
PackageFragmentProviderForMissingDependencies(moduleContainingMissingDependencies)
|
||||
)
|
||||
moduleDescriptor.addDependencyOnModule(moduleContainingMissingDependencies)
|
||||
moduleDescriptor.seal()
|
||||
moduleContainingMissingDependencies.seal()
|
||||
}
|
||||
val deserializationContext = DeserializationGlobalContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
|
||||
constantLoader, packageFragmentProvider)
|
||||
|
||||
@@ -44,7 +44,6 @@ import org.jetbrains.jet.di.InjectorForLazyResolve;
|
||||
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DependencyKind;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||
@@ -53,6 +52,7 @@ import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
@@ -216,24 +216,7 @@ public class JetSourceNavigationHelper {
|
||||
}
|
||||
}
|
||||
|
||||
Project project = decompiledDeclaration.getProject();
|
||||
GlobalContextImpl globalContext = ContextPackage.GlobalContext();
|
||||
FileBasedDeclarationProviderFactory providerFactory = new FileBasedDeclarationProviderFactory(
|
||||
globalContext.getStorageManager(),
|
||||
getContainingFiles(candidates));
|
||||
|
||||
ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl(Name.special("<library module>"),
|
||||
AnalyzerFacadeForJVM.DEFAULT_IMPORTS,
|
||||
PlatformToKotlinClassMap.EMPTY);
|
||||
|
||||
moduleDescriptor.addFragmentProvider(DependencyKind.BUILT_INS, KotlinBuiltIns.getInstance().getBuiltInsModule().getPackageFragmentProvider());
|
||||
|
||||
KotlinCodeAnalyzer analyzer = new InjectorForLazyResolve(
|
||||
project,
|
||||
globalContext,
|
||||
moduleDescriptor,
|
||||
providerFactory,
|
||||
new BindingTraceContext()).getResolveSession();
|
||||
KotlinCodeAnalyzer analyzer = createAnalyzer(candidates, decompiledDeclaration.getProject());
|
||||
|
||||
for (JetNamedDeclaration candidate : candidates) {
|
||||
//noinspection unchecked
|
||||
@@ -248,6 +231,36 @@ public class JetSourceNavigationHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static KotlinCodeAnalyzer createAnalyzer(
|
||||
@NotNull Collection<JetNamedDeclaration> candidates,
|
||||
@NotNull Project project
|
||||
) {
|
||||
GlobalContextImpl globalContext = ContextPackage.GlobalContext();
|
||||
FileBasedDeclarationProviderFactory providerFactory = new FileBasedDeclarationProviderFactory(
|
||||
globalContext.getStorageManager(),
|
||||
getContainingFiles(candidates)
|
||||
);
|
||||
|
||||
ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl(Name.special("<library module>"),
|
||||
AnalyzerFacadeForJVM.DEFAULT_IMPORTS,
|
||||
PlatformToKotlinClassMap.EMPTY);
|
||||
|
||||
moduleDescriptor.addDependencyOnModule(moduleDescriptor);
|
||||
moduleDescriptor.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule());
|
||||
moduleDescriptor.seal();
|
||||
|
||||
ResolveSession resolveSession = new InjectorForLazyResolve(
|
||||
project,
|
||||
globalContext,
|
||||
moduleDescriptor,
|
||||
providerFactory,
|
||||
new BindingTraceContext()).getResolveSession();
|
||||
|
||||
moduleDescriptor.initialize(resolveSession.getPackageFragmentProvider());
|
||||
return resolveSession;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static JetClassOrObject getSourceForNamedClassOrObject(@NotNull JetClassOrObject decompiledClassOrObject) {
|
||||
FqName classFqName = decompiledClassOrObject.getFqName();
|
||||
|
||||
@@ -102,6 +102,8 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
||||
Predicates.<PsiFile>alwaysFalse(), true, false);
|
||||
ModuleDescriptorImpl module = new ModuleDescriptorImpl(
|
||||
Name.special("<fake_module>"), Collections.<ImportPath>emptyList(), PlatformToKotlinClassMap.EMPTY);
|
||||
module.addDependencyOnModule(module);
|
||||
module.seal();
|
||||
BindingTraceContext trace = new BindingTraceContext();
|
||||
InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic(
|
||||
myProject, topDownAnalysisParameters, trace, module);
|
||||
|
||||
Reference in New Issue
Block a user