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
This commit is contained in:
+1
-7
@@ -23,11 +23,9 @@ import org.jetbrains.kotlin.analyzer.ModuleContent
|
|||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
|
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
|
||||||
import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion
|
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.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
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.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
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.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
|
||||||
import org.jetbrains.kotlin.name.Name
|
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.JvmAnalyzerFacade
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
@@ -91,10 +88,7 @@ class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
|||||||
"builtIns source",
|
"builtIns source",
|
||||||
ProjectContext(environment.project), listOf(builtInModule),
|
ProjectContext(environment.project), listOf(builtInModule),
|
||||||
{ ModuleContent(files, GlobalSearchScope.EMPTY_SCOPE) },
|
{ ModuleContent(files, GlobalSearchScope.EMPTY_SCOPE) },
|
||||||
JvmPlatformParameters { throw IllegalStateException() },
|
JvmPlatformParameters { throw IllegalStateException() }
|
||||||
CompilerEnvironment,
|
|
||||||
builtIns = DefaultBuiltIns.Instance,
|
|
||||||
packagePartProviderFactory = { module, content -> JvmPackagePartProvider(environment) }
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val moduleDescriptor = resolver.descriptorForModule(builtInModule)
|
val moduleDescriptor = resolver.descriptorForModule(builtInModule)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.analyzer
|
package org.jetbrains.kotlin.analyzer
|
||||||
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.container.ComponentProvider
|
import org.jetbrains.kotlin.container.ComponentProvider
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
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.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
import org.jetbrains.kotlin.resolve.TargetEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
import org.jetbrains.kotlin.resolve.createModule
|
import org.jetbrains.kotlin.resolve.createModule
|
||||||
@@ -147,10 +149,10 @@ abstract class AnalyzerFacade<in P : PlatformAnalysisParameters> {
|
|||||||
modules: Collection<M>,
|
modules: Collection<M>,
|
||||||
modulesContent: (M) -> ModuleContent,
|
modulesContent: (M) -> ModuleContent,
|
||||||
platformParameters: P,
|
platformParameters: P,
|
||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment = CompilerEnvironment,
|
||||||
builtIns: KotlinBuiltIns,
|
builtIns: KotlinBuiltIns = DefaultBuiltIns.Instance,
|
||||||
delegateResolver: ResolverForProject<M> = EmptyResolverForProject(),
|
delegateResolver: ResolverForProject<M> = EmptyResolverForProject(),
|
||||||
packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.EMPTY },
|
packagePartProviderFactory: (M, ModuleContent) -> PackagePartProvider = { module, content -> PackagePartProvider.Empty },
|
||||||
firstDependency: M? = null
|
firstDependency: M? = null
|
||||||
): ResolverForProject<M> {
|
): ResolverForProject<M> {
|
||||||
val storageManager = projectContext.storageManager
|
val storageManager = projectContext.storageManager
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class GenerationUtils {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public static GenerationState compileFiles(@NotNull List<KtFile> files, @Nullable KotlinCoreEnvironment environment) {
|
public static GenerationState compileFiles(@NotNull List<KtFile> files, @Nullable KotlinCoreEnvironment environment) {
|
||||||
PackagePartProvider packagePartProvider =
|
PackagePartProvider packagePartProvider =
|
||||||
environment == null ? PackagePartProvider.Companion.getEMPTY() : new JvmPackagePartProvider(environment);
|
environment == null ? PackagePartProvider.Empty.INSTANCE : new JvmPackagePartProvider(environment);
|
||||||
CompilerConfiguration configuration =
|
CompilerConfiguration configuration =
|
||||||
environment == null ? KotlinTestUtils.newConfiguration() : environment.getConfiguration();
|
environment == null ? KotlinTestUtils.newConfiguration() : environment.getConfiguration();
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,10 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleContent
|
import org.jetbrains.kotlin.analyzer.ModuleContent
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.ProjectContext
|
import org.jetbrains.kotlin.context.ProjectContext
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
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.JvmAnalyzerFacade
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||||
|
|
||||||
@@ -40,9 +38,7 @@ fun createResolveSessionForFiles(
|
|||||||
"test",
|
"test",
|
||||||
projectContext, listOf(testModule),
|
projectContext, listOf(testModule),
|
||||||
{ ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) },
|
{ ModuleContent(syntheticFiles, GlobalSearchScope.allScope(project)) },
|
||||||
JvmPlatformParameters { testModule },
|
JvmPlatformParameters { testModule }
|
||||||
CompilerEnvironment,
|
|
||||||
DefaultBuiltIns.Instance
|
|
||||||
)
|
)
|
||||||
return resolverForProject.resolverForModule(testModule).componentProvider.get<ResolveSession>()
|
return resolverForProject.resolverForModule(testModule).componentProvider.get<ResolveSession>()
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
|
|||||||
|
|
||||||
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
||||||
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
|
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
|
||||||
GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY
|
GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty
|
||||||
)
|
)
|
||||||
|
|
||||||
emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
||||||
|
|||||||
+4
-8
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo
|
|||||||
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
import org.jetbrains.kotlin.analyzer.ResolverForProject
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
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.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
import org.jetbrains.kotlin.platform.JvmBuiltIns
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
|
||||||
import org.jetbrains.kotlin.resolve.constants.EnumValue
|
import org.jetbrains.kotlin.resolve.constants.EnumValue
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade
|
import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade
|
||||||
@@ -69,15 +67,13 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() {
|
|||||||
val resolverForProject = JvmAnalyzerFacade.setupResolverForProject(
|
val resolverForProject = JvmAnalyzerFacade.setupResolverForProject(
|
||||||
"test",
|
"test",
|
||||||
projectContext, modules,
|
projectContext, modules,
|
||||||
{ m -> ModuleContent(m.kotlinFiles, m.javaFilesScope) },
|
{ module -> ModuleContent(module.kotlinFiles, module.javaFilesScope) },
|
||||||
JvmPlatformParameters {
|
JvmPlatformParameters {
|
||||||
javaClass ->
|
javaClass ->
|
||||||
val moduleName = javaClass.name.asString().toLowerCase().first().toString()
|
val moduleName = javaClass.name.asString().toLowerCase().first().toString()
|
||||||
modules.first { it._name == moduleName }
|
modules.first { it._name == moduleName }
|
||||||
},
|
},
|
||||||
CompilerEnvironment,
|
builtIns = builtIns
|
||||||
builtIns,
|
|
||||||
packagePartProviderFactory = { a, b -> JvmPackagePartProvider(environment) }
|
|
||||||
)
|
)
|
||||||
|
|
||||||
builtIns.initialize(
|
builtIns.initialize(
|
||||||
@@ -113,7 +109,7 @@ class MultiModuleJavaAnalysisCustomTest : KtUsefulTestCase() {
|
|||||||
"a" -> listOf(this)
|
"a" -> listOf(this)
|
||||||
"b" -> listOf(this, modules["a"]!!)
|
"b" -> listOf(this, modules["a"]!!)
|
||||||
"c" -> listOf(this, modules["b"]!!, 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" }
|
assert(!ErrorUtils.isError(referencedDescriptor)) { "Error descriptor: $referencedDescriptor" }
|
||||||
|
|
||||||
val descriptorName = referencedDescriptor.name.asString()
|
val descriptorName = referencedDescriptor.name.asString()
|
||||||
val expectedModuleName = "<${descriptorName.toLowerCase().first().toString()}>"
|
val expectedModuleName = "<${descriptorName.toLowerCase().first()}>"
|
||||||
val moduleName = referencedDescriptor.module.name.asString()
|
val moduleName = referencedDescriptor.module.name.asString()
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
"Java class $descriptorName in $context should be in module $expectedModuleName, but instead was in $moduleName",
|
"Java class $descriptorName in $context should be in module $expectedModuleName, but instead was in $moduleName",
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ abstract class AbstractLocalClassProtoTest : TestCaseWithTmpdir() {
|
|||||||
|
|
||||||
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
||||||
moduleContext, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
moduleContext, CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
||||||
providerFactory, GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY
|
providerFactory, GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty
|
||||||
)
|
)
|
||||||
moduleContext.initializeModuleContents(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
moduleContext.initializeModuleContents(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment()
|
|||||||
|
|
||||||
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
val container = createContainerForTopDownSingleModuleAnalyzerForJvm(
|
||||||
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
|
moduleContext, CliLightClassGenerationSupport.CliBindingTrace(), providerFactory,
|
||||||
GlobalSearchScope.allScope(environment.project), PackagePartProvider.EMPTY
|
GlobalSearchScope.allScope(environment.project), PackagePartProvider.Empty
|
||||||
)
|
)
|
||||||
|
|
||||||
emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
emptyModule.initialize(container.get<JavaDescriptorResolver>().packageFragmentProvider)
|
||||||
|
|||||||
@@ -17,17 +17,15 @@
|
|||||||
package org.jetbrains.kotlin.descriptors
|
package org.jetbrains.kotlin.descriptors
|
||||||
|
|
||||||
interface PackagePartProvider {
|
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<String>
|
fun findPackageParts(packageFqName: String): List<String>
|
||||||
|
|
||||||
companion object {
|
object Empty : PackagePartProvider {
|
||||||
val EMPTY: PackagePartProvider = object : PackagePartProvider {
|
override fun findPackageParts(packageFqName: String): List<String> = emptyList()
|
||||||
override fun findPackageParts(packageFqName: String): List<String> {
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user