From 0ed9897b0302074268c09de2b2c390f402579423 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 29 Sep 2016 18:51:40 +0300 Subject: [PATCH] Minor refactorings related to PackagePartProvider and implementations - Document what exactly should findPackageParts return - Make EMPTY a named object instead of a val in the companion - Do not use JvmPackagePartProvider in tests where Empty works fine - Add a couple default values to arguments of setupResolverForProject --- .../serialization/builtins/BuiltInsSerializer.kt | 8 +------- .../jetbrains/kotlin/analyzer/AnalyzerFacade.kt | 8 +++++--- .../jetbrains/kotlin/codegen/GenerationUtils.java | 2 +- .../kotlin/resolve/lazy/lazyResolveTestUtils.kt | 6 +----- .../AdditionalBuiltInsMembersSignatureListsTest.kt | 2 +- .../compiler/MultiModuleJavaAnalysisCustomTest.kt | 12 ++++-------- .../serialization/AbstractLocalClassProtoTest.kt | 2 +- .../builtins/AbstractBuiltInsWithJDKMembersTest.kt | 2 +- .../kotlin/descriptors/PackagePartProvider.kt | 14 ++++++-------- 9 files changed, 21 insertions(+), 35 deletions(-) diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt index 1b3bfdfe9f1..d5a315239ad 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt @@ -23,11 +23,9 @@ import org.jetbrains.kotlin.analyzer.ModuleContent import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion -import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.config.CompilerConfiguration @@ -38,7 +36,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -91,10 +88,7 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { "builtIns source", ProjectContext(environment.project), listOf(builtInModule), { ModuleContent(files, GlobalSearchScope.EMPTY_SCOPE) }, - JvmPlatformParameters { throw IllegalStateException() }, - CompilerEnvironment, - builtIns = DefaultBuiltIns.Instance, - packagePartProviderFactory = { module, content -> JvmPackagePartProvider(environment) } + JvmPlatformParameters { throw IllegalStateException() } ) val moduleDescriptor = resolver.descriptorForModule(builtInModule) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index 7a321620e84..2843dab7ab1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.analyzer import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.context.ModuleContext @@ -31,6 +32,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.createModule @@ -147,10 +149,10 @@ abstract class AnalyzerFacade { modules: Collection, modulesContent: (M) -> ModuleContent, platformParameters: P, - targetEnvironment: TargetEnvironment, - builtIns: KotlinBuiltIns, + targetEnvironment: TargetEnvironment = CompilerEnvironment, + builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance, delegateResolver: ResolverForProject = EmptyResolverForProject(), - packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.EMPTY }, + packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.Empty }, firstDependency: M? = null ): ResolverForProject { val storageManager = projectContext.storageManager diff --git a/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.java b/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.java index e73f693f7bf..8a3cc3228d7 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.java +++ b/compiler/tests-common/org/jetbrains/kotlin/codegen/GenerationUtils.java @@ -53,7 +53,7 @@ public class GenerationUtils { @NotNull public static GenerationState compileFiles(@NotNull List files, @Nullable KotlinCoreEnvironment environment) { PackagePartProvider packagePartProvider = - environment == null ? PackagePartProvider.Companion.getEMPTY() : new JvmPackagePartProvider(environment); + environment == null ? PackagePartProvider.Empty.INSTANCE : new JvmPackagePartProvider(environment); CompilerConfiguration configuration = environment == null ? KotlinTestUtils.newConfiguration() : environment.getConfiguration(); diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt index 9fa88777764..c6d5c09e45e 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/lazyResolveTestUtils.kt @@ -20,12 +20,10 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.ModuleContent import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters @@ -40,9 +38,7 @@ fun createResolveSessionForFiles( "test", projectContext, listOf(testModule), { ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) }, - JvmPlatformParameters { testModule }, - CompilerEnvironment, - DefaultBuiltIns.Instance + JvmPlatformParameters { testModule } ) return resolverForProject.resolverForModule(testModule).componentProvider.get() } diff --git a/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt index 24bc36a0675..fdf1dc1f3ed 100644 --- a/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt +++ b/compiler/tests-java8/tests/org/jetbrains/kotlin/serialization/builtins/AdditionalBuiltInsMembersSignatureListsTest.kt @@ -54,7 +54,7 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment() val container = createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory, - GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY + GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty ) emptyModule.initialize(container.get().packageFragmentProvider) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index ed5674f4586..1aad49eba23 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ResolverForProject import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -36,7 +35,6 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JvmBuiltIns import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.CompilerEnvironment import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade @@ -69,15 +67,13 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { val resolverForProject = JvmAnalyzerFacade.setupResolverForProject( "test", projectContext, modules, - { m -> ModuleContent(m.kotlinFiles, m.javaFilesScope) }, + { module -> ModuleContent(module.kotlinFiles, module.javaFilesScope) }, JvmPlatformParameters { javaClass -> val moduleName = javaClass.name.asString().toLowerCase().first().toString() modules.first { it._name == moduleName } }, - CompilerEnvironment, - builtIns, - packagePartProviderFactory = { a, b -> JvmPackagePartProvider(environment) } + builtIns = builtIns ) builtIns.initialize( @@ -113,7 +109,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { "a" -> listOf(this) "b" -> listOf(this, modules["a"]!!) "c" -> listOf(this, modules["b"]!!, modules["a"]!!) - else -> throw IllegalStateException("$_name") + else -> throw IllegalStateException(_name) } } } @@ -190,7 +186,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() { assert(!ErrorUtils.isError(referencedDescriptor)) { "Error descriptor: $referencedDescriptor" } val descriptorName = referencedDescriptor.name.asString() - val expectedModuleName = "<${descriptorName.toLowerCase().first().toString()}>" + val expectedModuleName = "<${descriptorName.toLowerCase().first()}>" val moduleName = referencedDescriptor.module.name.asString() Assert.assertEquals( "Java class $descriptorName in $context should be in module $expectedModuleName, but instead was in $moduleName", diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractLocalClassProtoTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractLocalClassProtoTest.kt index 01afebb07d3..2ce24f2b7e2 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractLocalClassProtoTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractLocalClassProtoTest.kt @@ -61,7 +61,7 @@ abstract class AbstractLocalClassProtoTest : TestCaseWithTmpdir() { val container = createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - providerFactory, GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY + providerFactory, GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty ) moduleContext.initializeModuleContents(container.get().packageFragmentProvider) diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt index 6de58fb824b..1f7bff9b5eb 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt @@ -62,7 +62,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() val container = createContainerForTopDownSingleModuleAnalyzerForJvm( moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory, - GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY + GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty ) emptyModule.initialize(container.get().packageFragmentProvider) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackagePartProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackagePartProvider.kt index a299fa51a71..7265d8452ac 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackagePartProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackagePartProvider.kt @@ -17,17 +17,15 @@ package org.jetbrains.kotlin.descriptors interface PackagePartProvider { - /** - * return package part simple names + * @return simple names of package parts existing in the package with the given FQ name. + * + * For example, if a file named foo.kt in package org.test is compiled to a library, PackagePartProvider for such library + * must return the list `["FooKt"]` for the query `"org.test"` (in case the file is not annotated with @JvmName or @JvmMultifile*) */ fun findPackageParts(packageFqName: String): List - companion object { - val EMPTY: PackagePartProvider = object : PackagePartProvider { - override fun findPackageParts(packageFqName: String): List { - return emptyList() - } - } + object Empty : PackagePartProvider { + override fun findPackageParts(packageFqName: String): List = emptyList() } }