J2K TopDownAnalyzerFacadeFor{JVM,JS}: convert to Kotlin
This commit is contained in:
+91
-102
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,80 +14,75 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.js.analyze;
|
||||
package org.jetbrains.kotlin.js.analyze
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
||||
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.descriptors.PackageFragmentProvider;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||
import org.jetbrains.kotlin.frontend.js.di.InjectionKt;
|
||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult;
|
||||
import org.jetbrains.kotlin.js.config.JsConfig;
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatform;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
|
||||
import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor;
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.context.*
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.context.MutableModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.frontend.js.di.*
|
||||
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
|
||||
import org.jetbrains.kotlin.js.config.JsConfig
|
||||
import org.jetbrains.kotlin.js.resolve.JsPlatform
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.serialization.js.JsModuleDescriptor
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList
|
||||
import java.util.Collections
|
||||
|
||||
public final class TopDownAnalyzerFacadeForJS {
|
||||
private TopDownAnalyzerFacadeForJS() {
|
||||
object TopDownAnalyzerFacadeForJS {
|
||||
@JvmStatic
|
||||
fun analyzeFiles(files: Collection<KtFile>, config: JsConfig): JsAnalysisResult {
|
||||
val trace = BindingTraceContext()
|
||||
|
||||
val newModuleContext = ContextForNewModule(
|
||||
ProjectContext(config.project), Name.special("<" + config.moduleId + ">"), JsPlatform,
|
||||
JsPlatform.builtIns
|
||||
)
|
||||
newModuleContext.setDependencies(computeDependencies(newModuleContext.module, config))
|
||||
return analyzeFilesWithGivenTrace(files, trace, newModuleContext, config)
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsAnalysisResult analyzeFiles(@NotNull Collection<KtFile> files, @NotNull JsConfig config) {
|
||||
BindingTrace trace = new BindingTraceContext();
|
||||
|
||||
MutableModuleContext newModuleContext = ContextKt.ContextForNewModule(
|
||||
ContextKt.ProjectContext(config.getProject()), Name.special("<" + config.getModuleId() + ">"), JsPlatform.INSTANCE,
|
||||
JsPlatform.INSTANCE.getBuiltIns()
|
||||
);
|
||||
newModuleContext.setDependencies(computeDependencies(newModuleContext.getModule(), config));
|
||||
return analyzeFilesWithGivenTrace(files, trace, newModuleContext, config);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<ModuleDescriptorImpl> computeDependencies(ModuleDescriptorImpl module, @NotNull JsConfig config) {
|
||||
List<ModuleDescriptorImpl> allDependencies = new ArrayList<ModuleDescriptorImpl>();
|
||||
allDependencies.add(module);
|
||||
for (JsModuleDescriptor<ModuleDescriptorImpl> descriptor : config.getModuleDescriptors()) {
|
||||
allDependencies.add(descriptor.getData());
|
||||
private fun computeDependencies(module: ModuleDescriptorImpl, config: JsConfig): List<ModuleDescriptorImpl> {
|
||||
val allDependencies = ArrayList<ModuleDescriptorImpl>()
|
||||
allDependencies.add(module)
|
||||
for (descriptor in config.moduleDescriptors) {
|
||||
allDependencies.add(descriptor.data)
|
||||
}
|
||||
allDependencies.add(JsPlatform.INSTANCE.getBuiltIns().getBuiltInsModule());
|
||||
return allDependencies;
|
||||
allDependencies.add(JsPlatform.builtIns.builtInsModule)
|
||||
return allDependencies
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsAnalysisResult analyzeFilesWithGivenTrace(
|
||||
@NotNull Collection<KtFile> files,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull ModuleContext moduleContext,
|
||||
@NotNull JsConfig config
|
||||
) {
|
||||
Collection<KtFile> allFiles = JsConfig.withJsLibAdded(files, config);
|
||||
@JvmStatic
|
||||
fun analyzeFilesWithGivenTrace(
|
||||
files: Collection<KtFile>,
|
||||
trace: BindingTrace,
|
||||
moduleContext: ModuleContext,
|
||||
config: JsConfig
|
||||
): JsAnalysisResult {
|
||||
val allFiles = JsConfig.withJsLibAdded(files, config)
|
||||
|
||||
LazyTopDownAnalyzerForTopLevel analyzerForJs = InjectionKt.createTopDownAnalyzerForJs(
|
||||
val analyzerForJs = createTopDownAnalyzerForJs(
|
||||
moduleContext, trace,
|
||||
new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), allFiles),
|
||||
config.getConfiguration().get(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
|
||||
);
|
||||
analyzerForJs.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, Collections.<PackageFragmentProvider>emptyList());
|
||||
return JsAnalysisResult.success(trace, moduleContext.getModule());
|
||||
FileBasedDeclarationProviderFactory(moduleContext.storageManager, allFiles),
|
||||
config.configuration.get<LanguageVersionSettings>(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, LanguageVersionSettingsImpl.DEFAULT)
|
||||
)
|
||||
analyzerForJs.analyzeFiles(TopDownAnalysisMode.TopLevelDeclarations, files, emptyList<PackageFragmentProvider>())
|
||||
return JsAnalysisResult.success(trace, moduleContext.module)
|
||||
}
|
||||
|
||||
public static void checkForErrors(@NotNull Collection<KtFile> allFiles, @NotNull BindingContext bindingContext) {
|
||||
AnalyzingUtils.throwExceptionOnErrors(bindingContext);
|
||||
for (KtFile file : allFiles) {
|
||||
AnalyzingUtils.checkForSyntacticErrors(file);
|
||||
@JvmStatic
|
||||
fun checkForErrors(allFiles: Collection<KtFile>, bindingContext: BindingContext) {
|
||||
AnalyzingUtils.throwExceptionOnErrors(bindingContext)
|
||||
for (file in allFiles) {
|
||||
AnalyzingUtils.checkForSyntacticErrors(file)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user