Android Extensions: do not cache package fragment provider with synthetic properties (KT-10318)
This commit is contained in:
+1
-9
@@ -27,13 +27,10 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
|
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProviderExtension {
|
abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProviderExtension {
|
||||||
protected abstract fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager?
|
protected abstract fun getLayoutXmlFileManager(project: Project, moduleInfo: ModuleInfo?): AndroidLayoutXmlFileManager?
|
||||||
|
|
||||||
private val cache = WeakHashMap<AndroidModuleData, AndroidSyntheticPackageFragmentProvider>()
|
|
||||||
|
|
||||||
override fun getPackageFragmentProvider(
|
override fun getPackageFragmentProvider(
|
||||||
project: Project,
|
project: Project,
|
||||||
module: ModuleDescriptor,
|
module: ModuleDescriptor,
|
||||||
@@ -45,9 +42,6 @@ abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProvider
|
|||||||
|
|
||||||
val moduleData = layoutXmlFileManager.getModuleData()
|
val moduleData = layoutXmlFileManager.getModuleData()
|
||||||
|
|
||||||
val cachedPackageFragmentProvider = cache[moduleData]
|
|
||||||
if (cachedPackageFragmentProvider != null) return cachedPackageFragmentProvider
|
|
||||||
|
|
||||||
val lazyContext = LazySyntheticElementResolveContext(module, storageManager)
|
val lazyContext = LazySyntheticElementResolveContext(module, storageManager)
|
||||||
|
|
||||||
val allPackageDescriptors = arrayListOf<PackageFragmentDescriptor>()
|
val allPackageDescriptors = arrayListOf<PackageFragmentDescriptor>()
|
||||||
@@ -97,9 +91,7 @@ abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProvider
|
|||||||
allPackageDescriptors += packageDescriptor
|
allPackageDescriptors += packageDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
val provider = AndroidSyntheticPackageFragmentProvider(allPackageDescriptors)
|
return AndroidSyntheticPackageFragmentProvider(allPackageDescriptors)
|
||||||
cache[moduleData] = provider
|
|
||||||
return provider
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user