[Workspace Model] Get dispose stack trace only if Disposer.isDebug enabled (RootModel)

GitOrigin-RevId: 8c129c6d91aaaa0d81143927b56aa9868e3e7323
This commit is contained in:
Alex Plate
2020-05-14 13:25:44 +00:00
committed by intellij-monorepo-bot
parent 82c7b69cd3
commit 45f652e67c
@@ -24,6 +24,7 @@ import com.intellij.workspace.legacyBridge.libraries.libraries.LegacyBridgeLibra
import org.jdom.Element
import org.jetbrains.annotations.NotNull
import java.util.*
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
import kotlin.collections.HashMap
@@ -79,11 +80,22 @@ internal class RootModelViaTypedEntityImpl(internal val moduleEntityId: Persiste
}
}
private val disposed = AtomicReference<Throwable>(null)
private var disposedStackTrace: Throwable? = null
private val isDisposed = AtomicBoolean(false)
override fun dispose() {
(filePointerProvider as? LegacyBridgeFilePointerProviderImpl)?.disposeAndClearCaches()
val disposedStackTrace = disposed.getAndSet(Throwable())
if (disposedStackTrace != null) throw IllegalStateException("${javaClass.name} was already disposed", disposedStackTrace)
val alreadyDisposed = isDisposed.getAndSet(true)
if (alreadyDisposed) {
val trace = disposedStackTrace
if (trace != null) {
throw IllegalStateException("${javaClass.name} was already disposed", trace)
}
else throw IllegalStateException("${javaClass.name} was already disposed")
} else if (Disposer.isDebugMode()) {
disposedStackTrace = Throwable()
}
}
override fun getModule(): LegacyBridgeModule = module