mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-139192: be paranoid about third-party code
This commit is contained in:
+34
-4
@@ -16,6 +16,7 @@
|
||||
package com.intellij.openapi.options.ex;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.MasterDetails;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
@@ -31,9 +32,16 @@ import java.awt.BorderLayout;
|
||||
* @author Sergey.Malenkov
|
||||
*/
|
||||
public class ConfigurableCardPanel extends CardLayoutPanel<Configurable, Configurable, JComponent> {
|
||||
private static final Logger LOG = Logger.getInstance(ConfigurableCardPanel.class);
|
||||
|
||||
@Override
|
||||
protected Configurable prepare(Configurable key) {
|
||||
ConfigurableWrapper.cast(Configurable.class, key); // create wrapped configurable on a pooled thread
|
||||
try {
|
||||
ConfigurableWrapper.cast(Configurable.class, key); // create wrapped configurable on a pooled thread
|
||||
}
|
||||
catch (Exception unexpected) {
|
||||
LOG.error("cannot prepare configurable", unexpected);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
@@ -52,9 +60,15 @@ public class ConfigurableCardPanel extends CardLayoutPanel<Configurable, Configu
|
||||
return configurable == null ? null : ApplicationManager.getApplication().runReadAction(new Computable<JComponent>() {
|
||||
@Override
|
||||
public JComponent compute() {
|
||||
JComponent component = configurable.createComponent();
|
||||
JComponent component = null;
|
||||
try {
|
||||
component = configurable.createComponent();
|
||||
}
|
||||
catch (Exception unexpected) {
|
||||
LOG.error("cannot create configurable component", unexpected);
|
||||
}
|
||||
if (component != null) {
|
||||
configurable.reset();
|
||||
reset(configurable);
|
||||
if (ConfigurableWrapper.cast(MasterDetails.class, configurable) == null) {
|
||||
if (ConfigurableWrapper.cast(Configurable.NoMargin.class, configurable) == null) {
|
||||
if (!component.getClass().equals(JPanel.class)) {
|
||||
@@ -81,7 +95,23 @@ public class ConfigurableCardPanel extends CardLayoutPanel<Configurable, Configu
|
||||
@Override
|
||||
protected void dispose(Configurable configurable) {
|
||||
if (configurable != null) {
|
||||
configurable.disposeUIResources();
|
||||
try {
|
||||
configurable.disposeUIResources();
|
||||
}
|
||||
catch (Exception unexpected) {
|
||||
LOG.error("cannot dispose configurable", unexpected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void reset(Configurable configurable) {
|
||||
if (configurable != null) {
|
||||
try {
|
||||
configurable.reset();
|
||||
}
|
||||
catch (Exception unexpected) {
|
||||
LOG.error("cannot reset configurable", unexpected);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ class ConfigurableEditor extends AbstractEditor implements AnActionListener, AWT
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent event) {
|
||||
if (myConfigurable != null) {
|
||||
myConfigurable.reset();
|
||||
ConfigurableCardPanel.reset(myConfigurable);
|
||||
updateCurrent(myConfigurable, true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user