fix: module builder not disposing properly

This commit is contained in:
FalsePattern 2024-11-11 12:14:10 +01:00
parent d3de75f950
commit 17dca6d419
Signed by: falsepattern
GPG key ID: E930CDEC50C50E23
2 changed files with 6 additions and 5 deletions

View file

@ -48,7 +48,7 @@ class ZigModuleBuilder: ModuleBuilder() {
} }
override fun getCustomOptionsStep(context: WizardContext?, parentDisposable: Disposable?): ModuleWizardStep? { override fun getCustomOptionsStep(context: WizardContext?, parentDisposable: Disposable?): ModuleWizardStep? {
val step = ZigModuleWizardStep() val step = ZigModuleWizardStep(parentDisposable)
parentDisposable?.let { Disposer.register(it, step.peer) } parentDisposable?.let { Disposer.register(it, step.peer) }
return step return step
} }
@ -63,8 +63,8 @@ class ZigModuleBuilder: ModuleBuilder() {
} }
} }
inner class ZigModuleWizardStep: ModuleWizardStep() { inner class ZigModuleWizardStep(parent: Disposable?): ModuleWizardStep() {
internal val peer = ZigProjectGeneratorPeer(true) internal val peer = ZigProjectGeneratorPeer(true).also { Disposer.register(parent ?: return@also, it) }
override fun getComponent(): JComponent { override fun getComponent(): JComponent {
return peer.myComponent.withBorder() return peer.myComponent.withBorder()
@ -77,7 +77,6 @@ class ZigModuleBuilder: ModuleBuilder() {
override fun updateDataModel() { override fun updateDataModel() {
this@ZigModuleBuilder.configurationData = peer.settings this@ZigModuleBuilder.configurationData = peer.settings
} }
} }
} }

View file

@ -32,7 +32,9 @@ import com.intellij.ui.dsl.builder.panel
import javax.swing.JComponent import javax.swing.JComponent
class ZigProjectGeneratorPeer(var handleGit: Boolean): ProjectGeneratorPeer<ZigProjectConfigurationData>, Disposable { class ZigProjectGeneratorPeer(var handleGit: Boolean): ProjectGeneratorPeer<ZigProjectConfigurationData>, Disposable {
private val newProjectPanel: ZigNewProjectPanel = ZigNewProjectPanel(handleGit).also { Disposer.register(this, it) } private val newProjectPanel by lazy {
ZigNewProjectPanel(handleGit).also { Disposer.register(this, it) }
}
val myComponent: JComponent by lazy { val myComponent: JComponent by lazy {
panel { panel {
newProjectPanel.attach(this) newProjectPanel.attach(this)