mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
[imports layout java|groovy] do not delete newly added import immediately (was fixed by not modifying UI model in settings apply method IDEA-167619), unite java and groovy implementation since they are Ctrl-V identical
This commit is contained in:
+61
-58
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,27 +17,27 @@ package com.intellij.application.options;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.ImportsLayoutSettings;
|
||||
import com.intellij.psi.codeStyle.PackageEntry;
|
||||
import com.intellij.psi.codeStyle.PackageEntryTable;
|
||||
import com.intellij.ui.OptionGroup;
|
||||
import com.intellij.ui.TableUtil;
|
||||
import com.intellij.ui.table.JBTable;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import java.awt.*;
|
||||
|
||||
public class CodeStyleImportsPanel extends JPanel {
|
||||
public abstract class CodeStyleImportsPanelBase extends JPanel {
|
||||
private final PackageEntryTable myPackageList = new PackageEntryTable();
|
||||
private JCheckBox myCbUseFQClassNames;
|
||||
private JCheckBox myCbUseSingleClassImports;
|
||||
private JCheckBox myCbInsertInnerClassImports;
|
||||
private JTextField myClassCountField;
|
||||
private JTextField myNamesCountField;
|
||||
private final PackageEntryTable myPackageList = new PackageEntryTable();
|
||||
|
||||
private JBTable myPackageTable;
|
||||
private final CodeStyleSettings mySettings;
|
||||
|
||||
private JPanel myGeneralPanel;
|
||||
private JPanel myPackagesPanel;
|
||||
@@ -46,8 +46,7 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
private ImportLayoutPanel myImportLayoutPanel;
|
||||
private FullyQualifiedNamesInJavadocOptionProvider myFqnInJavadocOption;
|
||||
|
||||
public CodeStyleImportsPanel(CodeStyleSettings settings) {
|
||||
mySettings = settings;
|
||||
public CodeStyleImportsPanelBase() {
|
||||
setLayout(new BorderLayout());
|
||||
add(myWholePanel, BorderLayout.CENTER);
|
||||
|
||||
@@ -56,6 +55,12 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
createPackagePanel();
|
||||
}
|
||||
|
||||
public abstract void reset(CodeStyleSettings settings);
|
||||
|
||||
public abstract void apply(CodeStyleSettings settings);
|
||||
|
||||
public abstract boolean isModified(CodeStyleSettings settings);
|
||||
|
||||
private void createImportPanel() {
|
||||
myImportLayoutPanel = new ImportLayoutPanel() {
|
||||
@Override
|
||||
@@ -83,9 +88,8 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
myCbInsertInnerClassImports = new JCheckBox(ApplicationBundle.message("checkbox.insert.imports.for.inner.classes"));
|
||||
group.add(myCbInsertInnerClassImports);
|
||||
|
||||
myFqnInJavadocOption = new FullyQualifiedNamesInJavadocOptionProvider(mySettings);
|
||||
group.add(myFqnInJavadocOption.getPanel());
|
||||
|
||||
fillCustomOptions(group);
|
||||
|
||||
myClassCountField = new JTextField(3);
|
||||
myNamesCountField = new JTextField(3);
|
||||
final JPanel panel = new JPanel(new GridBagLayout());
|
||||
@@ -113,18 +117,17 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
ImportLayoutPanel.resizeColumns(packageTable, table, myImportLayoutPanel.areStaticImportsEnabled());
|
||||
}
|
||||
|
||||
public void reset(CodeStyleSettings settings) {
|
||||
myCbUseFQClassNames.setSelected(settings.USE_FQ_CLASS_NAMES);
|
||||
myCbUseSingleClassImports.setSelected(settings.USE_SINGLE_CLASS_IMPORTS);
|
||||
myCbInsertInnerClassImports.setSelected(settings.INSERT_INNER_CLASS_IMPORTS);
|
||||
myClassCountField.setText(Integer.toString(settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND));
|
||||
myNamesCountField.setText(Integer.toString(settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND));
|
||||
public void resetLayoutSettings(ImportsLayoutSettings settings) {
|
||||
myCbUseFQClassNames.setSelected(settings.isUseFqClassNames());
|
||||
myCbUseSingleClassImports.setSelected(settings.isUseSingleClassImports());
|
||||
myCbInsertInnerClassImports.setSelected(settings.isInsertInnerClassImports());
|
||||
myClassCountField.setText(Integer.toString(settings.getClassCountToUseImportOnDemand()));
|
||||
myNamesCountField.setText(Integer.toString(settings.getNamesCountToUseImportOnDemand()));
|
||||
|
||||
myImportLayoutPanel.getImportLayoutList().copyFrom(settings.IMPORT_LAYOUT_TABLE);
|
||||
myPackageList.copyFrom(settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND);
|
||||
myFqnInJavadocOption.reset(settings);
|
||||
myImportLayoutPanel.getImportLayoutList().copyFrom(settings.getImportLayoutTable());
|
||||
myPackageList.copyFrom(settings.getPackagesToUseImportOnDemand());
|
||||
|
||||
myImportLayoutPanel.getCbLayoutStaticImportsSeparately().setSelected(settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
|
||||
myImportLayoutPanel.getCbLayoutStaticImportsSeparately().setSelected(settings.isLayoutStaticImportsSeparately());
|
||||
|
||||
final JBTable importLayoutTable = myImportLayoutPanel.getImportLayoutTable();
|
||||
AbstractTableModel model = (AbstractTableModel)importLayoutTable.getModel();
|
||||
@@ -141,42 +144,46 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
reset(mySettings);
|
||||
}
|
||||
|
||||
public void apply(CodeStyleSettings settings) {
|
||||
public void applyLayoutSettings(ImportsLayoutSettings settings) {
|
||||
stopTableEditing();
|
||||
|
||||
settings.LAYOUT_STATIC_IMPORTS_SEPARATELY = myImportLayoutPanel.areStaticImportsEnabled();
|
||||
settings.USE_FQ_CLASS_NAMES = myCbUseFQClassNames.isSelected();
|
||||
settings.USE_SINGLE_CLASS_IMPORTS = myCbUseSingleClassImports.isSelected();
|
||||
settings.INSERT_INNER_CLASS_IMPORTS = myCbInsertInnerClassImports.isSelected();
|
||||
settings.setLayoutStaticImportsSeparately(myImportLayoutPanel.areStaticImportsEnabled());
|
||||
settings.setUseFqClassNames(myCbUseFQClassNames.isSelected());
|
||||
settings.setUseSingleClassImports(myCbUseSingleClassImports.isSelected());
|
||||
settings.setInsertInnerClassImports(myCbInsertInnerClassImports.isSelected());
|
||||
try {
|
||||
settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = Integer.parseInt(myClassCountField.getText());
|
||||
int value = Integer.parseInt(myClassCountField.getText());
|
||||
settings.setClassCountToUseImportOnDemand(value);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
//just a bad number
|
||||
}
|
||||
try {
|
||||
settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = Integer.parseInt(myNamesCountField.getText());
|
||||
int value = Integer.parseInt(myNamesCountField.getText());
|
||||
settings.setNamesCountToUseImportOnDemand(value);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
//just a bad number
|
||||
}
|
||||
|
||||
final PackageEntryTable list = myImportLayoutPanel.getImportLayoutList();
|
||||
list.removeEmptyPackages();
|
||||
settings.IMPORT_LAYOUT_TABLE.copyFrom(list);
|
||||
|
||||
myPackageList.removeEmptyPackages();
|
||||
settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.copyFrom(myPackageList);
|
||||
|
||||
myFqnInJavadocOption.apply(settings);
|
||||
PackageEntryTable list = myImportLayoutPanel.getImportLayoutList();
|
||||
settings.getImportLayoutTable().copyFrom(getCopyWithoutEmptyPackages(list));
|
||||
settings.getPackagesToUseImportOnDemand().copyFrom(getCopyWithoutEmptyPackages(myPackageList));
|
||||
}
|
||||
|
||||
public void apply() {
|
||||
apply(mySettings);
|
||||
public boolean isModifiedLayoutSettings(ImportsLayoutSettings settings) {
|
||||
boolean isModified = isModified(myImportLayoutPanel.getCbLayoutStaticImportsSeparately(), settings.isLayoutStaticImportsSeparately());
|
||||
isModified |= isModified(myCbUseFQClassNames, settings.isUseFqClassNames());
|
||||
isModified |= isModified(myCbUseSingleClassImports, settings.isUseSingleClassImports());
|
||||
isModified |= isModified(myCbInsertInnerClassImports, settings.isInsertInnerClassImports());
|
||||
isModified |= isModified(myClassCountField, settings.getClassCountToUseImportOnDemand());
|
||||
isModified |= isModified(myNamesCountField, settings.getNamesCountToUseImportOnDemand());
|
||||
|
||||
PackageEntryTable list = myImportLayoutPanel.getImportLayoutList();
|
||||
isModified |= isModified(getCopyWithoutEmptyPackages(list), settings.getImportLayoutTable());
|
||||
isModified |= isModified(getCopyWithoutEmptyPackages(myPackageList), settings.getPackagesToUseImportOnDemand());
|
||||
|
||||
return isModified;
|
||||
}
|
||||
|
||||
private void stopTableEditing() {
|
||||
@@ -184,23 +191,19 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
TableUtil.stopEditing(myPackageTable);
|
||||
}
|
||||
|
||||
public boolean isModified(CodeStyleSettings settings) {
|
||||
boolean isModified = isModified(myImportLayoutPanel.getCbLayoutStaticImportsSeparately(), settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
|
||||
isModified |= isModified(myCbUseFQClassNames, settings.USE_FQ_CLASS_NAMES);
|
||||
isModified |= myFqnInJavadocOption.isModified(settings);
|
||||
isModified |= isModified(myCbUseSingleClassImports, settings.USE_SINGLE_CLASS_IMPORTS);
|
||||
isModified |= isModified(myCbInsertInnerClassImports, settings.INSERT_INNER_CLASS_IMPORTS);
|
||||
isModified |= isModified(myClassCountField, settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND);
|
||||
isModified |= isModified(myNamesCountField, settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND);
|
||||
|
||||
isModified |= isModified(myImportLayoutPanel.getImportLayoutList(), settings.IMPORT_LAYOUT_TABLE);
|
||||
isModified |= isModified(myPackageList, settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND);
|
||||
|
||||
return isModified;
|
||||
protected void fillCustomOptions(OptionGroup group) {
|
||||
}
|
||||
|
||||
public boolean isModified() {
|
||||
return isModified(mySettings);
|
||||
@NotNull
|
||||
private static PackageEntryTable getCopyWithoutEmptyPackages(PackageEntryTable table) {
|
||||
try {
|
||||
PackageEntryTable copy = (PackageEntryTable)table.clone();
|
||||
copy.removeEmptyPackages();
|
||||
return copy;
|
||||
}
|
||||
catch (CloneNotSupportedException ignored) {
|
||||
throw new IllegalStateException("Clone should be supported");
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
@@ -213,7 +216,7 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isModified(JCheckBox checkBox, boolean value) {
|
||||
protected static boolean isModified(JCheckBox checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
@@ -232,4 +235,4 @@ public class CodeStyleImportsPanel extends JPanel {
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.application.options.CodeStyleImportsPanel">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.application.options.CodeStyleImportsPanelBase">
|
||||
<grid id="27dc6" binding="myWholePanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
+7
-8
@@ -30,14 +30,13 @@ import javax.swing.*;
|
||||
*/
|
||||
public class CodeStyleImportsPanelWrapper extends CodeStyleAbstractPanel {
|
||||
|
||||
private final CodeStyleImportsPanel myImporsPanel;
|
||||
private final JavaCodeStyleImportsPanel myImportsPanel;
|
||||
|
||||
protected CodeStyleImportsPanelWrapper(CodeStyleSettings settings) {
|
||||
super(settings);
|
||||
myImporsPanel = new CodeStyleImportsPanel(settings);
|
||||
myImportsPanel = new JavaCodeStyleImportsPanel();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected int getRightMargin() {
|
||||
return 0;
|
||||
@@ -61,22 +60,22 @@ public class CodeStyleImportsPanelWrapper extends CodeStyleAbstractPanel {
|
||||
|
||||
@Override
|
||||
public void apply(CodeStyleSettings settings) {
|
||||
myImporsPanel.apply(settings);
|
||||
myImportsPanel.apply(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified(CodeStyleSettings settings) {
|
||||
return myImporsPanel.isModified(settings);
|
||||
return myImportsPanel.isModified(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getPanel() {
|
||||
return myImporsPanel;
|
||||
return myImportsPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void resetImpl(CodeStyleSettings settings) {
|
||||
myImporsPanel.reset(settings);
|
||||
myImportsPanel.reset(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-2
@@ -33,9 +33,8 @@ public class FullyQualifiedNamesInJavadocOptionProvider {
|
||||
private JPanel myPanel;
|
||||
private ComboBox myComboBox;
|
||||
|
||||
public FullyQualifiedNamesInJavadocOptionProvider(@NotNull CodeStyleSettings settings) {
|
||||
public FullyQualifiedNamesInJavadocOptionProvider() {
|
||||
composePanel();
|
||||
reset(settings);
|
||||
}
|
||||
|
||||
public void reset(@NotNull CodeStyleSettings settings) {
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.application.options;
|
||||
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.ui.OptionGroup;
|
||||
|
||||
class JavaCodeStyleImportsPanel extends CodeStyleImportsPanelBase {
|
||||
private FullyQualifiedNamesInJavadocOptionProvider myFqnInJavadocOption;
|
||||
|
||||
@Override
|
||||
protected void fillCustomOptions(OptionGroup group) {
|
||||
myFqnInJavadocOption = new FullyQualifiedNamesInJavadocOptionProvider();
|
||||
group.add(myFqnInJavadocOption.getPanel());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(CodeStyleSettings settings) {
|
||||
applyLayoutSettings(settings);
|
||||
myFqnInJavadocOption.apply(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(CodeStyleSettings settings) {
|
||||
resetLayoutSettings(settings);
|
||||
myFqnInJavadocOption.reset(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified(CodeStyleSettings settings) {
|
||||
return isModifiedLayoutSettings(settings) || myFqnInJavadocOption.isModified(settings);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -49,7 +49,7 @@ import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
|
||||
public class CodeStyleSettings extends CommonCodeStyleSettings implements Cloneable, JDOMExternalizable {
|
||||
public class CodeStyleSettings extends CommonCodeStyleSettings implements Cloneable, JDOMExternalizable, ImportsLayoutSettings {
|
||||
public static final int MAX_RIGHT_MARGIN = 1000;
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(CodeStyleSettings.class);
|
||||
@@ -278,8 +278,78 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea
|
||||
public int NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = 3;
|
||||
public final PackageEntryTable PACKAGES_TO_USE_IMPORT_ON_DEMAND = new PackageEntryTable();
|
||||
public final PackageEntryTable IMPORT_LAYOUT_TABLE = new PackageEntryTable();
|
||||
|
||||
@Override
|
||||
public boolean isLayoutStaticImportsSeparately() {
|
||||
return LAYOUT_STATIC_IMPORTS_SEPARATELY;
|
||||
}
|
||||
|
||||
// endregion
|
||||
@Override
|
||||
public void setLayoutStaticImportsSeparately(boolean value) {
|
||||
LAYOUT_STATIC_IMPORTS_SEPARATELY = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNamesCountToUseImportOnDemand() {
|
||||
return NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNamesCountToUseImportOnDemand(int value) {
|
||||
NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getClassCountToUseImportOnDemand() {
|
||||
return CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClassCountToUseImportOnDemand(int value) {
|
||||
CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInsertInnerClassImports() {
|
||||
return INSERT_INNER_CLASS_IMPORTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsertInnerClassImports(boolean value) {
|
||||
INSERT_INNER_CLASS_IMPORTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseSingleClassImports() {
|
||||
return USE_SINGLE_CLASS_IMPORTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseSingleClassImports(boolean value) {
|
||||
USE_SINGLE_CLASS_IMPORTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseFqClassNames() {
|
||||
return USE_FQ_CLASS_NAMES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseFqClassNames(boolean value) {
|
||||
USE_FQ_CLASS_NAMES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageEntryTable getImportLayoutTable() {
|
||||
return IMPORT_LAYOUT_TABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageEntryTable getPackagesToUseImportOnDemand() {
|
||||
return PACKAGES_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region ORDER OF MEMBERS
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.psi.codeStyle;
|
||||
|
||||
public interface ImportsLayoutSettings {
|
||||
boolean isLayoutStaticImportsSeparately();
|
||||
void setLayoutStaticImportsSeparately(boolean value);
|
||||
int getNamesCountToUseImportOnDemand();
|
||||
void setNamesCountToUseImportOnDemand(int value);
|
||||
int getClassCountToUseImportOnDemand();
|
||||
void setClassCountToUseImportOnDemand(int value);
|
||||
boolean isInsertInnerClassImports();
|
||||
void setInsertInnerClassImports(boolean value);
|
||||
boolean isUseSingleClassImports();
|
||||
void setUseSingleClassImports(boolean value);
|
||||
boolean isUseFqClassNames();
|
||||
void setUseFqClassNames(boolean value);
|
||||
PackageEntryTable getImportLayoutTable();
|
||||
PackageEntryTable getPackagesToUseImportOnDemand();
|
||||
}
|
||||
-54
@@ -1,54 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.groovy.codeStyle.GrCodeStyleImportsPanel">
|
||||
<grid id="27dc6" binding="myWholePanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="25" y="44" width="495" height="272"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<scrollpane id="cb09e" class="com.intellij.ui.components.JBScrollPane">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="72ab4" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="10" bottom="10" right="10"/>
|
||||
<constraints/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="27541" binding="myPackagesPanel" layout-manager="BorderLayout" hgap="-1" vgap="-1">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<grid id="ff1de" binding="myImportsLayoutPanel" layout-manager="BorderLayout" hgap="-1" vgap="-1">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<grid id="861ec" binding="myGeneralPanel" layout-manager="BorderLayout" hgap="-1" vgap="-1">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</scrollpane>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
+24
-184
@@ -15,208 +15,48 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.codeStyle;
|
||||
|
||||
import com.intellij.application.options.ImportLayoutPanel;
|
||||
import com.intellij.application.options.PackagePanel;
|
||||
import com.intellij.application.options.CodeStyleImportsPanelBase;
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.psi.codeStyle.PackageEntry;
|
||||
import com.intellij.psi.codeStyle.PackageEntryTable;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.table.JBTable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class GrCodeStyleImportsPanel extends JPanel {
|
||||
private JCheckBox myCbUseFQClassNames;
|
||||
public class GrCodeStyleImportsPanel extends CodeStyleImportsPanelBase {
|
||||
private JCheckBox myCbUseFQClassNamesInJavaDoc;
|
||||
private JCheckBox myCbUseSingleClassImports;
|
||||
private JCheckBox myCbInsertInnerClassImports;
|
||||
private JTextField myClassCountField;
|
||||
private JTextField myNamesCountField;
|
||||
private final PackageEntryTable myPackageList = new PackageEntryTable();
|
||||
|
||||
private JBTable myPackageTable;
|
||||
|
||||
private JPanel myGeneralPanel;
|
||||
private JPanel myPackagesPanel;
|
||||
private JPanel myImportsLayoutPanel;
|
||||
private JPanel myWholePanel;
|
||||
private ImportLayoutPanel myImportLayoutPanel;
|
||||
|
||||
public GrCodeStyleImportsPanel() {
|
||||
setLayout(new BorderLayout());
|
||||
add(myWholePanel, BorderLayout.CENTER);
|
||||
|
||||
myGeneralPanel.add(createGeneralOptionsPanel(), BorderLayout.CENTER);
|
||||
createImportPanel();
|
||||
createPackagePanel();
|
||||
}
|
||||
|
||||
private void createImportPanel() {
|
||||
myImportLayoutPanel = new ImportLayoutPanel() {
|
||||
@Override
|
||||
public void refresh() {
|
||||
refreshTable(myPackageTable, myPackageList);
|
||||
refreshTable(getImportLayoutTable(), getImportLayoutList());
|
||||
}
|
||||
};
|
||||
myImportsLayoutPanel.add(myImportLayoutPanel, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
private void createPackagePanel() {
|
||||
myPackageTable = ImportLayoutPanel.createTableForPackageEntries(myPackageList, myImportLayoutPanel);
|
||||
myPackagesPanel.add(PackagePanel.createPackagesPanel(myPackageTable, myPackageList), BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
private JPanel createGeneralOptionsPanel() {
|
||||
OptionGroup group = new OptionGroup(ApplicationBundle.message("title.general"));
|
||||
myCbUseSingleClassImports = new JCheckBox(ApplicationBundle.message("checkbox.use.single.class.import"));
|
||||
group.add(myCbUseSingleClassImports);
|
||||
|
||||
myCbUseFQClassNames = new JCheckBox(ApplicationBundle.message("checkbox.use.fully.qualified.class.names"));
|
||||
group.add(myCbUseFQClassNames);
|
||||
|
||||
myCbInsertInnerClassImports = new JCheckBox(ApplicationBundle.message("checkbox.insert.imports.for.inner.classes"));
|
||||
group.add(myCbInsertInnerClassImports);
|
||||
|
||||
|
||||
@Override
|
||||
protected void fillCustomOptions(OptionGroup group) {
|
||||
myCbUseFQClassNamesInJavaDoc = new JCheckBox(ApplicationBundle.message("checkbox.use.fully.qualified.class.names.in.javadoc"));
|
||||
group.add(myCbUseFQClassNamesInJavaDoc);
|
||||
|
||||
myClassCountField = new JTextField(3);
|
||||
myNamesCountField = new JTextField(3);
|
||||
final JPanel panel = new JPanel(new GridBagLayout());
|
||||
panel.add(new JLabel(ApplicationBundle.message("editbox.class.count.to.use.import.with.star")),
|
||||
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
|
||||
new Insets(0, 3, 0, 0), 0, 0));
|
||||
panel.add(myClassCountField,
|
||||
new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
|
||||
new Insets(0, 1, 0, 0), 0, 0));
|
||||
panel.add(new JLabel(ApplicationBundle.message("editbox.names.count.to.use.static.import.with.star")),
|
||||
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE,
|
||||
new Insets(0, 3, 0, 0), 0, 0));
|
||||
panel.add(myNamesCountField,
|
||||
new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
|
||||
new Insets(0, 1, 0, 0), 0, 0));
|
||||
|
||||
group.add(panel);
|
||||
return group.createPanel();
|
||||
}
|
||||
|
||||
private void refreshTable(final JBTable table, final PackageEntryTable packageTable) {
|
||||
AbstractTableModel model = (AbstractTableModel)table.getModel();
|
||||
table.createDefaultColumnsFromModel();
|
||||
model.fireTableDataChanged();
|
||||
ImportLayoutPanel.resizeColumns(packageTable, table, myImportLayoutPanel.areStaticImportsEnabled());
|
||||
@Override
|
||||
public void apply(CodeStyleSettings settings) {
|
||||
GroovyCodeStyleSettings groovySettings = getGroovySettings(settings);
|
||||
applyLayoutSettings(groovySettings);
|
||||
groovySettings.USE_FQ_CLASS_NAMES_IN_JAVADOC = myCbUseFQClassNamesInJavaDoc.isSelected();
|
||||
}
|
||||
|
||||
public void reset(GroovyCodeStyleSettings settings) {
|
||||
myCbUseFQClassNames.setSelected(settings.USE_FQ_CLASS_NAMES);
|
||||
myCbUseFQClassNamesInJavaDoc.setSelected(settings.USE_FQ_CLASS_NAMES_IN_JAVADOC);
|
||||
myCbUseSingleClassImports.setSelected(settings.USE_SINGLE_CLASS_IMPORTS);
|
||||
myCbInsertInnerClassImports.setSelected(settings.INSERT_INNER_CLASS_IMPORTS);
|
||||
myClassCountField.setText(Integer.toString(settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND));
|
||||
myNamesCountField.setText(Integer.toString(settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND));
|
||||
|
||||
myImportLayoutPanel.getImportLayoutList().copyFrom(settings.IMPORT_LAYOUT_TABLE);
|
||||
myPackageList.copyFrom(settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND);
|
||||
|
||||
myImportLayoutPanel.getCbLayoutStaticImportsSeparately().setSelected(settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
|
||||
|
||||
final JBTable importLayoutTable = myImportLayoutPanel.getImportLayoutTable();
|
||||
AbstractTableModel model = (AbstractTableModel)importLayoutTable.getModel();
|
||||
model.fireTableDataChanged();
|
||||
|
||||
model = (AbstractTableModel)myPackageTable.getModel();
|
||||
model.fireTableDataChanged();
|
||||
|
||||
if (importLayoutTable.getRowCount() > 0) {
|
||||
importLayoutTable.getSelectionModel().setSelectionInterval(0, 0);
|
||||
}
|
||||
if (myPackageTable.getRowCount() > 0) {
|
||||
myPackageTable.getSelectionModel().setSelectionInterval(0, 0);
|
||||
}
|
||||
private static GroovyCodeStyleSettings getGroovySettings(CodeStyleSettings settings) {
|
||||
return settings.getCustomSettings(GroovyCodeStyleSettings.class);
|
||||
}
|
||||
|
||||
public void apply(GroovyCodeStyleSettings settings) {
|
||||
stopTableEditing();
|
||||
|
||||
settings.LAYOUT_STATIC_IMPORTS_SEPARATELY = myImportLayoutPanel.areStaticImportsEnabled();
|
||||
settings.USE_FQ_CLASS_NAMES = myCbUseFQClassNames.isSelected();
|
||||
settings.USE_FQ_CLASS_NAMES_IN_JAVADOC = myCbUseFQClassNamesInJavaDoc.isSelected();
|
||||
settings.USE_SINGLE_CLASS_IMPORTS = myCbUseSingleClassImports.isSelected();
|
||||
settings.INSERT_INNER_CLASS_IMPORTS = myCbInsertInnerClassImports.isSelected();
|
||||
try {
|
||||
settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = Integer.parseInt(myClassCountField.getText());
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
//just a bad number
|
||||
}
|
||||
try {
|
||||
settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = Integer.parseInt(myNamesCountField.getText());
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
//just a bad number
|
||||
}
|
||||
|
||||
final PackageEntryTable list = myImportLayoutPanel.getImportLayoutList();
|
||||
list.removeEmptyPackages();
|
||||
settings.IMPORT_LAYOUT_TABLE.copyFrom(list);
|
||||
|
||||
myPackageList.removeEmptyPackages();
|
||||
settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND.copyFrom(myPackageList);
|
||||
@Override
|
||||
public void reset(CodeStyleSettings settings) {
|
||||
GroovyCodeStyleSettings groovySettings = getGroovySettings(settings);
|
||||
resetLayoutSettings(groovySettings);
|
||||
myCbUseFQClassNamesInJavaDoc.setSelected(groovySettings.USE_FQ_CLASS_NAMES_IN_JAVADOC);
|
||||
}
|
||||
|
||||
private void stopTableEditing() {
|
||||
TableUtil.stopEditing(myImportLayoutPanel.getImportLayoutTable());
|
||||
TableUtil.stopEditing(myPackageTable);
|
||||
}
|
||||
|
||||
public boolean isModified(GroovyCodeStyleSettings settings) {
|
||||
boolean isModified = isModified(myImportLayoutPanel.getCbLayoutStaticImportsSeparately(), settings.LAYOUT_STATIC_IMPORTS_SEPARATELY);
|
||||
isModified |= isModified(myCbUseFQClassNames, settings.USE_FQ_CLASS_NAMES);
|
||||
isModified |= isModified(myCbUseFQClassNamesInJavaDoc, settings.USE_FQ_CLASS_NAMES_IN_JAVADOC);
|
||||
isModified |= isModified(myCbUseSingleClassImports, settings.USE_SINGLE_CLASS_IMPORTS);
|
||||
isModified |= isModified(myCbInsertInnerClassImports, settings.INSERT_INNER_CLASS_IMPORTS);
|
||||
isModified |= isModified(myClassCountField, settings.CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND);
|
||||
isModified |= isModified(myNamesCountField, settings.NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND);
|
||||
|
||||
isModified |= isModified(myImportLayoutPanel.getImportLayoutList(), settings.IMPORT_LAYOUT_TABLE);
|
||||
isModified |= isModified(myPackageList, settings.PACKAGES_TO_USE_IMPORT_ON_DEMAND);
|
||||
|
||||
return isModified;
|
||||
}
|
||||
|
||||
private static boolean isModified(JTextField textField, int value) {
|
||||
try {
|
||||
int fieldValue = Integer.parseInt(textField.getText().trim());
|
||||
return fieldValue != value;
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isModified(JCheckBox checkBox, boolean value) {
|
||||
return checkBox.isSelected() != value;
|
||||
}
|
||||
|
||||
private static boolean isModified(PackageEntryTable list, PackageEntryTable table) {
|
||||
if (list.getEntryCount() != table.getEntryCount()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < list.getEntryCount(); i++) {
|
||||
PackageEntry entry1 = list.getEntryAt(i);
|
||||
PackageEntry entry2 = table.getEntryAt(i);
|
||||
if (!entry1.equals(entry2)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
@Override
|
||||
public boolean isModified(CodeStyleSettings settings) {
|
||||
GroovyCodeStyleSettings grSettings = getGroovySettings(settings);
|
||||
return isModified(myCbUseFQClassNamesInJavaDoc, grSettings.USE_FQ_CLASS_NAMES_IN_JAVADOC)
|
||||
|| isModifiedLayoutSettings(grSettings);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-3
@@ -62,12 +62,12 @@ public class GrCodeStyleImportsPanelWrapper extends CodeStyleAbstractPanel {
|
||||
|
||||
@Override
|
||||
public void apply(CodeStyleSettings settings) {
|
||||
myImportsPanel.apply(settings.getCustomSettings(GroovyCodeStyleSettings.class));
|
||||
myImportsPanel.apply(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified(CodeStyleSettings settings) {
|
||||
return myImportsPanel.isModified(settings.getCustomSettings(GroovyCodeStyleSettings.class));
|
||||
return myImportsPanel.isModified(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,7 +77,7 @@ public class GrCodeStyleImportsPanelWrapper extends CodeStyleAbstractPanel {
|
||||
|
||||
@Override
|
||||
protected void resetImpl(CodeStyleSettings settings) {
|
||||
myImportsPanel.reset(settings.getCustomSettings(GroovyCodeStyleSettings.class));
|
||||
myImportsPanel.reset(settings);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+72
-1
@@ -20,7 +20,7 @@ import com.intellij.psi.codeStyle.*;
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class GroovyCodeStyleSettings extends CustomCodeStyleSettings {
|
||||
public class GroovyCodeStyleSettings extends CustomCodeStyleSettings implements ImportsLayoutSettings {
|
||||
/**
|
||||
* Defines if 'flying geese' style should be used for curly braces formatting, e.g. if we want to format code like
|
||||
* <p/>
|
||||
@@ -79,4 +79,75 @@ public class GroovyCodeStyleSettings extends CustomCodeStyleSettings {
|
||||
|
||||
initImportsByDefault();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNamesCountToUseImportOnDemand() {
|
||||
return NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNamesCountToUseImportOnDemand(int value) {
|
||||
NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getClassCountToUseImportOnDemand() {
|
||||
return CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClassCountToUseImportOnDemand(int value) {
|
||||
CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInsertInnerClassImports() {
|
||||
return INSERT_INNER_CLASS_IMPORTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsertInnerClassImports(boolean value) {
|
||||
INSERT_INNER_CLASS_IMPORTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseSingleClassImports() {
|
||||
return USE_SINGLE_CLASS_IMPORTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseSingleClassImports(boolean value) {
|
||||
USE_SINGLE_CLASS_IMPORTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseFqClassNames() {
|
||||
return USE_FQ_CLASS_NAMES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseFqClassNames(boolean value) {
|
||||
USE_FQ_CLASS_NAMES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageEntryTable getImportLayoutTable() {
|
||||
return IMPORT_LAYOUT_TABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageEntryTable getPackagesToUseImportOnDemand() {
|
||||
return PACKAGES_TO_USE_IMPORT_ON_DEMAND;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLayoutStaticImportsSeparately() {
|
||||
return LAYOUT_STATIC_IMPORTS_SEPARATELY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLayoutStaticImportsSeparately(boolean value) {
|
||||
LAYOUT_STATIC_IMPORTS_SEPARATELY = value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user