Extract new method from the publicly used interface for compatibility
Note that we can't just use ``@JvmDefault` annotation as the main change is in the `core` module which targets Java 6 #KT-42259 Fixed
This commit is contained in:
+2
-2
@@ -17,7 +17,7 @@
|
||||
package org.jetbrains.kotlin.load.java.lazy
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderOptimized
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
class LazyJavaPackageFragmentProvider(
|
||||
components: JavaResolverComponents
|
||||
) : PackageFragmentProvider {
|
||||
) : PackageFragmentProviderOptimized {
|
||||
|
||||
private val c = LazyJavaResolverContext(components, TypeParameterResolver.EMPTY, lazyOf(null))
|
||||
|
||||
|
||||
@@ -20,27 +20,35 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface PackageFragmentProvider {
|
||||
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
|
||||
// default implementation is provided only for BWC
|
||||
packageFragments.addAll(getPackageFragments(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>()
|
||||
}
|
||||
}
|
||||
|
||||
interface PackageFragmentProviderOptimized : PackageFragmentProvider {
|
||||
fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>)
|
||||
}
|
||||
|
||||
fun PackageFragmentProvider.packageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
|
||||
val packageFragments = mutableListOf<PackageFragmentDescriptor>()
|
||||
collectPackageFragments(fqName, packageFragments)
|
||||
collectPackageFragmentsOptimizedIfPossible(fqName, packageFragments)
|
||||
return packageFragments
|
||||
}
|
||||
|
||||
fun PackageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(
|
||||
fqName: FqName,
|
||||
packageFragments: MutableCollection<PackageFragmentDescriptor>
|
||||
) {
|
||||
when (this) {
|
||||
is PackageFragmentProviderOptimized -> collectPackageFragments(fqName, packageFragments)
|
||||
else -> packageFragments.addAll(getPackageFragments(fqName))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class PackageFragmentProviderImpl(
|
||||
private val packageFragments: Collection<PackageFragmentDescriptor>
|
||||
) : PackageFragmentProvider {
|
||||
) : PackageFragmentProviderOptimized {
|
||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
|
||||
this.packageFragments.filterTo(packageFragments) { it.fqName == fqName }
|
||||
}
|
||||
|
||||
+5
-3
@@ -18,13 +18,15 @@ package org.jetbrains.kotlin.descriptors.impl
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderOptimized
|
||||
import org.jetbrains.kotlin.descriptors.collectPackageFragmentsOptimizedIfPossible
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import java.util.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class CompositePackageFragmentProvider(// can be modified from outside
|
||||
private val providers: List<PackageFragmentProvider>
|
||||
) : PackageFragmentProvider {
|
||||
) : PackageFragmentProviderOptimized {
|
||||
|
||||
init {
|
||||
assert(providers.size == providers.toSet().size) {
|
||||
@@ -35,14 +37,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)
|
||||
provider.collectPackageFragmentsOptimizedIfPossible(fqName, result)
|
||||
}
|
||||
return result.toList()
|
||||
}
|
||||
|
||||
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
|
||||
for (provider in providers) {
|
||||
provider.collectPackageFragments(fqName, packageFragments)
|
||||
provider.collectPackageFragmentsOptimizedIfPossible(fqName, packageFragments)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.serialization.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderOptimized
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
@@ -28,7 +28,7 @@ abstract class AbstractDeserializedPackageFragmentProvider(
|
||||
protected val storageManager: StorageManager,
|
||||
protected val finder: KotlinMetadataFinder,
|
||||
protected val moduleDescriptor: ModuleDescriptor
|
||||
) : PackageFragmentProvider {
|
||||
) : PackageFragmentProviderOptimized {
|
||||
protected lateinit var components: DeserializationComponents
|
||||
|
||||
private val fragments = storageManager.createMemoizedFunctionWithNullableValues<FqName, PackageFragmentDescriptor> { fqName ->
|
||||
|
||||
Reference in New Issue
Block a user