diff --git a/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java b/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java index eecd70be29ec..8932aa4de42c 100644 --- a/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java +++ b/plugins/coverage-common/src/com/intellij/coverage/actions/CoverageSuiteChooserDialog.java @@ -5,18 +5,19 @@ import com.intellij.CommonBundle; import com.intellij.coverage.*; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ComboBoxAction; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.ui.ValidationInfo; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.util.IconUtil; import com.intellij.util.PlatformIcons; +import com.intellij.util.containers.TreeTraversal; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NonNls; @@ -38,7 +39,6 @@ public class CoverageSuiteChooserDialog extends DialogWrapper { private final Project myProject; private final CheckboxTree mySuitesTree; private final CoverageDataManager myCoverageManager; - private static final Logger LOG = Logger.getInstance(CoverageSuiteChooserDialog.class); private final CheckedTreeNode myRootNode; private CoverageEngine myEngine; @@ -96,12 +96,27 @@ public class CoverageSuiteChooserDialog extends DialogWrapper { @Override protected void doOKAction() { final List suites = collectSelectedSuites(); - myCoverageManager - .chooseSuitesBundle(suites.isEmpty() ? null : new CoverageSuitesBundle(suites.toArray(new CoverageSuite[0]))); + myCoverageManager.chooseSuitesBundle(suites.isEmpty() ? null : new CoverageSuitesBundle(suites.toArray(new CoverageSuite[0]))); ((CoverageDataManagerImpl)myCoverageManager).addRootsToWatch(suites); super.doOKAction(); } + @NotNull + @Override + protected List doValidateAll() { + CoverageEngine engine = null; + for (CoverageSuite suite : collectSelectedSuites()) { + if (engine == null) { + engine = suite.getCoverageEngine(); + continue; + } + if (!Comparing.equal(engine, suite.getCoverageEngine())) { + return Collections.singletonList(new ValidationInfo("Cannot show coverage reports from different engines.", mySuitesTree)); + } + } + return super.doValidateAll(); + } + @NotNull @Override protected Action[] createActions() { @@ -132,7 +147,7 @@ public class CoverageSuiteChooserDialog extends DialogWrapper { private List collectSelectedSuites() { final List suites = new ArrayList<>(); - TreeUtil.traverse(myRootNode, treeNode -> { + TreeUtil.treeNodeTraverser(myRootNode).traverse(TreeTraversal.PRE_ORDER_DFS).processEach(treeNode -> { if (treeNode instanceof CheckedTreeNode && ((CheckedTreeNode)treeNode).isChecked()) { final Object userObject = ((CheckedTreeNode)treeNode).getUserObject(); if (userObject instanceof CoverageSuite) {