From c5238172135e4232c9c1f19b373e375a6d6ef04d Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 4 Dec 2015 17:19:03 +0300 Subject: [PATCH] Do not cache AndroidModule in IDEAndroidLayoutXmlManager --- .../res/IDEAndroidLayoutXmlFileManager.kt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt index 9a8534f27c2..3b9ea5d8e96 100644 --- a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt +++ b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt @@ -33,16 +33,26 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe public class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileManager(module.project) { - override val androidModule: AndroidModule? by lazy { module.androidFacet?.toAndroidModuleInfo() } + override val androidModule: AndroidModule? + get() = module.androidFacet?.toAndroidModuleInfo() - private val moduleData: CachedValue by lazy { - cachedValue(project) { - CachedValueProvider.Result.create(super.getModuleData(), getPsiTreeChangePreprocessor()) + @Volatile + private var _moduleData: CachedValue? = null + + override fun getModuleData(): AndroidModuleData { + if (androidModule == null) { + _moduleData = null } + else { + if (_moduleData == null) { + _moduleData = cachedValue(project) { + CachedValueProvider.Result.create(super.getModuleData(), getPsiTreeChangePreprocessor()) + } + } + } + return _moduleData?.value ?: AndroidModuleData.EMPTY } - override fun getModuleData() = moduleData.value - private fun getPsiTreeChangePreprocessor(): PsiTreeChangePreprocessor { return project.getExtensions(PsiTreeChangePreprocessor.EP_NAME).first { it is AndroidPsiTreeChangePreprocessor } }