J2K TopDownAnalyzerFacadeFor{JVM,JS}: convert to Kotlin

This commit is contained in:
Alexander Udalov
2016-09-26 18:31:01 +03:00
parent b34150e1ce
commit 4467e127f0
2 changed files with 148 additions and 164 deletions
@@ -14,146 +14,135 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.resolve.jvm;
package org.jetbrains.kotlin.resolve.jvm
import com.intellij.openapi.project.Project;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analyzer.AnalysisResult;
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
import org.jetbrains.kotlin.config.CompilerConfiguration;
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl;
import org.jetbrains.kotlin.context.ContextKt;
import org.jetbrains.kotlin.context.ModuleContext;
import org.jetbrains.kotlin.context.MutableModuleContext;
import org.jetbrains.kotlin.context.ProjectContext;
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
import org.jetbrains.kotlin.descriptors.PackagePartProvider;
import org.jetbrains.kotlin.frontend.java.di.ContainerForTopDownAnalyzerForJvm;
import org.jetbrains.kotlin.frontend.java.di.InjectionKt;
import org.jetbrains.kotlin.incremental.components.LookupTracker;
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider;
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider;
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
import org.jetbrains.kotlin.modules.Module;
import org.jetbrains.kotlin.modules.TargetId;
import org.jetbrains.kotlin.modules.TargetIdKt;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.platform.JvmBuiltIns;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.BindingTrace;
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode;
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension;
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension;
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.context.*
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.MutableModuleContext
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.frontend.java.di.ContainerForTopDownAnalyzerForJvm
import org.jetbrains.kotlin.frontend.java.di.*
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.modules.TargetId
import org.jetbrains.kotlin.modules.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.JvmBuiltIns
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ArrayList
public enum TopDownAnalyzerFacadeForJVM {
object TopDownAnalyzerFacadeForJVM {
@JvmStatic
fun analyzeFilesWithJavaIntegration(
moduleContext: ModuleContext,
files: Collection<KtFile>,
trace: BindingTrace,
configuration: CompilerConfiguration,
packagePartProvider: PackagePartProvider
): AnalysisResult {
var packagePartProvider = packagePartProvider
val project = moduleContext.project
INSTANCE;
val providerFactory = FileBasedDeclarationProviderFactory(moduleContext.storageManager, files)
@NotNull
public static AnalysisResult analyzeFilesWithJavaIntegration(
@NotNull ModuleContext moduleContext,
@NotNull Collection<KtFile> files,
@NotNull BindingTrace trace,
@NotNull CompilerConfiguration configuration,
@NotNull PackagePartProvider packagePartProvider
) {
Project project = moduleContext.getProject();
val incrementalCompilationComponents = configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS)
val lookupTracker = if (incrementalCompilationComponents != null)
incrementalCompilationComponents.getLookupTracker()
else
LookupTracker.DO_NOTHING
FileBasedDeclarationProviderFactory providerFactory =
new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), files);
IncrementalCompilationComponents incrementalCompilationComponents =
configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS);
LookupTracker lookupTracker =
incrementalCompilationComponents != null
? incrementalCompilationComponents.getLookupTracker()
: LookupTracker.Companion.getDO_NOTHING();
List<TargetId> targetIds = null;
List<Module> modules = configuration.get(JVMConfigurationKeys.MODULES);
var targetIds: MutableList<TargetId>? = null
val modules = configuration.get(JVMConfigurationKeys.MODULES)
if (modules != null) {
targetIds = new ArrayList<TargetId>(modules.size());
targetIds = ArrayList<TargetId>(modules.size)
for (Module module : modules) {
targetIds.add(TargetIdKt.TargetId(module));
for (module in modules) {
targetIds.add(TargetId(module))
}
}
packagePartProvider = IncrementalPackagePartProvider.create(
packagePartProvider, files, targetIds, incrementalCompilationComponents, moduleContext.getStorageManager()
);
packagePartProvider, files, targetIds, incrementalCompilationComponents, moduleContext.storageManager
)
ContainerForTopDownAnalyzerForJvm container = InjectionKt.createContainerForTopDownAnalyzerForJvm(
val container = createContainerForTopDownAnalyzerForJvm(
moduleContext,
trace,
providerFactory,
GlobalSearchScope.allScope(project),
lookupTracker,
packagePartProvider,
configuration.get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
);
configuration.get<LanguageVersionSettings>(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
)
List<PackageFragmentProvider> additionalProviders = new ArrayList<PackageFragmentProvider>();
val additionalProviders = ArrayList<PackageFragmentProvider>()
if (targetIds != null && incrementalCompilationComponents != null) {
for (TargetId targetId : targetIds) {
IncrementalCache incrementalCache = incrementalCompilationComponents.getIncrementalCache(targetId);
for (targetId in targetIds) {
val incrementalCache = incrementalCompilationComponents.getIncrementalCache(targetId)
additionalProviders.add(
new IncrementalPackageFragmentProvider(
files, moduleContext.getModule(), moduleContext.getStorageManager(),
container.getDeserializationComponentsForJava().getComponents(),
IncrementalPackageFragmentProvider(
files, moduleContext.module, moduleContext.storageManager,
container.deserializationComponentsForJava.components,
incrementalCache, targetId
)
);
)
}
}
additionalProviders.add(container.getJavaDescriptorResolver().getPackageFragmentProvider());
additionalProviders.add(container.javaDescriptorResolver.packageFragmentProvider)
for (PackageFragmentProviderExtension extension : PackageFragmentProviderExtension.Companion.getInstances(project)) {
PackageFragmentProvider provider = extension.getPackageFragmentProvider(
project, moduleContext.getModule(), moduleContext.getStorageManager(), trace, null);
if (provider != null) additionalProviders.add(provider);
for (extension in PackageFragmentProviderExtension.getInstances(project)) {
val provider = extension.getPackageFragmentProvider(
project, moduleContext.module, moduleContext.storageManager, trace, null)
if (provider != null) additionalProviders.add(provider)
}
container.getLazyTopDownAnalyzerForTopLevel().analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, additionalProviders);
container.lazyTopDownAnalyzerForTopLevel.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, additionalProviders)
BindingContext bindingContext = trace.getBindingContext();
ModuleDescriptor module = moduleContext.getModule();
val bindingContext = trace.bindingContext
val module = moduleContext.module
Collection<AnalysisCompletedHandlerExtension> analysisCompletedHandlerExtensions =
AnalysisCompletedHandlerExtension.Companion.getInstances(moduleContext.getProject());
val analysisCompletedHandlerExtensions = AnalysisCompletedHandlerExtension.getInstances(moduleContext.project)
for (AnalysisCompletedHandlerExtension extension : analysisCompletedHandlerExtensions) {
AnalysisResult result = extension.analysisCompleted(project, module, trace, files);
if (result != null) return result;
for (extension in analysisCompletedHandlerExtensions) {
val result = extension.analysisCompleted(project, module, trace, files)
if (result != null) return result
}
return AnalysisResult.success(bindingContext, module);
return AnalysisResult.success(bindingContext, module)
}
@NotNull
public static MutableModuleContext createContextWithSealedModule(
@NotNull Project project, @NotNull CompilerConfiguration configuration
) {
ProjectContext projectContext = ContextKt.ProjectContext(project);
JvmBuiltIns builtIns = new JvmBuiltIns(projectContext.getStorageManager());
MutableModuleContext context = ContextKt.ContextForNewModule(
@JvmStatic
fun createContextWithSealedModule(
project: Project, configuration: CompilerConfiguration
): MutableModuleContext {
val projectContext = ProjectContext(project)
val builtIns = JvmBuiltIns(projectContext.storageManager)
val context = ContextForNewModule(
projectContext, Name.special("<" + configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME) + ">"),
JvmPlatform.INSTANCE, builtIns
);
context.setDependencies(context.getModule(), builtIns.getBuiltInsModule());
return context;
JvmPlatform, builtIns
)
context.setDependencies(context.module, builtIns.builtInsModule)
return context
}
}