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:
Mikhail Zarechenskiy
2020-10-23 12:06:47 +03:00
parent 0e7e657657
commit bb2e9e2d56
12 changed files with 39 additions and 28 deletions
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.load.kotlin.incremental
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.descriptors.impl.PackageFragmentDescriptorImpl
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
@@ -49,7 +49,7 @@ class IncrementalPackageFragmentProvider(
val incrementalCache: IncrementalCache,
val target: TargetId,
private val kotlinClassFinder: KotlinClassFinder
) : PackageFragmentProvider {
) : PackageFragmentProviderOptimized {
private val fqNameToPackageFragment =
PackagePartClassUtils.getFilesWithCallables(sourceFiles)
.mapTo(hashSetOf()) { it.packageFqName }
@@ -33,7 +33,7 @@ class OptionalAnnotationPackageFragmentProvider(
notFoundClasses: NotFoundClasses,
languageVersionSettings: LanguageVersionSettings,
packagePartProvider: PackagePartProvider,
) : PackageFragmentProvider {
) : PackageFragmentProviderOptimized {
val packages: Map<FqName, PackageFragmentDescriptor> by storageManager.createLazyValue p@{
// We call getAllOptionalAnnotationClasses under lazy value only because IncrementalPackagePartProvider requires
// deserializationConfiguration to be injected.
@@ -8,9 +8,7 @@ package org.jetbrains.kotlin.analyzer
import com.intellij.openapi.util.ModificationTracker
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -238,7 +236,7 @@ private class DelegatingPackageFragmentProvider<M : ModuleInfo>(
private val module: ModuleDescriptor,
moduleContent: ModuleContent<M>,
private val packageOracle: PackageOracle
) : PackageFragmentProvider {
) : PackageFragmentProviderOptimized {
private val syntheticFilePackages = moduleContent.syntheticFiles.map { it.packageFqName }.toSet()
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
@@ -250,7 +248,7 @@ private class DelegatingPackageFragmentProvider<M : ModuleInfo>(
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
if (certainlyDoesNotExist(fqName)) return
resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.collectPackageFragments(fqName, packageFragments)
resolverForProject.resolverForModuleDescriptor(module).packageFragmentProvider.collectPackageFragmentsOptimizedIfPossible(fqName, packageFragments)
}
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> {
@@ -179,7 +179,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
this.declarationProviderFactory = declarationProviderFactory;
this.packageFragmentProvider = new PackageFragmentProvider() {
this.packageFragmentProvider = new PackageFragmentProviderOptimized() {
@Override
public void collectPackageFragments(
@NotNull FqName fqName, @NotNull Collection<PackageFragmentDescriptor> packageFragments
@@ -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))
}
}
@@ -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 }
}
@@ -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)
}
}
@@ -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 ->
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
import org.jetbrains.kotlin.descriptors.PackageFragmentProviderOptimized
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor
import org.jetbrains.kotlin.name.ClassId
@@ -28,7 +29,7 @@ abstract class DeserializerForDecompilerBase(val directoryPackageFqName: FqName)
protected val moduleDescriptor: ModuleDescriptorImpl = createDummyModule("module for building decompiled sources")
protected val packageFragmentProvider: PackageFragmentProvider = object : PackageFragmentProvider {
protected val packageFragmentProvider: PackageFragmentProvider = object : PackageFragmentProviderOptimized {
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) {
packageFragments.add(createDummyPackageFragment(fqName))
}
@@ -7,10 +7,11 @@ package org.jetbrains.kotlin.descriptors.commonizer.builder
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
internal class CommonizedPackageFragmentProvider : PackageFragmentProvider {
internal class CommonizedPackageFragmentProvider : PackageFragmentProviderOptimized {
private val packageFragments = ArrayList<PackageFragmentDescriptor>()
operator fun plusAssign(packageFragment: PackageFragmentDescriptor) {
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.android.synthetic.forEachUntilLast
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.incremental.components.LookupTracker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -132,7 +133,7 @@ abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProvider
class AndroidSyntheticPackageFragmentProvider(
val packages: Map<FqName, () -> PackageFragmentDescriptor>
) : PackageFragmentProvider {
) : PackageFragmentProviderOptimized {
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
packageFragments.addIfNotNull(packages[fqName]?.invoke())