mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
a bit of defensive assertions to protect from user invalid input like in IDEA-164286 IDE doesn't start after updating 2016.3
This commit is contained in:
@@ -23,16 +23,14 @@ import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.ex.ConfigurableWrapper;
|
||||
import com.intellij.ui.components.JBRadioButton;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* To provide additional options in General section register implementation of {@link com.intellij.openapi.options.SearchableConfigurable} in the plugin.xml:
|
||||
* To provide additional options in General section register implementation of {@link SearchableConfigurable} in the plugin.xml:
|
||||
* <p/>
|
||||
* <extensions defaultExtensionNs="com.intellij"><br>
|
||||
* <generalOptionsProvider instance="class-name"/><br>
|
||||
@@ -49,6 +47,7 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
myComponent = new MyComponent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() throws ConfigurationException {
|
||||
super.apply();
|
||||
GeneralSettings settings = GeneralSettings.getInstance();
|
||||
@@ -63,9 +62,9 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
|
||||
settings.setAutoSaveIfInactive(myComponent.myChkAutoSaveIfInactive.isSelected());
|
||||
try {
|
||||
int newInactiveTimeout = Integer.parseInt(myComponent.myTfInactiveTimeout.getText());
|
||||
if (newInactiveTimeout > 0) {
|
||||
settings.setInactiveTimeout(newInactiveTimeout);
|
||||
int newInactiveTimeoutSeconds = Integer.parseInt(myComponent.myTfInactiveTimeout.getText());
|
||||
if (newInactiveTimeoutSeconds > 0 && TimeUnit.SECONDS.toHours(newInactiveTimeoutSeconds) < 24) {
|
||||
settings.setInactiveTimeout(newInactiveTimeoutSeconds);
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException ignored) { }
|
||||
@@ -97,11 +96,11 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
if (super.isModified()) return true;
|
||||
boolean isModified = false;
|
||||
GeneralSettings settings = GeneralSettings.getInstance();
|
||||
isModified |= settings.isReopenLastProject() != myComponent.myChkReopenLastProject.isSelected();
|
||||
boolean isModified = settings.isReopenLastProject() != myComponent.myChkReopenLastProject.isSelected();
|
||||
isModified |= settings.isSupportScreenReaders() != myComponent.myChkSupportScreenReaders.isSelected();
|
||||
isModified |= settings.isSyncOnFrameActivation() != myComponent.myChkSyncOnFrameActivation.isSelected();
|
||||
isModified |= settings.isSaveOnFrameDeactivation() != myComponent.myChkSaveOnFrameDeactivation.isSelected();
|
||||
@@ -122,16 +121,14 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
return isModified;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent createComponent() {
|
||||
if (myComponent == null) {
|
||||
myComponent = new MyComponent();
|
||||
}
|
||||
|
||||
myComponent.myChkAutoSaveIfInactive.addChangeListener(new ChangeListener() {
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
myComponent.myTfInactiveTimeout.setEditable(myComponent.myChkAutoSaveIfInactive.isSelected());
|
||||
}
|
||||
});
|
||||
myComponent.myChkAutoSaveIfInactive.addChangeListener(
|
||||
e -> myComponent.myTfInactiveTimeout.setEditable(myComponent.myChkAutoSaveIfInactive.isSelected()));
|
||||
|
||||
List<SearchableConfigurable> list = getConfigurables();
|
||||
if (!list.isEmpty()) {
|
||||
@@ -144,10 +141,12 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
return myComponent.myPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return IdeBundle.message("title.general");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
super.reset();
|
||||
GeneralSettings settings = GeneralSettings.getInstance();
|
||||
@@ -184,11 +183,13 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
super.disposeUIResources();
|
||||
myComponent = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getHelpTopic() {
|
||||
return "preferences.general";
|
||||
@@ -215,11 +216,13 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
public MyComponent() { }
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getId() {
|
||||
return getHelpTopic();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<SearchableConfigurable> createConfigurables() {
|
||||
return ConfigurableWrapper.createConfigurables(EP_NAME);
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
@@ -235,14 +236,15 @@ public class IdeEventQueue extends EventQueue {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void addIdleListener(@NotNull final Runnable runnable, final int timeout) {
|
||||
LOG.assertTrue(timeout > 0);
|
||||
public void addIdleListener(@NotNull final Runnable runnable, final int timeoutMillis) {
|
||||
if(timeoutMillis <= 0 || TimeUnit.MILLISECONDS.toHours(timeoutMillis) >= 24) {
|
||||
throw new IllegalArgumentException("This timeout value is unsupported: " + timeoutMillis);
|
||||
}
|
||||
synchronized (myLock) {
|
||||
myIdleListeners.add(runnable);
|
||||
final MyFireIdleRequest request = new MyFireIdleRequest(runnable, timeout);
|
||||
final MyFireIdleRequest request = new MyFireIdleRequest(runnable, timeoutMillis);
|
||||
myListener2Request.put(runnable, request);
|
||||
UIUtil.invokeLaterIfNeeded(() -> myIdleRequestsAlarm.addRequest(request, timeout));
|
||||
UIUtil.invokeLaterIfNeeded(() -> myIdleRequestsAlarm.addRequest(request, timeoutMillis));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user