diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/Loaders.kt b/src/main/kotlin/insyncwithfoo/ryecharm/Loaders.kt new file mode 100644 index 00000000..b4d4f335 --- /dev/null +++ b/src/main/kotlin/insyncwithfoo/ryecharm/Loaders.kt @@ -0,0 +1,11 @@ +package insyncwithfoo.ryecharm + +import kotlin.reflect.KClass + + +internal val ClassLoader.id: Int + get() = System.identityHashCode(this) + + +internal val KClass<*>.loaderID: Int + get() = java.classLoader.id diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/RootDisposable.kt b/src/main/kotlin/insyncwithfoo/ryecharm/RootDisposable.kt index a2493536..36f1b016 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/RootDisposable.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/RootDisposable.kt @@ -3,13 +3,22 @@ package insyncwithfoo.ryecharm import com.intellij.openapi.Disposable import com.intellij.openapi.components.Service import com.intellij.openapi.components.service +import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project @Service(Service.Level.APP, Service.Level.PROJECT) -internal class RootDisposable : Disposable { +internal class RootDisposable(private val project: Project? = null) : Disposable { - override fun dispose() {} + init { + thisLogger().info("RootDisposable initialized; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) + } + + override fun dispose() { + thisLogger().info("RootDisposable disposed; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) + } companion object { fun getInstance() = service() diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/Services.kt b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/Services.kt index 904ba0c0..8cb5e7a9 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/configurations/Services.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/configurations/Services.kt @@ -1,7 +1,10 @@ package insyncwithfoo.ryecharm.configurations +import com.intellij.openapi.Disposable import com.intellij.openapi.components.BaseState import com.intellij.openapi.components.SimplePersistentStateComponent +import com.intellij.openapi.diagnostic.thisLogger +import insyncwithfoo.ryecharm.loaderID /** @@ -11,4 +14,18 @@ import com.intellij.openapi.components.SimplePersistentStateComponent * * @see SimplePersistentStateComponent */ -internal open class ConfigurationService(state: S) : SimplePersistentStateComponent(state) +internal open class ConfigurationService(state: S) : + SimplePersistentStateComponent(state), Disposable +{ + + init { + thisLogger().info("${this::class.qualifiedName} initialized; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) + } + + override fun dispose() { + thisLogger().info("${this::class.qualifiedName} disposed; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) + } + +} diff --git a/src/main/kotlin/insyncwithfoo/ryecharm/ruff/RuffCache.kt b/src/main/kotlin/insyncwithfoo/ryecharm/ruff/RuffCache.kt index c47229c5..8b6e551f 100644 --- a/src/main/kotlin/insyncwithfoo/ryecharm/ruff/RuffCache.kt +++ b/src/main/kotlin/insyncwithfoo/ryecharm/ruff/RuffCache.kt @@ -4,10 +4,11 @@ import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.Disposable import com.intellij.openapi.components.Service import com.intellij.openapi.components.service +import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer -import insyncwithfoo.ryecharm.RootDisposable import insyncwithfoo.ryecharm.RyeCharm +import insyncwithfoo.ryecharm.loaderID import insyncwithfoo.ryecharm.parseAsJSON import insyncwithfoo.ryecharm.propertiesComponent import insyncwithfoo.ryecharm.ruff.documentation.RuleName @@ -39,10 +40,11 @@ private operator fun PropertiesComponent.set(property: KProperty<*>, value: Stri @Service(Service.Level.PROJECT) -private class ParseCache : Disposable { +private class ParseCache(private val project: Project) : Disposable { init { - Disposer.register(RootDisposable.getInstance(), this) + thisLogger().info("ParseCache initialized; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) } private val parsed = mutableMapOf>() @@ -63,6 +65,8 @@ private class ParseCache : Disposable { } override fun dispose() { + thisLogger().info("ParseCache disposed; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) clear() } @@ -72,8 +76,13 @@ private class ParseCache : Disposable { @Service(Service.Level.PROJECT) internal class RuffCache(private val project: Project) : Disposable { + init { + thisLogger().info("RuffCache initialized; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) + } + private val parseCache: ParseCache - get() = project.service() + get() = project.service().also { Disposer.register(this, it) } private val storage: PropertiesComponent get() = project.propertiesComponent @@ -108,7 +117,8 @@ internal class RuffCache(private val project: Project) : Disposable { } override fun dispose() { - clear() + thisLogger().info("RuffCache disposed; $project; ${this::class.loaderID}") + thisLogger().info(Throwable().stackTraceToString()) } companion object {