mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Refactoring: Get rid of some duplicating 'isModified()' methods, now it's part of Configurable interface
Improvements: Start using UINumericRange to validate int values we parse from text fields (settings etc.)
This commit is contained in:
-8
@@ -218,14 +218,6 @@ public class CodeStyleGenerationConfigurable implements Configurable {
|
||||
return isModified(mySettings);
|
||||
}
|
||||
|
||||
private static boolean isModified(JCheckBox checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, String value) {
|
||||
return !textField.getText().trim().equals(value);
|
||||
}
|
||||
|
||||
private void createUIComponents() {
|
||||
myCommenterForm = new CommenterForm(JavaLanguage.INSTANCE);
|
||||
myCommenterPanel = myCommenterForm.getCommenterPanel();
|
||||
|
||||
+1
-15
@@ -201,7 +201,7 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
|
||||
if (super.isModified()) return true;
|
||||
EditorSettingsExternalizable editorSettings = EditorSettingsExternalizable.getInstance();
|
||||
boolean isModified = isModified(myCbBlinkCaret, editorSettings.isBlinkCaret());
|
||||
isModified |= isModified(myBlinkIntervalField, editorSettings.getBlinkPeriod());
|
||||
isModified |= isModified(myBlinkIntervalField, editorSettings.getBlinkPeriod(), EditorSettingsExternalizable.BLINKING_RANGE);
|
||||
|
||||
isModified |= isModified(myCbBlockCursor, editorSettings.isBlockCursor());
|
||||
|
||||
@@ -223,20 +223,6 @@ public class EditorAppearanceConfigurable extends CompositeConfigurable<UnnamedC
|
||||
return isModified;
|
||||
}
|
||||
|
||||
private static boolean isModified(JToggleButton checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
try {
|
||||
int fieldValue = Integer.parseInt(textField.getText().trim());
|
||||
return fieldValue != value;
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nls
|
||||
public String getDisplayName() {
|
||||
|
||||
@@ -47,7 +47,7 @@ public class EditorOptions implements SearchableConfigurable {
|
||||
@Override
|
||||
public JComponent createComponent() {
|
||||
myEditorOptionsPanel = new EditorOptionsPanel();
|
||||
return myEditorOptionsPanel.getComponent();
|
||||
return myEditorOptionsPanel.createComponent();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+11
-64
@@ -22,6 +22,7 @@ import com.intellij.codeInsight.CodeInsightSettings;
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
|
||||
import com.intellij.codeInsight.daemon.impl.IdentifierHighlighterPass;
|
||||
import com.intellij.codeInsight.documentation.QuickDocOnMouseOverManager;
|
||||
import com.intellij.ide.ui.UINumericRange;
|
||||
import com.intellij.ide.ui.UISettings;
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -51,14 +52,13 @@ import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.ui.components.JBCheckBox;
|
||||
import com.intellij.ui.components.JBLabel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
public class EditorOptionsPanel {
|
||||
public class EditorOptionsPanel implements SearchableConfigurable {
|
||||
private JPanel myBehaviourPanel;
|
||||
private JCheckBox myCbHighlightBraces;
|
||||
private static final String STRIP_CHANGED = ApplicationBundle.message("combobox.strip.modified.lines");
|
||||
@@ -105,9 +105,9 @@ public class EditorOptionsPanel {
|
||||
private JCheckBox myShowWhitespacesModificationsInLSTGutterCheckBox;
|
||||
|
||||
private static final String ACTIVE_COLOR_SCHEME = ApplicationBundle.message("combobox.richcopy.color.scheme.active");
|
||||
private static final UINumericRange RECENT_FILES_RANGE = new UINumericRange(50, 1, 500);
|
||||
|
||||
private final ErrorHighlightingPanel myErrorHighlightingPanel = new ErrorHighlightingPanel();
|
||||
private final MyConfigurable myConfigurable;
|
||||
|
||||
|
||||
public EditorOptionsPanel() {
|
||||
@@ -141,7 +141,6 @@ public class EditorOptionsPanel {
|
||||
}
|
||||
});
|
||||
|
||||
myConfigurable = new MyConfigurable();
|
||||
initQuickDocProcessing();
|
||||
initSoftWrapsSettingsProcessing();
|
||||
initVcsSettingsProcessing();
|
||||
@@ -300,8 +299,8 @@ public class EditorOptionsPanel {
|
||||
ServiceManager.getService(QuickDocOnMouseOverManager.class).setEnabled(enabled);
|
||||
}
|
||||
|
||||
Long quickDocDelay = getQuickDocDelayFromGui();
|
||||
if (quickDocDelay != null) {
|
||||
int quickDocDelay = getQuickDocDelayFromGui();
|
||||
if (quickDocDelay != -1) {
|
||||
editorSettings.setQuickDocOnMouseOverElementDelayMillis(quickDocDelay);
|
||||
}
|
||||
|
||||
@@ -359,20 +358,12 @@ public class EditorOptionsPanel {
|
||||
restartDaemons();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Long getQuickDocDelayFromGui() {
|
||||
String quickDocDelayAsText = myQuickDocDelayTextField.getText();
|
||||
if (StringUtil.isEmptyOrSpaces(quickDocDelayAsText)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
private int getQuickDocDelayFromGui() {
|
||||
try {
|
||||
long delay = Long.parseLong(quickDocDelayAsText);
|
||||
return delay > 0 ? delay : null;
|
||||
return EditorSettingsExternalizable.QUICK_DOC_DELAY_RANGE.fit(Integer.parseInt(myQuickDocDelayTextField.getText().trim()));
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
// Ignore incorrect value.
|
||||
return null;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,20 +442,17 @@ public class EditorOptionsPanel {
|
||||
isModified |= isModified(myCbEnsureBlankLineBeforeCheckBox, editorSettings.isEnsureNewLineAtEOF());
|
||||
|
||||
isModified |= isModified(myCbShowQuickDocOnMouseMove, editorSettings.isShowQuickDocOnMouseOverElement());
|
||||
Long quickDocDelay = getQuickDocDelayFromGui();
|
||||
if (quickDocDelay != null && !quickDocDelay.equals(Long.valueOf(editorSettings.getQuickDocOnMouseOverElementDelayMillis()))) {
|
||||
return true;
|
||||
}
|
||||
isModified |= isModified(myQuickDocDelayTextField, editorSettings.getQuickDocOnMouseOverElementDelayMillis(), EditorSettingsExternalizable.QUICK_DOC_DELAY_RANGE);
|
||||
|
||||
// advanced mouse
|
||||
isModified |= isModified(myCbEnableDnD, editorSettings.isDndEnabled());
|
||||
isModified |= isModified(myCbEnableWheelFontChange, editorSettings.isWheelFontChangeEnabled());
|
||||
isModified |= isModified(myCbHonorCamelHumpsWhenSelectingByClicking, editorSettings.isMouseClickSelectionHonorsCamelWords());
|
||||
|
||||
isModified |= myRbPreferMovingCaret.isSelected() != editorSettings.isRefrainFromScrolling();
|
||||
isModified |= isModified(myRbPreferMovingCaret, editorSettings.isRefrainFromScrolling());
|
||||
|
||||
|
||||
isModified |= isModified(myRecentFilesLimitField, UISettings.getInstance().RECENT_FILES_LIMIT);
|
||||
isModified |= isModified(myRecentFilesLimitField, UISettings.getInstance().RECENT_FILES_LIMIT, RECENT_FILES_RANGE);
|
||||
isModified |= isModified(myCbRenameLocalVariablesInplace, editorSettings.isVariableInplaceRenameEnabled());
|
||||
isModified |= isModified(myPreselectCheckBox, editorSettings.isPreselectRename());
|
||||
isModified |= isModified(myShowInlineDialogForCheckBox, editorSettings.isShowInlineLocalDialog());
|
||||
@@ -484,20 +472,6 @@ public class EditorOptionsPanel {
|
||||
return isModified;
|
||||
}
|
||||
|
||||
private static boolean isModified(JToggleButton checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
try {
|
||||
int fieldValue = Integer.parseInt(textField.getText().trim());
|
||||
return fieldValue != value;
|
||||
}
|
||||
catch(NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@EditorSettingsExternalizable.StripTrailingSpaces
|
||||
private String getStripTrailingSpacesValue() {
|
||||
@@ -564,11 +538,6 @@ public class EditorOptionsPanel {
|
||||
});
|
||||
}
|
||||
|
||||
public JComponent getComponent() {
|
||||
return myBehaviourPanel;
|
||||
}
|
||||
|
||||
public class MyConfigurable implements SearchableConfigurable {
|
||||
@Override
|
||||
@NotNull
|
||||
public String getId() {
|
||||
@@ -589,26 +558,4 @@ public class EditorOptionsPanel {
|
||||
public JComponent createComponent() {
|
||||
return myBehaviourPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return EditorOptionsPanel.this.isModified();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() throws ConfigurationException {
|
||||
EditorOptionsPanel.this.apply();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
EditorOptionsPanel.this.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
EditorOptionsPanel.this.disposeUIResources();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-4
@@ -251,10 +251,6 @@ public class EditorSmartKeysConfigurable extends CompositeConfigurable<UnnamedCo
|
||||
|
||||
}
|
||||
|
||||
private static boolean isModified(JToggleButton checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
@MagicConstant(intValues = {CodeInsightSettings.NO_REFORMAT, CodeInsightSettings.INDENT_BLOCK, CodeInsightSettings.INDENT_EACH_LINE, CodeInsightSettings.REFORMAT_BLOCK})
|
||||
private int getReformatPastedBlockValue(){
|
||||
Object selectedItem = myReformatOnPasteCombo.getSelectedItem();
|
||||
|
||||
+7
-15
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.intellij.application.options.editor;
|
||||
|
||||
import com.intellij.ide.ui.UINumericRange;
|
||||
import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.ide.ui.UISettings;
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
@@ -33,6 +34,7 @@ import java.awt.event.ItemListener;
|
||||
* @author yole
|
||||
*/
|
||||
public class EditorTabsConfigurable implements EditorOptionsProvider {
|
||||
private static final UINumericRange EDITOR_TABS_RANGE = new UINumericRange(10, 1, 100);
|
||||
private JPanel myRootPanel;
|
||||
private JCheckBox myHideKnownExtensions;
|
||||
private JCheckBox myScrollTabLayoutInEditorCheckBox;
|
||||
@@ -182,17 +184,11 @@ public class EditorTabsConfigurable implements EditorOptionsProvider {
|
||||
if (isModified(myReuseNotModifiedTabsCheckBox, uiSettings.REUSE_NOT_MODIFIED_TABS)) uiSettingsChanged = true;
|
||||
uiSettings.REUSE_NOT_MODIFIED_TABS = myReuseNotModifiedTabsCheckBox.isSelected();
|
||||
|
||||
String temp = myEditorTabLimitField.getText();
|
||||
if (temp.trim().length() > 0) {
|
||||
try {
|
||||
int newEditorTabLimit = Integer.parseInt(temp);
|
||||
if (newEditorTabLimit > 0 && newEditorTabLimit != uiSettings.EDITOR_TAB_LIMIT) {
|
||||
uiSettings.EDITOR_TAB_LIMIT = newEditorTabLimit;
|
||||
uiSettingsChanged = true;
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException ignored) {
|
||||
}
|
||||
if (isModified(myEditorTabLimitField, uiSettings.EDITOR_TAB_LIMIT, EDITOR_TABS_RANGE)) uiSettingsChanged = true;
|
||||
try {
|
||||
uiSettings.EDITOR_TAB_LIMIT = EDITOR_TABS_RANGE.fit(Integer.parseInt(myEditorTabLimitField.getText().trim()));
|
||||
}
|
||||
catch (NumberFormatException ignored) {
|
||||
}
|
||||
if(uiSettingsChanged){
|
||||
uiSettings.fireUISettingsChanged();
|
||||
@@ -227,10 +223,6 @@ public class EditorTabsConfigurable implements EditorOptionsProvider {
|
||||
}
|
||||
|
||||
|
||||
private static boolean isModified(JToggleButton checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
try {
|
||||
int fieldValue = Integer.parseInt(textField.getText().trim());
|
||||
|
||||
@@ -126,10 +126,6 @@ public class ConsoleConfigurable implements SearchableConfigurable, Configurable
|
||||
return isModified;
|
||||
}
|
||||
|
||||
private static boolean isModified(JToggleButton checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
try {
|
||||
int fieldValue = Integer.parseInt(textField.getText().trim());
|
||||
|
||||
@@ -45,7 +45,7 @@ public class GeneralSettings implements PersistentStateComponent<GeneralSettings
|
||||
public static final String PROP_INACTIVE_TIMEOUT = "inactiveTimeout";
|
||||
public static final String PROP_SUPPORT_SCREEN_READERS = "supportScreenReaders";
|
||||
|
||||
static final UINumericRange SYSTEM_SETTINGS_SAVE_FILES_AFTER_IDLE_SEC = new UINumericRange(15, 1, 300);
|
||||
static final UINumericRange SAVE_FILES_AFTER_IDLE_SEC = new UINumericRange(15, 1, 300);
|
||||
|
||||
private String myBrowserPath = BrowserUtil.getDefaultAlternativeBrowserPath();
|
||||
private boolean myShowTipsOnStartup = true;
|
||||
@@ -185,13 +185,13 @@ public class GeneralSettings implements PersistentStateComponent<GeneralSettings
|
||||
* The method always return positive (more then zero) value.
|
||||
*/
|
||||
public int getInactiveTimeout(){
|
||||
return SYSTEM_SETTINGS_SAVE_FILES_AFTER_IDLE_SEC.fit(myInactiveTimeout);
|
||||
return SAVE_FILES_AFTER_IDLE_SEC.fit(myInactiveTimeout);
|
||||
}
|
||||
|
||||
public void setInactiveTimeout(int inactiveTimeoutSeconds) {
|
||||
int oldInactiveTimeout = myInactiveTimeout;
|
||||
|
||||
myInactiveTimeout = SYSTEM_SETTINGS_SAVE_FILES_AFTER_IDLE_SEC.fit(inactiveTimeoutSeconds);
|
||||
myInactiveTimeout = SAVE_FILES_AFTER_IDLE_SEC.fit(inactiveTimeoutSeconds);
|
||||
myPropertyChangeSupport.firePropertyChange(
|
||||
PROP_INACTIVE_TIMEOUT, Integer.valueOf(oldInactiveTimeout), Integer.valueOf(myInactiveTimeout)
|
||||
);
|
||||
|
||||
@@ -15,11 +15,16 @@
|
||||
*/
|
||||
package com.intellij.openapi.options;
|
||||
|
||||
import com.intellij.ide.ui.UINumericRange;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* This interface represents a named configurable component that provides a Swing form
|
||||
* to configure some settings via the Settings dialog.
|
||||
@@ -189,4 +194,21 @@ public interface Configurable extends UnnamedConfigurable {
|
||||
*/
|
||||
boolean isProjectLevel();
|
||||
}
|
||||
|
||||
default boolean isModified(@NotNull JTextField textField, @NotNull String value) {
|
||||
return !StringUtil.equals(textField.getText().trim(), value);
|
||||
}
|
||||
|
||||
default boolean isModified(@NotNull JTextField textField, int value, @NotNull UINumericRange range) {
|
||||
try {
|
||||
return range.fit(Integer.parseInt(textField.getText().trim())) != value;
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
default boolean isModified(@NotNull JToggleButton toggleButton, boolean value) {
|
||||
return toggleButton.isSelected() != value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,13 +104,7 @@ public class GeneralSettingsConfigurable extends CompositeConfigurable<Searchabl
|
||||
isModified |= settings.isConfirmExit() != myComponent.myConfirmExit.isSelected();
|
||||
isModified |= settings.getConfirmOpenNewProject() != getConfirmOpenNewProject();
|
||||
isModified |= settings.getProcessCloseConfirmation() != getProcessCloseConfirmation();
|
||||
|
||||
int inactiveTimeout = -1;
|
||||
try {
|
||||
inactiveTimeout = GeneralSettings.SYSTEM_SETTINGS_SAVE_FILES_AFTER_IDLE_SEC.fit(Integer.parseInt(myComponent.myTfInactiveTimeout.getText()));
|
||||
}
|
||||
catch (NumberFormatException ignored) { }
|
||||
isModified |= inactiveTimeout > 0 && settings.getInactiveTimeout() != inactiveTimeout;
|
||||
isModified |= isModified(myComponent.myTfInactiveTimeout, settings.getInactiveTimeout(), GeneralSettings.SAVE_FILES_AFTER_IDLE_SEC);
|
||||
|
||||
isModified |= settings.isUseSafeWrite() != myComponent.myChkUseSafeWrite.isSelected();
|
||||
|
||||
|
||||
+12
-14
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor.ex;
|
||||
|
||||
import com.intellij.ide.ui.UINumericRange;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
@@ -34,6 +35,9 @@ import java.util.Set;
|
||||
|
||||
@State(name = "EditorSettings", storages = @Storage("editor.xml"))
|
||||
public class EditorSettingsExternalizable implements PersistentStateComponent<EditorSettingsExternalizable.OptionSet> {
|
||||
public static final UINumericRange BLINKING_RANGE = new UINumericRange(500, 10, 1500);
|
||||
public static final UINumericRange QUICK_DOC_DELAY_RANGE = new UINumericRange(500, 1, 5000);
|
||||
|
||||
//Q: make it interface?
|
||||
public static final class OptionSet {
|
||||
public String LINE_SEPARATOR;
|
||||
@@ -45,10 +49,10 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
|
||||
@NonNls public String STRIP_TRAILING_SPACES = STRIP_TRAILING_SPACES_CHANGED;
|
||||
public boolean IS_ENSURE_NEWLINE_AT_EOF = false;
|
||||
public boolean SHOW_QUICK_DOC_ON_MOUSE_OVER_ELEMENT = false;
|
||||
public long QUICK_DOC_ON_MOUSE_OVER_DELAY_MS = 500;
|
||||
public int QUICK_DOC_ON_MOUSE_OVER_DELAY_MS = QUICK_DOC_DELAY_RANGE.initial;
|
||||
public boolean SHOW_INTENTION_BULB = true;
|
||||
public boolean IS_CARET_BLINKING = true;
|
||||
public int CARET_BLINKING_PERIOD = 500;
|
||||
public int CARET_BLINKING_PERIOD = BLINKING_RANGE.initial;
|
||||
public boolean IS_RIGHT_MARGIN_SHOWN = true;
|
||||
public boolean ARE_LINE_NUMBERS_SHOWN = true;
|
||||
public boolean ARE_GUTTER_ICONS_SHOWN = true;
|
||||
@@ -340,11 +344,11 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
|
||||
}
|
||||
|
||||
public int getBlinkPeriod() {
|
||||
return myOptions.CARET_BLINKING_PERIOD;
|
||||
return BLINKING_RANGE.fit(myOptions.CARET_BLINKING_PERIOD);
|
||||
}
|
||||
|
||||
public void setBlinkPeriod(int blinkInterval) {
|
||||
myOptions.CARET_BLINKING_PERIOD = blinkInterval;
|
||||
myOptions.CARET_BLINKING_PERIOD = BLINKING_RANGE.fit(blinkInterval);
|
||||
}
|
||||
|
||||
|
||||
@@ -373,18 +377,12 @@ public class EditorSettingsExternalizable implements PersistentStateComponent<Ed
|
||||
myOptions.SHOW_QUICK_DOC_ON_MOUSE_OVER_ELEMENT = show;
|
||||
}
|
||||
|
||||
public long getQuickDocOnMouseOverElementDelayMillis() {
|
||||
return myOptions.QUICK_DOC_ON_MOUSE_OVER_DELAY_MS;
|
||||
public int getQuickDocOnMouseOverElementDelayMillis() {
|
||||
return QUICK_DOC_DELAY_RANGE.fit(myOptions.QUICK_DOC_ON_MOUSE_OVER_DELAY_MS);
|
||||
}
|
||||
|
||||
public void setQuickDocOnMouseOverElementDelayMillis(long delay) throws IllegalArgumentException {
|
||||
if (delay <= 0) {
|
||||
throw new IllegalArgumentException(String.format(
|
||||
"Non-positive delay for the 'show quick doc on mouse over element' value detected! Expected positive value but got %d",
|
||||
delay
|
||||
));
|
||||
}
|
||||
myOptions.QUICK_DOC_ON_MOUSE_OVER_DELAY_MS = delay;
|
||||
public void setQuickDocOnMouseOverElementDelayMillis(int delay) {
|
||||
myOptions.QUICK_DOC_ON_MOUSE_OVER_DELAY_MS = QUICK_DOC_DELAY_RANGE.fit(delay);
|
||||
}
|
||||
|
||||
public boolean isShowIntentionBulb() {
|
||||
|
||||
Reference in New Issue
Block a user