From b2afb602c53109177bab7ebe1dc310fa55d38632 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Thu, 30 Sep 2021 16:28:56 +0200 Subject: [PATCH] Add InvalidModuleNotifier capability Relates to #KT-48977 --- .../kotlin/descriptors/InvalidModuleException.kt | 15 ++++++++++++++- .../descriptors/impl/ModuleDescriptorImpl.kt | 3 ++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/InvalidModuleException.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/InvalidModuleException.kt index 91815186451..276da0ef313 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/InvalidModuleException.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/InvalidModuleException.kt @@ -16,4 +16,17 @@ package org.jetbrains.kotlin.descriptors -class InvalidModuleException(message: String) : IllegalStateException(message) \ No newline at end of file +class InvalidModuleException(message: String) : IllegalStateException(message) + +interface InvalidModuleNotifier { + fun notifyModuleInvalidated(moduleDescriptor: ModuleDescriptor) +} + +fun ModuleDescriptor.moduleInvalidated() { + val capability = getCapability(INVALID_MODULE_NOTIFIER_CAPABILITY) + capability?.notifyModuleInvalidated(this) ?: run { + throw InvalidModuleException("Accessing invalid module descriptor $this") + } +} + +val INVALID_MODULE_NOTIFIER_CAPABILITY = ModuleCapability("InvalidModuleNotifier") \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 6db91484af7..50b3775c4c9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -56,7 +56,7 @@ class ModuleDescriptorImpl @JvmOverloads constructor( override fun assertValid() { if (!isValid) { - throw InvalidModuleException("Accessing invalid module descriptor $this") + moduleInvalidated() } } @@ -90,6 +90,7 @@ class ModuleDescriptorImpl @JvmOverloads constructor( private val packageFragmentProviderForWholeModuleWithDependencies by lazy { val moduleDependencies = dependencies.sure { "Dependencies of module $id were not set before querying module content" } val dependenciesDescriptors = moduleDependencies.allDependencies + assertValid() assert(this in dependenciesDescriptors) { "Module $id is not contained in its own dependencies, this is probably a misconfiguration" } dependenciesDescriptors.forEach { dependency -> assert(dependency.isInitialized) {