From f29ed953d12193d15d9b7f1a66e77f147e7cd45c Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 26 Jan 2012 10:04:13 +0400 Subject: [PATCH] remove listeners from SdkModel on dispose (IDEA-80315) --- .../android/sdk/AndroidSdkConfigurable.java | 47 ++++++++++++------- .../jetbrains/android/sdk/AndroidSdkType.java | 38 ++------------- plugins/devkit/src/projectRoots/IdeaJdk.java | 29 +----------- .../src/projectRoots/IdeaJdkConfigurable.java | 41 ++++++++++++---- 4 files changed, 69 insertions(+), 86 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurable.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurable.java index 677e291a257e..1e7c2e7aca3c 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurable.java +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkConfigurable.java @@ -26,13 +26,41 @@ import javax.swing.*; * @author Eugene.Kudelevsky */ public class AndroidSdkConfigurable implements AdditionalDataConfigurable { - private final AndroidSdkConfigurableForm myForm; private Sdk mySdk; + private final SdkModel.Listener myListener; + private final SdkModel mySdkModel; public AndroidSdkConfigurable(@NotNull SdkModel sdkModel, @NotNull SdkModificator sdkModificator) { + mySdkModel = sdkModel; myForm = new AndroidSdkConfigurableForm(sdkModel, sdkModificator); + myListener = new SdkModel.Listener() { + public void sdkAdded(Sdk sdk) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + myForm.addJavaSdk(sdk); + } + } + + public void beforeSdkRemove(Sdk sdk) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + myForm.removeJavaSdk(sdk); + } + } + + public void sdkChanged(Sdk sdk, String previousName) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + myForm.updateJdks(sdk, previousName); + } + } + + public void sdkHomeSelected(final Sdk sdk, final String newSdkHome) { + if (sdk.getSdkType().equals(AndroidSdkType.getInstance())) { + myForm.internalJdkUpdate(sdk); + } + } + }; + mySdkModel.addListener(myListener); } @Override @@ -83,21 +111,6 @@ public class AndroidSdkConfigurable implements AdditionalDataConfigurable { @Override public void disposeUIResources() { - } - - public void addJavaSdk(Sdk sdk) { - myForm.addJavaSdk(sdk); - } - - public void removeJavaSdk(Sdk sdk) { - myForm.removeJavaSdk(sdk); - } - - public void updateJavaSdkList(Sdk sdk, String previousName) { - myForm.updateJdks(sdk, previousName); - } - - public void internalJdkUpdate(Sdk sdk) { - myForm.internalJdkUpdate(sdk); + mySdkModel.removeListener(myListener); } } diff --git a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java index aff792523c35..d46cc49a53f7 100644 --- a/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java +++ b/plugins/android/src/org/jetbrains/android/sdk/AndroidSdkType.java @@ -97,12 +97,12 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { } if (javaSdks.isEmpty()){ - Messages.showErrorDialog(AndroidBundle.message("no.jdk.for.android.found.error"), "No Java SDK found"); + Messages.showErrorDialog(AndroidBundle.message("no.jdk.for.android.found.error"), "No Java SDK Found"); return false; } int choice = Messages - .showChooseDialog("Please select Java SDK", "Select internal Java platform", ArrayUtil.toStringArray(javaSdks), javaSdks.get(0), + .showChooseDialog("Please select Java SDK", "Select Internal Java Platform", ArrayUtil.toStringArray(javaSdks), javaSdks.get(0), Messages.getQuestionIcon()); if (choice == -1) { @@ -117,7 +117,7 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { if (sdkObject == null) { String errorMessage = log.getErrorMessage().length() > 0 ? log.getErrorMessage() : AndroidBundle.message("cannot.parse.sdk.error"); - Messages.showErrorDialog(errorMessage, "SDK parsing error"); + Messages.showErrorDialog(errorMessage, "SDK Parsing Error"); return false; } @@ -144,7 +144,7 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { } choice = - Messages.showChooseDialog("Select build target", "Create new Android SDK", targetNames, + Messages.showChooseDialog("Select build target", "Create New Android SDK", targetNames, newestPlatform != null ? newestPlatform : targetNames[0], Messages.getQuestionIcon()); if (choice == -1) { @@ -158,35 +158,7 @@ public class AndroidSdkType extends SdkType implements JavaSdkType { @Override public AdditionalDataConfigurable createAdditionalDataConfigurable(SdkModel sdkModel, SdkModificator sdkModificator) { - final AndroidSdkConfigurable c = new AndroidSdkConfigurable(sdkModel, sdkModificator); - - sdkModel.addListener(new SdkModel.Listener() { - public void sdkAdded(Sdk sdk) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - c.addJavaSdk(sdk); - } - } - - public void beforeSdkRemove(Sdk sdk) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - c.removeJavaSdk(sdk); - } - } - - public void sdkChanged(Sdk sdk, String previousName) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - c.updateJavaSdkList(sdk, previousName); - } - } - - public void sdkHomeSelected(final Sdk sdk, final String newSdkHome) { - if (sdk.getSdkType().equals(AndroidSdkType.getInstance())) { - c.internalJdkUpdate(sdk); - } - } - }); - - return c; + return new AndroidSdkConfigurable(sdkModel, sdkModificator); } public void saveAdditionalData(SdkAdditionalData data, Element e) { diff --git a/plugins/devkit/src/projectRoots/IdeaJdk.java b/plugins/devkit/src/projectRoots/IdeaJdk.java index 4523c3600036..f76c4b3af5ec 100644 --- a/plugins/devkit/src/projectRoots/IdeaJdk.java +++ b/plugins/devkit/src/projectRoots/IdeaJdk.java @@ -406,34 +406,7 @@ public class IdeaJdk extends SdkType implements JavaSdkType { } public AdditionalDataConfigurable createAdditionalDataConfigurable(final SdkModel sdkModel, SdkModificator sdkModificator) { - final IdeaJdkConfigurable jdkConfigurable = new IdeaJdkConfigurable(sdkModel, sdkModificator); - sdkModel.addListener(new SdkModel.Listener() { - public void sdkAdded(Sdk sdk) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - jdkConfigurable.addJavaSdk(sdk); - } - } - - public void beforeSdkRemove(Sdk sdk) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - jdkConfigurable.removeJavaSdk(sdk); - } - } - - public void sdkChanged(Sdk sdk, String previousName) { - if (sdk.getSdkType().equals(JavaSdk.getInstance())) { - jdkConfigurable.updateJavaSdkList(sdk, previousName); - } - } - - public void sdkHomeSelected(final Sdk sdk, final String newSdkHome) { - if (sdk.getSdkType() instanceof IdeaJdk) { - jdkConfigurable.internalJdkUpdate(sdk); - } - } - }); - - return jdkConfigurable; + return new IdeaJdkConfigurable(sdkModel, sdkModificator); } @Nullable diff --git a/plugins/devkit/src/projectRoots/IdeaJdkConfigurable.java b/plugins/devkit/src/projectRoots/IdeaJdkConfigurable.java index 5bdd51e396e0..131689a805ca 100644 --- a/plugins/devkit/src/projectRoots/IdeaJdkConfigurable.java +++ b/plugins/devkit/src/projectRoots/IdeaJdkConfigurable.java @@ -21,10 +21,7 @@ import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.projectRoots.AdditionalDataConfigurable; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkModel; -import com.intellij.openapi.projectRoots.SdkModificator; +import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; @@ -64,10 +61,37 @@ public class IdeaJdkConfigurable implements AdditionalDataConfigurable { private final SdkModel mySdkModel; private final SdkModificator mySdkModificator; private boolean myFreeze = false; + private final SdkModel.Listener myListener; public IdeaJdkConfigurable(final SdkModel sdkModel, final SdkModificator sdkModificator) { mySdkModel = sdkModel; mySdkModificator = sdkModificator; + myListener = new SdkModel.Listener() { + public void sdkAdded(Sdk sdk) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + addJavaSdk(sdk); + } + } + + public void beforeSdkRemove(Sdk sdk) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + removeJavaSdk(sdk); + } + } + + public void sdkChanged(Sdk sdk, String previousName) { + if (sdk.getSdkType().equals(JavaSdk.getInstance())) { + updateJavaSdkList(sdk, previousName); + } + } + + public void sdkHomeSelected(final Sdk sdk, final String newSdkHome) { + if (sdk.getSdkType() instanceof IdeaJdk) { + internalJdkUpdate(sdk); + } + } + }; + mySdkModel.addListener(myListener); } private void updateJdkList() { @@ -157,7 +181,7 @@ public class IdeaJdkConfigurable implements AdditionalDataConfigurable { return wholePanel; } - public void internalJdkUpdate(final Sdk sdk) { + private void internalJdkUpdate(final Sdk sdk) { final Sdk javaSdk = ((Sandbox)sdk.getSdkAdditionalData()).getJavaSdk(); if (myJdksModel.getIndexOf(javaSdk) == -1) { myJdksModel.addElement(javaSdk); @@ -216,17 +240,18 @@ public class IdeaJdkConfigurable implements AdditionalDataConfigurable { } public void disposeUIResources() { + mySdkModel.removeListener(myListener); } - public void addJavaSdk(final Sdk sdk) { + private void addJavaSdk(final Sdk sdk) { myJdksModel.addElement(sdk); } - public void removeJavaSdk(final Sdk sdk) { + private void removeJavaSdk(final Sdk sdk) { myJdksModel.removeElement(sdk); } - public void updateJavaSdkList(Sdk sdk, String previousName) { + private void updateJavaSdkList(Sdk sdk, String previousName) { final Sdk[] sdks = mySdkModel.getSdks(); for (Sdk currentSdk : sdks) { if (currentSdk.getSdkType() instanceof IdeaJdk){