mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove listeners from SdkModel on dispose (IDEA-80315)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user