Added deprecated PackageFragmentProvider#getPackageFragments for BWC

Relates to ^KT-33394
^KT-42259 Fixed
This commit is contained in:
Vladimir Dolzhenko
2020-09-29 19:14:44 +00:00
parent a228206cf5
commit 3c380faeb5
21 changed files with 97 additions and 48 deletions
@@ -20,20 +20,27 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
interface PackageFragmentProvider {
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>)
fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
val packageFragments = mutableListOf<PackageFragmentDescriptor>()
collectPackageFragments(fqName, packageFragments)
return packageFragments
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
// default implementation is provided only for BWC
packageFragments.addAll(getPackageFragments(fqName))
}
fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName>
@Deprecated("for usages use #packageFragments(FqName) at final point, for impl use #collectPackageFragments(FqName, MutableCollection<PackageFragmentDescriptor>)")
fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor>
fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName>
object Empty : PackageFragmentProvider {
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {}
override fun getPackageFragments(fqName: FqName) = emptyList<PackageFragmentDescriptor>()
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) = emptySet<FqName>()
}
}
fun PackageFragmentProvider.packageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
val packageFragments = mutableListOf<PackageFragmentDescriptor>()
collectPackageFragments(fqName, packageFragments)
return packageFragments
}
@@ -26,6 +26,9 @@ class PackageFragmentProviderImpl(
this.packageFragments.filterTo(packageFragments) { it.fqName == fqName }
}
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
packageFragments.filter { it.fqName == fqName }
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> =
packageFragments.asSequence()
.map { it.fqName }
@@ -32,6 +32,14 @@ class CompositePackageFragmentProvider(// can be modified from outside
}
}
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
val result = ArrayList<PackageFragmentDescriptor>()
for (provider in providers) {
provider.collectPackageFragments(fqName, result)
}
return result.toList()
}
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
for (provider in providers) {
provider.collectPackageFragments(fqName, packageFragments)
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.packageFragments
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope
import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter
@@ -34,7 +35,7 @@ class LazyPackageViewDescriptorImpl(
) : DeclarationDescriptorImpl(Annotations.EMPTY, fqName.shortNameOrSpecial()), PackageViewDescriptor {
override val fragments: List<PackageFragmentDescriptor> by storageManager.createLazyValue {
module.packageFragmentProvider.getPackageFragments(fqName)
module.packageFragmentProvider.packageFragments(fqName)
}
override val memberScope: MemberScope = LazyScopeAdapter(storageManager) {