vcs: remove wrongful generics

We can't give any warranties on actual type of ChangesBrowserNode,
because we do not control actual tree building from List<T>.
Root node and "collapsed" FilePath nodes might violate this assumption
even in the simplest cases.
This commit is contained in:
Aleksey Pivovarov
2017-09-18 15:20:29 +03:00
parent 2e1ed04c92
commit 7c5a56dda1
9 changed files with 34 additions and 36 deletions
@@ -135,11 +135,11 @@ public class DirectoryHistoryDialog extends HistoryDialog<DirectoryHistoryDialog
}
@Override
protected List<Change> getSelectedObjects(ChangesBrowserNode node) {
protected List<Change> getSelectedObjects(ChangesBrowserNode<?> node) {
return node.getAllChangesUnder();
}
protected Change getLeadSelectedObject(final ChangesBrowserNode node) {
protected Change getLeadSelectedObject(final ChangesBrowserNode<?> node) {
final Object o = node.getUserObject();
if (o instanceof Change) {
return (Change)o;
@@ -18,7 +18,6 @@ package com.intellij.openapi.vcs.changes.conflicts;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
@@ -63,12 +62,12 @@ public class MoveChangesDialog extends DialogWrapper {
}
@Override
protected List<Change> getSelectedObjects(ChangesBrowserNode<Change> node) {
protected List<Change> getSelectedObjects(ChangesBrowserNode<?> node) {
return node.getAllChangesUnder();
}
@Override
protected Change getLeadSelectedObject(ChangesBrowserNode node) {
protected Change getLeadSelectedObject(ChangesBrowserNode<?> node) {
final Object o = node.getUserObject();
if (o instanceof Change) {
return (Change) o;
@@ -585,13 +585,13 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
}
@Override
protected List<AbstractFilePatchInProgress.PatchChange> getSelectedObjects(ChangesBrowserNode<AbstractFilePatchInProgress.PatchChange> node) {
protected List<AbstractFilePatchInProgress.PatchChange> getSelectedObjects(ChangesBrowserNode<?> node) {
final List<Change> under = node.getAllChangesUnder();
return map(under, AbstractFilePatchInProgress.PatchChange.class::cast);
}
@Override
protected AbstractFilePatchInProgress.PatchChange getLeadSelectedObject(ChangesBrowserNode node) {
protected AbstractFilePatchInProgress.PatchChange getLeadSelectedObject(ChangesBrowserNode<?> node) {
final Object o = node.getUserObject();
if (o instanceof AbstractFilePatchInProgress.PatchChange) {
return (AbstractFilePatchInProgress.PatchChange)o;
@@ -600,7 +600,7 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
}
@Override
protected boolean isNodeEnabled(ChangesBrowserNode node) {
protected boolean isNodeEnabled(ChangesBrowserNode<?> node) {
boolean enabled = super.isNodeEnabled(node);
Object value = node.getUserObject();
if (value instanceof AbstractFilePatchInProgress.PatchChange) {
@@ -50,12 +50,12 @@ public class ChangesBrowser extends ChangesBrowserBase<Change> {
}
@NotNull
protected List<Change> getSelectedObjects(@NotNull final ChangesBrowserNode<Change> node) {
protected List<Change> getSelectedObjects(@NotNull final ChangesBrowserNode<?> node) {
return node.getAllChangesUnder();
}
@Nullable
protected Change getLeadSelectedObject(@NotNull final ChangesBrowserNode node) {
protected Change getLeadSelectedObject(@NotNull final ChangesBrowserNode<?> node) {
final Object o = node.getUserObject();
if (o instanceof Change) {
return (Change)o;
@@ -116,12 +116,12 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
return ChangesBrowserBase.this.buildTreeModel(changes, changeNodeDecorator, isShowFlatten());
}
protected List<T> getSelectedObjects(final ChangesBrowserNode<T> node) {
protected List<T> getSelectedObjects(final ChangesBrowserNode<?> node) {
return ChangesBrowserBase.this.getSelectedObjects(node);
}
@Nullable
protected T getLeadSelectedObject(final ChangesBrowserNode node) {
protected T getLeadSelectedObject(final ChangesBrowserNode<?> node) {
return ChangesBrowserBase.this.getLeadSelectedObject(node);
}
@@ -151,10 +151,10 @@ public abstract class ChangesBrowserBase<T> extends JPanel implements TypeSafeDa
protected abstract DefaultTreeModel buildTreeModel(final List<T> changes, ChangeNodeDecorator changeNodeDecorator, boolean showFlatten);
@NotNull
protected abstract List<T> getSelectedObjects(@NotNull ChangesBrowserNode<T> node);
protected abstract List<T> getSelectedObjects(@NotNull ChangesBrowserNode<?> node);
@Nullable
protected abstract T getLeadSelectedObject(@NotNull ChangesBrowserNode node);
protected abstract T getLeadSelectedObject(@NotNull ChangesBrowserNode<?> node);
@NotNull
protected Runnable getDoubleClickHandler() {
@@ -292,7 +292,7 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
return;
}
TreeUtil.expandAll(ChangesTreeList.this);
TreeUtil.expandAll(this);
int selectedTreeRow = -1;
@@ -332,7 +332,7 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
if (selectedTreeRow >= 0) {
setSelectionRow(selectedTreeRow);
}
TreeUtil.showRowCentered(ChangesTreeList.this, selectedTreeRow, false);
TreeUtil.showRowCentered(this, selectedTreeRow, false);
}
private int findRowContainingFile(@NotNull TreeNode root, @NotNull final VirtualFile toSelect) {
@@ -390,7 +390,6 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
else {
LinkedHashSet<T> changes = ContainerUtil.newLinkedHashSet();
for (TreePath path : paths) {
//noinspection unchecked
changes.addAll(getSelectedObjects((ChangesBrowserNode)path.getLastPathComponent()));
}
return ContainerUtil.newArrayList(changes);
@@ -404,10 +403,10 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
return getChanges();
}
protected abstract List<T> getSelectedObjects(final ChangesBrowserNode<T> node);
protected abstract List<T> getSelectedObjects(final ChangesBrowserNode<?> node);
@Nullable
protected abstract T getLeadSelectedObject(final ChangesBrowserNode node);
protected abstract T getLeadSelectedObject(final ChangesBrowserNode<?> node);
@Nullable
public T getHighestLeadSelection() {
@@ -415,15 +414,15 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
if (path == null) {
return null;
}
//noinspection unchecked
return getLeadSelectedObject((ChangesBrowserNode<T>)path.getLastPathComponent());
return getLeadSelectedObject((ChangesBrowserNode)path.getLastPathComponent());
}
@Nullable
public T getLeadSelection() {
final TreePath path = getSelectionPath();
//noinspection unchecked
return path == null ? null : ContainerUtil.getFirstItem(getSelectedObjects(((ChangesBrowserNode<T>)path.getLastPathComponent())));
return path == null ? null : ContainerUtil.getFirstItem(getSelectedObjects(((ChangesBrowserNode)path.getLastPathComponent())));
}
@NotNull
@@ -565,7 +564,7 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
@SuppressWarnings("unchecked")
CheckboxTree.NodeState state = getNodeStatus((ChangesBrowserNode)value);
myCheckBox.setSelected(state != CheckboxTree.NodeState.CLEAR);
//noinspection unchecked
myCheckBox.setEnabled(tree.isEnabled() && isNodeEnabled((ChangesBrowserNode)value));
revalidate();
@@ -583,7 +582,7 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
}
private CheckboxTree.NodeState getNodeStatus(ChangesBrowserNode<T> node) {
private CheckboxTree.NodeState getNodeStatus(ChangesBrowserNode<?> node) {
boolean hasIncluded = false;
boolean hasExcluded = false;
@@ -601,7 +600,7 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
return CheckboxTree.NodeState.CLEAR;
}
protected boolean isNodeEnabled(ChangesBrowserNode<T> node) {
protected boolean isNodeEnabled(ChangesBrowserNode<?> node) {
return getNodeStatus(node) != CheckboxTree.NodeState.PARTIAL;
}
@@ -635,10 +634,10 @@ public abstract class ChangesTreeList<T> extends Tree implements TypeSafeDataPro
HashSet<T> changesSet = new HashSet<>(changes);
final List<TreePath> treeSelection = new ArrayList<>(changes.size());
TreeUtil.traverse(getRoot(), node -> {
@SuppressWarnings("unchecked")
final T change = (T) ((DefaultMutableTreeNode) node).getUserObject();
if (changesSet.contains(change)) {
treeSelection.add(new TreePath(((DefaultMutableTreeNode) node).getPath()));
DefaultMutableTreeNode mutableNode = (DefaultMutableTreeNode)node;
//noinspection SuspiciousMethodCalls
if (changesSet.contains(mutableNode.getUserObject())) {
treeSelection.add(new TreePath(mutableNode.getPath()));
}
return true;
});
@@ -35,12 +35,12 @@ public class FilePathChangesTreeList extends ChangesTreeList<FilePath> {
return TreeModelBuilder.buildFromFilePaths(myProject, isShowFlatten(), changes);
}
protected List<FilePath> getSelectedObjects(final ChangesBrowserNode<FilePath> node) {
protected List<FilePath> getSelectedObjects(final ChangesBrowserNode<?> node) {
return node.getAllFilePathsUnder();
}
@Nullable
protected FilePath getLeadSelectedObject(final ChangesBrowserNode node) {
protected FilePath getLeadSelectedObject(final ChangesBrowserNode<?> node) {
Object userObject = node.getUserObject();
return userObject instanceof FilePath ? (FilePath)userObject : null;
}
@@ -204,7 +204,7 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase<Object> {
@NotNull
@Override
protected List<Object> getSelectedObjects(@NotNull ChangesBrowserNode<Object> node) {
protected List<Object> getSelectedObjects(@NotNull ChangesBrowserNode<?> node) {
List<Object> result = ContainerUtil.newArrayList();
result.addAll(node.getAllChangesUnder());
@@ -217,7 +217,7 @@ public class MultipleChangeListBrowser extends ChangesBrowserBase<Object> {
@Nullable
@Override
protected Object getLeadSelectedObject(@NotNull ChangesBrowserNode node) {
protected Object getLeadSelectedObject(@NotNull ChangesBrowserNode<?> node) {
Object result = null;
Object userObject = node.getUserObject();
@@ -105,11 +105,11 @@ public class SelectFilesDialog extends AbstractSelectFilesDialog<VirtualFile> {
return TreeModelBuilder.buildFromVirtualFiles(myProject, isShowFlatten(), changes);
}
protected List<VirtualFile> getSelectedObjects(final ChangesBrowserNode node) {
protected List<VirtualFile> getSelectedObjects(final ChangesBrowserNode<?> node) {
return node.getAllFilesUnder();
}
protected VirtualFile getLeadSelectedObject(final ChangesBrowserNode node) {
protected VirtualFile getLeadSelectedObject(final ChangesBrowserNode<?> node) {
final Object o = node.getUserObject();
if (o instanceof VirtualFile) {
return (VirtualFile) o;