JS: add tests for recompilation of only some files in a project

This commit is contained in:
Alexey Andreev
2017-02-17 19:10:12 +03:00
parent 49dacfcd76
commit c85108602a
16 changed files with 379 additions and 138 deletions
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.incremental.components.LookupTracker
@@ -30,12 +32,15 @@ import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil
fun createTopDownAnalyzerForJs(
moduleContext: ModuleContext,
bindingTrace: BindingTrace,
declarationProviderFactory: DeclarationProviderFactory,
languageVersionSettings: LanguageVersionSettings
languageVersionSettings: LanguageVersionSettings,
fallbackMetadata: List<ByteArray> = emptyList()
): LazyTopDownAnalyzer {
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
configureModule(moduleContext, JsPlatform, TargetPlatformVersion.NoVersion, bindingTrace)
@@ -50,7 +55,13 @@ fun createTopDownAnalyzerForJs(
useImpl<ResolveSession>()
useImpl<LazyTopDownAnalyzer>()
}.apply {
get<ModuleDescriptorImpl>().initialize(get<KotlinCodeAnalyzer>().packageFragmentProvider)
val packagePartProviders = mutableListOf<PackageFragmentProvider>(get<KotlinCodeAnalyzer>().packageFragmentProvider)
val moduleDescriptor = get<ModuleDescriptorImpl>()
if (fallbackMetadata.isNotEmpty()) {
packagePartProviders += KotlinJavascriptSerializationUtil.readScope(
fallbackMetadata, moduleContext.storageManager, moduleDescriptor, DeserializationConfiguration.Default)
}
moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders))
}
return storageComponentContainer.get<LazyTopDownAnalyzer>()
}
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.frontend.js.di.createTopDownAnalyzerForJs
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.config.JsConfig
import org.jetbrains.kotlin.js.resolve.JsPlatform
import org.jetbrains.kotlin.js.resolve.MODULE_KIND
@@ -56,7 +57,8 @@ object TopDownAnalyzerFacadeForJS {
val analyzerForJs = createTopDownAnalyzerForJs(
moduleContext, trace,
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
config.configuration.languageVersionSettings
config.configuration.languageVersionSettings,
config.configuration[JSConfigurationKeys.FALLBACK_METADATA].orEmpty()
)
analyzerForJs.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
return JsAnalysisResult.success(trace, moduleContext.module)
@@ -39,4 +39,9 @@ public class JSConfigurationKeys {
public static final CompilerConfigurationKey<Boolean> TYPED_ARRAYS_ENABLED =
CompilerConfigurationKey.create("TypedArrays enabled");
public static final CompilerConfigurationKey<List<byte[]>> FALLBACK_METADATA =
CompilerConfigurationKey.create("fallback metadata");
public static final CompilerConfigurationKey<Boolean> SERIALIZE_FRAGMENTS = CompilerConfigurationKey.create("serialize fragments");
}