coverage: split settings so it's clear what enabled/disabled states are (IDEA-200520)

This commit is contained in:
Anna.Kozlova
2019-01-07 15:45:56 +01:00
parent a657af95e8
commit a7bac2c14c
3 changed files with 29 additions and 35 deletions
@@ -49,14 +49,12 @@ import java.util.List;
public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText {
private static final String IS_ACTIVE = "Is Active";
private static final String INCLUDE_EXCLUDE = "Include/Exclude";
protected JBTable myTable = null;
protected FilterTableModel myTableModel = null;
protected final Project myProject;
private final ClassFilter myChooserFilter;
@Nullable
private final String myPatternsHelpId;
private final boolean myExcludeAllowed;
private String classDelimiter = "$";
public ClassFilterEditor(Project project) {
@@ -68,13 +66,8 @@ public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText
}
public ClassFilterEditor(Project project, ClassFilter classFilter, @Nullable String patternsHelpId) {
this(project, classFilter, patternsHelpId, false);
}
public ClassFilterEditor(Project project, ClassFilter classFilter, @Nullable String patternsHelpId, boolean excludeAllowed) {
super(new BorderLayout());
myPatternsHelpId = patternsHelpId;
myExcludeAllowed = excludeAllowed;
myTable = new JBTable();
final ToolbarDecorator decorator = ToolbarDecorator.createDecorator(myTable)
@@ -126,19 +119,8 @@ public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText
TableColumnModel columnModel = myTable.getColumnModel();
TableColumn column = columnModel.getColumn(FilterTableModel.CHECK_MARK);
int preferredWidth;
if (!excludeAllowed) {
myTable.setTableHeader(null);
preferredWidth = 0;
}
else {
JTableHeader tableHeader = myTable.getTableHeader();
final FontMetrics fontMetrics = tableHeader.getFontMetrics(tableHeader.getFont());
preferredWidth = fontMetrics.stringWidth(IS_ACTIVE) + 20;
TableColumn includeColumn = columnModel.getColumn(FilterTableModel.INCLUDE_MARK);
includeColumn.setCellRenderer(new EnabledCellRenderer(myTable.getDefaultRenderer(Boolean.class)));
TableUtil.setupCheckboxColumn(includeColumn, fontMetrics.stringWidth(INCLUDE_EXCLUDE) + 20);
}
myTable.setTableHeader(null);
preferredWidth = 0;
TableUtil.setupCheckboxColumn(column, preferredWidth);
column.setCellRenderer(new EnabledCellRenderer(myTable.getDefaultRenderer(Boolean.class)));
columnModel.getColumn(FilterTableModel.FILTER).setCellRenderer(new FilterCellRenderer());
@@ -241,9 +223,6 @@ public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText
@Override
public int getColumnCount() {
if (myExcludeAllowed) {
return 3;
}
return 2;
}
@@ -252,9 +231,6 @@ public class ClassFilterEditor extends JPanel implements ComponentWithEmptyText
if (column == FILTER) {
return "Pattern";
}
if (column == INCLUDE_MARK) {
return INCLUDE_EXCLUDE;
}
return IS_ACTIVE;
}
@@ -310,7 +310,8 @@ run.configuration.unknown.description=Configuration which cannot be loaded due t
#code coverage
enable.coverage.with.emma=Record code &coverage information
merge.coverage.data=&Merge gathered coverage with suite chosen below
record.coverage.filters.title=Packages and classes to record coverage data
record.coverage.filters.title=Packages and classes to include in coverage data
exclude.coverage.filters.title=Packages and classes to exclude from coverage data
coverage.tab.title=Code Coverage
show.swing.inspector=&Enable capturing form snapshots
show.swing.inspector.disabled=&Enable capturing form snapshots (requires JRE 5.0 or higher)
@@ -11,7 +11,6 @@ import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.util.JreVersionDetector;
import com.intellij.icons.AllIcons;
import com.intellij.ide.util.ClassFilter;
import com.intellij.ide.util.PackageChooserDialog;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.options.ConfigurationException;
@@ -22,11 +21,14 @@ import com.intellij.openapi.ui.VerticalFlowLayout;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.TitledSeparator;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.ui.classFilter.ClassFilterEditor;
import com.intellij.ui.components.JBPanel;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IconUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -36,6 +38,7 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
/**
@@ -54,6 +57,7 @@ public class CoverageConfigurable extends SettingsEditor<RunConfigurationBase> {
private final JreVersionDetector myVersionDetector = new JreVersionDetector();
Project myProject;
private MyClassFilterEditor myClassFilterEditor;
private MyClassFilterEditor myExcludeClassFilterEditor;
private JLabel myCoverageNotSupportedLabel;
private JComboBox myCoverageRunnerCb;
private JPanel myRunnerPanel;
@@ -66,13 +70,13 @@ public class CoverageConfigurable extends SettingsEditor<RunConfigurationBase> {
private static class MyClassFilterEditor extends ClassFilterEditor {
MyClassFilterEditor(Project project) {
super(project, new ClassFilter() {
super(project, new com.intellij.ide.util.ClassFilter() {
@Override
public boolean isAccepted(PsiClass aClass) {
if (aClass.getContainingClass() != null) return false;
return true;
}
}, null, true);
}, null);
}
@Override
@@ -147,7 +151,10 @@ public class CoverageConfigurable extends SettingsEditor<RunConfigurationBase> {
UIUtil.setEnabled(myRunnerPanel, isJre50, true);
myClassFilterEditor.setFilters(configuration.getCoveragePatterns());
myClassFilterEditor.setFilters(Arrays.stream(configuration.getCoveragePatterns())
.filter(classFilter -> classFilter.INCLUDE).toArray(ClassFilter[]::new));
myExcludeClassFilterEditor.setFilters(Arrays.stream(configuration.getCoveragePatterns())
.filter(classFilter -> !classFilter.INCLUDE).toArray(ClassFilter[]::new));
final boolean isCoverageByTestApplicable = runner != null && runner.isCoverageByTestApplicable();
myTracingRb.setEnabled(myTracingRb.isEnabled() && isCoverageByTestApplicable);
mySamplingRb.setSelected(configuration.isSampling() || !isCoverageByTestApplicable);
@@ -166,7 +173,13 @@ public class CoverageConfigurable extends SettingsEditor<RunConfigurationBase> {
@Override
protected void applyEditorTo(@NotNull final RunConfigurationBase runConfiguration) throws ConfigurationException {
final JavaCoverageEnabledConfiguration configuration = (JavaCoverageEnabledConfiguration)CoverageEnabledConfiguration.getOrCreate(runConfiguration);
configuration.setCoveragePatterns(myClassFilterEditor.getFilters());
ClassFilter[] newCoveragePatterns = ArrayUtil.mergeArrays(myClassFilterEditor.getFilters(), myExcludeClassFilterEditor.getFilters());
ClassFilter[] oldCoveragePatterns = configuration.getCoveragePatterns();
//apply new order if something else was changed as well
if (newCoveragePatterns.length != oldCoveragePatterns.length ||
!ContainerUtil.newHashSet(newCoveragePatterns).equals(ContainerUtil.newHashSet(oldCoveragePatterns))) {
configuration.setCoveragePatterns(newCoveragePatterns);
}
configuration.setCoverageRunner(getSelectedRunner());
configuration.setTrackPerTestCoverage(myTrackPerTestCoverageCb.isSelected());
configuration.setSampling(mySamplingRb.isSelected());
@@ -243,12 +256,16 @@ public class CoverageConfigurable extends SettingsEditor<RunConfigurationBase> {
result.add(myRunnerPanel, gc);
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(IdeBorderFactory.createTitledBorder(ExecutionBundle.message("record.coverage.filters.title"), false));
myClassFilterEditor = new MyClassFilterEditor(myProject);
final GridBagConstraints bagConstraints =
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
JBUI.emptyInsets(), 0, 0);
panel.add(new TitledSeparator(ExecutionBundle.message("record.coverage.filters.title")), bagConstraints);
myClassFilterEditor = new MyClassFilterEditor(myProject);
panel.add(myClassFilterEditor, bagConstraints);
panel.add(new TitledSeparator(ExecutionBundle.message("exclude.coverage.filters.title")), bagConstraints);
myExcludeClassFilterEditor = new MyClassFilterEditor(myProject);
panel.add(myExcludeClassFilterEditor, bagConstraints);
bagConstraints.weighty = 0;
myTrackTestSourcesCb = new JCheckBox("Enable coverage in test folders");