From 7362957649116a5514a06fb7f59c2edf70a3f31a Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 25 Aug 2011 17:06:23 +0400 Subject: [PATCH] lazy framework support loading in wizard --- .../FrameworkSupportNode.java | 17 +++++++----- .../plugins/groovy/mvc/MvcModuleBuilder.java | 26 ++++++++++++------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java index a708c4414dc5..169969d0fb85 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java @@ -36,24 +36,24 @@ import java.util.List; public class FrameworkSupportNode extends CheckedTreeNode { private final FrameworkSupportProvider myProvider; private final FrameworkSupportNode myParentNode; - private final FrameworkSupportConfigurable myConfigurable; + private FrameworkSupportConfigurable myConfigurable; private final List myChildren = new ArrayList(); + private final FrameworkSupportModelBase myModel; + private final Disposable myParentDisposable; public FrameworkSupportNode(final FrameworkSupportProvider provider, final FrameworkSupportNode parentNode, final FrameworkSupportModelBase model, Disposable parentDisposable) { super(provider); + myParentDisposable = parentDisposable; setChecked(false); myProvider = provider; myParentNode = parentNode; model.registerComponent(provider, this); - myConfigurable = provider.createConfigurable(model); - Disposer.register(parentDisposable, myConfigurable); + myModel = model; if (parentNode != null) { parentNode.add(this); parentNode.myChildren.add(this); } - - setConfigurableComponentEnabled(false); } public List getChildren() { @@ -75,7 +75,12 @@ public class FrameworkSupportNode extends CheckedTreeNode { return myParentNode; } - public FrameworkSupportConfigurable getConfigurable() { + public synchronized FrameworkSupportConfigurable getConfigurable() { + if (myConfigurable == null) { + myConfigurable = myProvider.createConfigurable(myModel); + setConfigurableComponentEnabled(false); + Disposer.register(myParentDisposable, myConfigurable); + } return myConfigurable; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleBuilder.java index 86c727f2eaef..ea48989c7f78 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/mvc/MvcModuleBuilder.java @@ -44,18 +44,14 @@ public class MvcModuleBuilder extends GroovyAwareModuleBuilder { } private class GroovySdkWizardStep extends ModuleWizardStep { - private final LibraryOptionsPanel myPanel; + private LibraryOptionsPanel myPanel; private final LibrariesContainer myLibrariesContainer; private boolean myDownloaded; private LibraryCompositionSettings myLibraryCompositionSettings; public GroovySdkWizardStep(WizardContext wizardContext) { final Project project = wizardContext.getProject(); - final GroovyLibraryDescription libraryDescription = myFramework.createLibraryDescription(); - final String contentEntryPath = getContentEntryPath(); - final String basePath = contentEntryPath != null ? FileUtil.toSystemIndependentName(contentEntryPath) : ""; myLibrariesContainer = LibrariesContainerFactory.createContainer(project); - myPanel = new LibraryOptionsPanel(libraryDescription, basePath, null, myLibrariesContainer, false); addModuleConfigurationUpdater(new ModuleConfigurationUpdater() { @Override public void update(@NotNull Module module, @NotNull ModifiableRootModel rootModel) { @@ -69,12 +65,14 @@ public class MvcModuleBuilder extends GroovyAwareModuleBuilder { @Override public void disposeUIResources() { - Disposer.dispose(myPanel); + if (myPanel != null) { + Disposer.dispose(myPanel); + } } @Override public JComponent getComponent() { - final JComponent component = myPanel.getMainPanel(); + final JComponent component = getPanel().getMainPanel(); final JPanel panel = new JPanel(new BorderLayout()); panel.add(component, BorderLayout.NORTH); @@ -96,7 +94,7 @@ public class MvcModuleBuilder extends GroovyAwareModuleBuilder { @Override public void _commit(boolean finishChosen) throws CommitStepException { if (finishChosen && !myDownloaded && myLibraryCompositionSettings != null) { - if (myLibraryCompositionSettings.downloadFiles(myPanel.getMainPanel())) { + if (myLibraryCompositionSettings.downloadFiles(getPanel().getMainPanel())) { myDownloaded = true; } } @@ -104,7 +102,17 @@ public class MvcModuleBuilder extends GroovyAwareModuleBuilder { @Override public void updateDataModel() { - myLibraryCompositionSettings = myPanel.apply(); + myLibraryCompositionSettings = getPanel().apply(); + } + + private synchronized LibraryOptionsPanel getPanel() { + if (myPanel == null) { + final GroovyLibraryDescription libraryDescription = myFramework.createLibraryDescription(); + final String contentEntryPath = getContentEntryPath(); + final String basePath = contentEntryPath != null ? FileUtil.toSystemIndependentName(contentEntryPath) : ""; + myPanel = new LibraryOptionsPanel(libraryDescription, basePath, null, myLibrariesContainer, false); + } + return myPanel; } } }