mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cleanup
This commit is contained in:
@@ -17,6 +17,7 @@ package com.intellij.util.containers;
|
||||
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.TObjectHashingStrategy;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
@@ -27,9 +28,9 @@ public final class WeakValueHashMap<K,V> implements Map<K,V>{
|
||||
private final ReferenceQueue<V> myQueue = new ReferenceQueue<V>();
|
||||
|
||||
private static class MyReference<K,T> extends WeakReference<T> {
|
||||
final K key;
|
||||
private final K key;
|
||||
|
||||
public MyReference(K key, T referent, ReferenceQueue<? super T> q) {
|
||||
private MyReference(K key, T referent, ReferenceQueue<? super T> q) {
|
||||
super(referent, q);
|
||||
this.key = key;
|
||||
}
|
||||
@@ -39,7 +40,7 @@ public final class WeakValueHashMap<K,V> implements Map<K,V>{
|
||||
myMap = new THashMap<K, MyReference<K,V>>();
|
||||
}
|
||||
|
||||
public WeakValueHashMap(TObjectHashingStrategy<K> strategy) {
|
||||
public WeakValueHashMap(@NotNull TObjectHashingStrategy<K> strategy) {
|
||||
myMap = new THashMap<K, MyReference<K,V>>(strategy);
|
||||
}
|
||||
|
||||
@@ -49,58 +50,71 @@ public final class WeakValueHashMap<K,V> implements Map<K,V>{
|
||||
if (ref == null) {
|
||||
return;
|
||||
}
|
||||
if (myMap.get(ref.key) == ref){
|
||||
myMap.remove(ref.key);
|
||||
@SuppressWarnings("unchecked")
|
||||
K key = (K)ref.key;
|
||||
if (myMap.get(key) == ref){
|
||||
myMap.remove(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public V get(Object key) {
|
||||
MyReference<K,V> ref = myMap.get(key);
|
||||
if (ref == null) return null;
|
||||
return ref.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public V put(K key, V value) {
|
||||
processQueue();
|
||||
MyReference<K,V> oldRef = myMap.put(key, new MyReference<K,V>(key, value, myQueue));
|
||||
return oldRef != null ? oldRef.get() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public V remove(Object key) {
|
||||
processQueue();
|
||||
MyReference<K,V> ref = myMap.remove(key);
|
||||
return ref != null ? ref.get() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putAll(Map<? extends K, ? extends V> t) {
|
||||
throw new RuntimeException("method not implemented");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
myMap.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return myMap.size(); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return myMap.isEmpty(); //?
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsKey(Object key) {
|
||||
return get(key) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsValue(Object value) {
|
||||
throw new RuntimeException("method not implemented");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<K> keySet() {
|
||||
return myMap.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<V> values() {
|
||||
List<V> result = new ArrayList<V>();
|
||||
final Collection<MyReference<K, V>> refs = myMap.values();
|
||||
@@ -113,6 +127,7 @@ public final class WeakValueHashMap<K,V> implements Map<K,V>{
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Entry<K, V>> entrySet() {
|
||||
throw new RuntimeException("method not implemented");
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class FilePathImpl implements FilePath {
|
||||
this(virtualParent, name, isDirectory, null, forDeleted);
|
||||
}
|
||||
|
||||
public FilePathImpl(final File file, final boolean isDirectory) {
|
||||
public FilePathImpl(@NotNull File file, final boolean isDirectory) {
|
||||
myFile = file;
|
||||
myName = file.getName();
|
||||
myIsDirectory = isDirectory;
|
||||
@@ -90,7 +90,8 @@ public class FilePathImpl implements FilePath {
|
||||
|
||||
if (getVirtualFile() != null && subPath.indexOf('/') == -1 && subPath.indexOf('\\') == -1) {
|
||||
return new FilePathImpl(getVirtualFile(), subPath, isDirectory, true);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return new FilePathImpl(new File(getIOFile(), subPath), isDirectory);
|
||||
}
|
||||
}
|
||||
@@ -105,15 +106,16 @@ public class FilePathImpl implements FilePath {
|
||||
}
|
||||
else {
|
||||
if (! isSpecialName(myName) && ! isSpecialName(((FilePath)o).getName()) &&
|
||||
(! Comparing.equal(myName, ((FilePath)o).getName()))) return false;
|
||||
! Comparing.equal(myName, ((FilePath)o).getName())) return false;
|
||||
return myFile.equals(((FilePath)o).getIOFile());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isSpecialName(final String name) {
|
||||
private static boolean isSpecialName(final String name) {
|
||||
return ".".equals(name) || "..".equals(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
if (!myNonLocal) {
|
||||
if (myVirtualParent == null) {
|
||||
@@ -125,12 +127,14 @@ public class FilePathImpl implements FilePath {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hardRefresh() {
|
||||
if (! myNonLocal && (myVirtualFile == null || ! myVirtualFile.isValid())) {
|
||||
myVirtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(myFile);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath() {
|
||||
final VirtualFile virtualFile = myVirtualFile;
|
||||
if (virtualFile != null && virtualFile.isValid()) {
|
||||
@@ -145,6 +149,7 @@ public class FilePathImpl implements FilePath {
|
||||
myIsDirectory = isDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDirectory() {
|
||||
if (myVirtualFile == null) {
|
||||
return myIsDirectory;
|
||||
@@ -154,6 +159,7 @@ public class FilePathImpl implements FilePath {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUnder(FilePath parent, boolean strict) {
|
||||
if (myVirtualFile != null && parent.getVirtualFile() != null) {
|
||||
return VfsUtil.isAncestor(parent.getVirtualFile(), myVirtualFile, strict);
|
||||
@@ -161,6 +167,7 @@ public class FilePathImpl implements FilePath {
|
||||
return FileUtil.isAncestor(parent.getIOFile(), getIOFile(), strict);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FilePath getParentPath() {
|
||||
if (myVirtualParent != null && myVirtualParent.isValid()) {
|
||||
return new FilePathImpl(myVirtualParent);
|
||||
@@ -177,6 +184,7 @@ public class FilePathImpl implements FilePath {
|
||||
return new FilePathImpl(new File(path.substring(0, pos)), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public VirtualFile getVirtualFile() {
|
||||
if (myVirtualFile != null && !myVirtualFile.isValid()) {
|
||||
@@ -185,6 +193,7 @@ public class FilePathImpl implements FilePath {
|
||||
return myVirtualFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public VirtualFile getVirtualFileParent() {
|
||||
if (myVirtualParent != null && !myVirtualParent.isValid()) {
|
||||
@@ -193,15 +202,18 @@ public class FilePathImpl implements FilePath {
|
||||
return myVirtualParent;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public File getIOFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPresentableUrl() {
|
||||
if (myVirtualFile == null) {
|
||||
return myFile.getAbsolutePath();
|
||||
@@ -211,18 +223,21 @@ public class FilePathImpl implements FilePath {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Document getDocument() {
|
||||
if ((myVirtualFile == null) || (myVirtualFile.getFileType().isBinary())) {
|
||||
if (myVirtualFile == null || myVirtualFile.getFileType().isBinary()) {
|
||||
return null;
|
||||
}
|
||||
return FileDocumentManager.getInstance().getDocument(myVirtualFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Charset getCharset() {
|
||||
return getCharset(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Charset getCharset(Project project) {
|
||||
// try to find existing virtual file
|
||||
VirtualFile existing = myVirtualFile != null && myVirtualFile.isValid() ? myVirtualFile : null;
|
||||
@@ -248,6 +263,7 @@ public class FilePathImpl implements FilePath {
|
||||
return e.getDefaultCharset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileType getFileType() {
|
||||
return myVirtualFile != null ? myVirtualFile.getFileType() : FileTypeManager.getInstance().getFileTypeByFileName(myFile.getName());
|
||||
}
|
||||
@@ -346,6 +362,7 @@ public class FilePathImpl implements FilePath {
|
||||
return "FilePath[" + myFile + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNonLocal() {
|
||||
return myNonLocal;
|
||||
}
|
||||
|
||||
+7
-5
@@ -23,6 +23,7 @@ import com.intellij.openapi.vcs.changes.ChangeListManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -30,19 +31,20 @@ import com.intellij.util.PlatformIcons;
|
||||
public class ChangesBrowserFileNode extends ChangesBrowserNode<VirtualFile> {
|
||||
private final Project myProject;
|
||||
|
||||
public ChangesBrowserFileNode(Project project, VirtualFile userObject) {
|
||||
public ChangesBrowserFileNode(Project project, @NotNull VirtualFile userObject) {
|
||||
super(userObject);
|
||||
myProject = project;
|
||||
if (!userObject.isDirectory()) {
|
||||
myCount = 1;
|
||||
} else {
|
||||
if (userObject.isDirectory()) {
|
||||
myDirectoryCount = 1;
|
||||
}
|
||||
else {
|
||||
myCount = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isDirectory() {
|
||||
return (getUserObject()).isDirectory() &&
|
||||
return getUserObject().isDirectory() &&
|
||||
FileStatusManager.getInstance(myProject).getStatus(getUserObject()) != FileStatus.NOT_CHANGED;
|
||||
}
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ public class ChangesBrowserNode<T> extends DefaultMutableTreeNode {
|
||||
return new ChangesBrowserNode(userObject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insert(MutableTreeNode newChild, int childIndex) {
|
||||
super.insert(newChild, childIndex);
|
||||
myCount = -1;
|
||||
@@ -233,6 +234,7 @@ public class ChangesBrowserNode<T> extends DefaultMutableTreeNode {
|
||||
return userObject == null ? "" : userObject.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getUserObject() {
|
||||
//noinspection unchecked
|
||||
return (T) userObject;
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.intellij.ide.CopyProvider;
|
||||
import com.intellij.ide.dnd.*;
|
||||
import com.intellij.ide.util.treeView.TreeState;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileChooser.actions.VirtualFileDeleteProvider;
|
||||
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -28,7 +27,7 @@ import com.intellij.openapi.util.Trinity;
|
||||
import com.intellij.openapi.vcs.*;
|
||||
import com.intellij.openapi.vcs.changes.*;
|
||||
import com.intellij.openapi.vcs.changes.issueLinks.TreeLinkMouseListener;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.PopupHandler;
|
||||
import com.intellij.ui.SmartExpander;
|
||||
@@ -59,8 +58,6 @@ import java.util.List;
|
||||
* @author max
|
||||
*/
|
||||
public class ChangesListView extends Tree implements TypeSafeDataProvider, AdvancedDnDSource {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.ui.ChangesListView");
|
||||
|
||||
private ChangesListView.DropTarget myDropTarget;
|
||||
private DnDManager myDndManager;
|
||||
private ChangeListOwner myDragOwner;
|
||||
@@ -92,6 +89,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
new TreeLinkMouseListener(new ChangesBrowserNodeRenderer(myProject, false, false)).installOn(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DefaultTreeModel getModel() {
|
||||
return (DefaultTreeModel)super.getModel();
|
||||
}
|
||||
@@ -105,6 +103,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
myDndManager.registerTarget(myDropTarget, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (myDropTarget != null) {
|
||||
myDndManager.unregisterSource(this);
|
||||
@@ -175,6 +174,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void calcData(DataKey key, DataSink sink) {
|
||||
if (key == VcsDataKeys.CHANGES) {
|
||||
sink.put(VcsDataKeys.CHANGES, getSelectedChanges());
|
||||
@@ -233,7 +233,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
else if (key == VcsDataKeys.CHANGES_IN_LIST_KEY) {
|
||||
final TreePath selectionPath = getSelectionPath();
|
||||
if (selectionPath != null && selectionPath.getPathCount() > 1) {
|
||||
ChangesBrowserNode firstNode = (ChangesBrowserNode)selectionPath.getPathComponent(1);
|
||||
ChangesBrowserNode<?> firstNode = (ChangesBrowserNode)selectionPath.getPathComponent(1);
|
||||
if (firstNode instanceof ChangesBrowserChangeListNode) {
|
||||
final List<Change> list = firstNode.getAllChangesUnder();
|
||||
sink.put(VcsDataKeys.CHANGES_IN_LIST_KEY, list);
|
||||
@@ -262,7 +262,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
if (path.getPathCount() > 1) {
|
||||
ChangesBrowserNode firstNode = (ChangesBrowserNode)path.getPathComponent(1);
|
||||
if (tag == null || firstNode.getUserObject() == tag) {
|
||||
ChangesBrowserNode node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
ChangesBrowserNode<?> node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
files.addAll(node.getAllFilesUnder());
|
||||
}
|
||||
}
|
||||
@@ -279,7 +279,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
if (path.getPathCount() > 1) {
|
||||
ChangesBrowserNode firstNode = (ChangesBrowserNode)path.getPathComponent(1);
|
||||
if (tag == null || firstNode.getUserObject() == tag) {
|
||||
ChangesBrowserNode node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
ChangesBrowserNode<?> node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
files.addAll(node.getAllFilePathsUnder());
|
||||
}
|
||||
}
|
||||
@@ -296,7 +296,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
if (path.getPathCount() > 1) {
|
||||
ChangesBrowserNode firstNode = (ChangesBrowserNode)path.getPathComponent(1);
|
||||
if (firstNode.getUserObject() == TreeModelBuilder.LOCALLY_DELETED_NODE) {
|
||||
ChangesBrowserNode node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
ChangesBrowserNode<?> node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
final List<LocallyDeletedChange> objectsUnder = node.getAllObjectsUnder(LocallyDeletedChange.class);
|
||||
files.addAll(objectsUnder);
|
||||
}
|
||||
@@ -325,7 +325,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
|
||||
files.addAll(getSelectedVirtualFiles(null));
|
||||
|
||||
return VfsUtil.toVirtualFileArray(files);
|
||||
return VfsUtilCore.toVirtualFileArray(files);
|
||||
}
|
||||
|
||||
protected boolean haveSelectedFileType(final Object tag) {
|
||||
@@ -395,13 +395,13 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
}
|
||||
|
||||
for (TreePath path : paths) {
|
||||
ChangesBrowserNode node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
ChangesBrowserNode<?> node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
changes.addAll(node.getAllChangesUnder());
|
||||
}
|
||||
|
||||
if (changes.size() == 0) {
|
||||
if (changes.isEmpty()) {
|
||||
final List<VirtualFile> selectedModifiedWithoutEditing = getSelectedModifiedWithoutEditing();
|
||||
if (selectedModifiedWithoutEditing != null && selectedModifiedWithoutEditing.size() > 0) {
|
||||
if (selectedModifiedWithoutEditing != null && !selectedModifiedWithoutEditing.isEmpty()) {
|
||||
for(VirtualFile file: selectedModifiedWithoutEditing) {
|
||||
AbstractVcs vcs = ProjectLevelVcsManager.getInstance(myProject).getVcsFor(file);
|
||||
if (vcs == null) continue;
|
||||
@@ -451,6 +451,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
PopupHandler.installPopupHandler(this, myMenuGroup, ActionPlaces.CHANGES_VIEW_POPUP, ActionManager.getInstance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUI() {
|
||||
super.updateUI();
|
||||
if (myMenuGroup != null) {
|
||||
@@ -577,6 +578,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
}
|
||||
|
||||
public class DropTarget implements DnDTarget {
|
||||
@Override
|
||||
public boolean update(DnDEvent aEvent) {
|
||||
aEvent.hideHighlighter();
|
||||
aEvent.setDropPossible(false, "");
|
||||
@@ -614,6 +616,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drop(DnDEvent aEvent) {
|
||||
Object attached = aEvent.getAttachedObject();
|
||||
if (!(attached instanceof ChangeListDragBean)) return;
|
||||
@@ -625,9 +628,11 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanUpOnLeave() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDraggedImage(Image image, Point dropPoint, Point imageOffset) {
|
||||
}
|
||||
}
|
||||
@@ -645,39 +650,47 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
}
|
||||
|
||||
private static class NodeToTextConvertor implements Convertor<TreePath, String> {
|
||||
@Override
|
||||
public String convert(final TreePath path) {
|
||||
ChangesBrowserNode node = (ChangesBrowserNode)path.getLastPathComponent();
|
||||
return node.getTextPresentation();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canStartDragging(DnDAction action, Point dragOrigin) {
|
||||
return action == DnDAction.MOVE &&
|
||||
(getSelectedChanges().length > 0 || getSelectedUnversionedFiles().size() > 0 || getSelectedIgnoredFiles().size() > 0);
|
||||
(getSelectedChanges().length > 0 || !getSelectedUnversionedFiles().isEmpty() || !getSelectedIgnoredFiles().isEmpty());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DnDDragStartBean startDragging(DnDAction action, Point dragOrigin) {
|
||||
return new DnDDragStartBean(new ChangeListDragBean(this, getSelectedChanges(), getSelectedUnversionedFiles(),
|
||||
getSelectedIgnoredFiles()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Pair<Image, Point> createDraggedImage(DnDAction action, Point dragOrigin) {
|
||||
final Image image = DragImageFactory.createImage(this);
|
||||
return new Pair<Image, Point>(image, new Point(-image.getWidth(null), -image.getHeight(null)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dragDropEnd() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropActionChanged(final int gestureModifiers) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public JComponent getComponent() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processMouseEvent(final MouseEvent e) {
|
||||
if (MouseEvent.MOUSE_RELEASED == e.getID() && !isSelectionEmpty() && !e.isShiftDown() && !e.isControlDown() &&
|
||||
!e.isMetaDown() && !e.isPopupTrigger()) {
|
||||
@@ -694,10 +707,12 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, Advan
|
||||
super.processMouseEvent(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOverSelection(final Point point) {
|
||||
return TreeUtil.isOverSelection(this, point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dropSelectionButUnderPoint(final Point point) {
|
||||
TreeUtil.dropSelectionButUnderPoint(this, point);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
import com.intellij.vcsUtil.VcsUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
@@ -68,6 +69,7 @@ public class TreeModelBuilder {
|
||||
final ChangesGroupingPolicy policy = createGroupingPolicy();
|
||||
for (final Change change : changes) {
|
||||
insertChangeNode(change, policy, root, new Computable<ChangesBrowserNode>() {
|
||||
@Override
|
||||
public ChangesBrowserNode compute() {
|
||||
return new ChangesBrowserChangeNode(myProject, change, changeNodeDecorator);
|
||||
}
|
||||
@@ -92,7 +94,7 @@ public class TreeModelBuilder {
|
||||
return myPolicy;
|
||||
}
|
||||
|
||||
public DefaultTreeModel buildModelFromFiles(final List<VirtualFile> files) {
|
||||
public DefaultTreeModel buildModelFromFiles(@NotNull List<VirtualFile> files) {
|
||||
buildVirtualFiles(files, null);
|
||||
collapseDirectories(model, root);
|
||||
sortNodes();
|
||||
@@ -119,6 +121,7 @@ public class TreeModelBuilder {
|
||||
myReporter.report(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preDecorate(Change change, ChangesBrowserNodeRenderer renderer, boolean showFlatten) {
|
||||
}
|
||||
}
|
||||
@@ -129,7 +132,8 @@ public class TreeModelBuilder {
|
||||
final List<VirtualFile> modifiedWithoutEditing,
|
||||
final MultiMap<String, VirtualFile> switchedFiles,
|
||||
@Nullable Map<VirtualFile, String> switchedRoots,
|
||||
@Nullable final List<VirtualFile> ignoredFiles, @Nullable final List<VirtualFile> lockedFolders,
|
||||
@Nullable final List<VirtualFile> ignoredFiles,
|
||||
@Nullable final List<VirtualFile> lockedFolders,
|
||||
@Nullable final Map<VirtualFile, LogicalLock> logicallyLockedFiles) {
|
||||
resetGrouping();
|
||||
buildModel(changeLists);
|
||||
@@ -139,7 +143,7 @@ public class TreeModelBuilder {
|
||||
buildVirtualFiles(modifiedWithoutEditing, ChangesBrowserNode.MODIFIED_WITHOUT_EDITING_TAG);
|
||||
}
|
||||
final boolean manyUnversioned = unversionedFiles.getSecond() > unversionedFiles.getFirst().size();
|
||||
if (manyUnversioned || (! unversionedFiles.getFirst().isEmpty())) {
|
||||
if (manyUnversioned || ! unversionedFiles.getFirst().isEmpty()) {
|
||||
resetGrouping();
|
||||
|
||||
if (manyUnversioned) {
|
||||
@@ -149,7 +153,7 @@ public class TreeModelBuilder {
|
||||
buildVirtualFiles(unversionedFiles.getFirst(), ChangesBrowserNode.UNVERSIONED_FILES_TAG);
|
||||
}
|
||||
}
|
||||
if (switchedRoots != null && (! switchedRoots.isEmpty())) {
|
||||
if (switchedRoots != null && ! switchedRoots.isEmpty()) {
|
||||
resetGrouping();
|
||||
buildSwitchedRoots(switchedRoots);
|
||||
}
|
||||
@@ -165,7 +169,7 @@ public class TreeModelBuilder {
|
||||
resetGrouping();
|
||||
buildVirtualFiles(lockedFolders, ChangesBrowserNode.LOCKED_FOLDERS_TAG);
|
||||
}
|
||||
if (logicallyLockedFiles != null && (! logicallyLockedFiles.isEmpty())) {
|
||||
if (logicallyLockedFiles != null && ! logicallyLockedFiles.isEmpty()) {
|
||||
resetGrouping();
|
||||
buildLogicallyLockedFiles(logicallyLockedFiles);
|
||||
}
|
||||
@@ -188,7 +192,7 @@ public class TreeModelBuilder {
|
||||
myPolicyInitialized = false;
|
||||
}
|
||||
|
||||
public DefaultTreeModel buildModel(List<? extends ChangeList> changeLists) {
|
||||
public DefaultTreeModel buildModel(@NotNull List<? extends ChangeList> changeLists) {
|
||||
final RemoteRevisionsCache revisionsCache = RemoteRevisionsCache.getInstance(myProject);
|
||||
for (ChangeList list : changeLists) {
|
||||
final List<Change> changes = new ArrayList<Change>(list.getChanges());
|
||||
@@ -203,6 +207,7 @@ public class TreeModelBuilder {
|
||||
final MyChangeNodeUnderChangeListDecorator decorator =
|
||||
new MyChangeNodeUnderChangeListDecorator(revisionsCache, new ChangeListRemoteState.Reporter(i, listRemoteState));
|
||||
insertChangeNode(change, policy, listNode, new Computable<ChangesBrowserNode>() {
|
||||
@Override
|
||||
public ChangesBrowserNode compute() {
|
||||
return new ChangesBrowserChangeNode(myProject, change, decorator);
|
||||
}
|
||||
@@ -220,12 +225,13 @@ public class TreeModelBuilder {
|
||||
return ourInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(Change o1, Change o2) {
|
||||
final FilePath fp1 = ChangesUtil.getFilePath(o1);
|
||||
final FilePath fp2 = ChangesUtil.getFilePath(o2);
|
||||
|
||||
final int diff = fp1.getIOFile().getPath().length() - fp2.getIOFile().getPath().length();
|
||||
return diff == 0 ? 0 : (diff < 0 ? -1 : 1);
|
||||
return diff == 0 ? 0 : diff < 0 ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,7 +244,7 @@ public class TreeModelBuilder {
|
||||
}
|
||||
} */
|
||||
|
||||
private void buildVirtualFiles(final List<VirtualFile> files, @Nullable final Object tag) {
|
||||
private void buildVirtualFiles(@NotNull List<VirtualFile> files, @Nullable final Object tag) {
|
||||
final ChangesBrowserNode baseNode = createNode(tag);
|
||||
insertFilesIntoNode(files, baseNode);
|
||||
}
|
||||
@@ -255,7 +261,7 @@ public class TreeModelBuilder {
|
||||
return baseNode;
|
||||
}
|
||||
|
||||
private void insertFilesIntoNode(final List<VirtualFile> files, ChangesBrowserNode baseNode) {
|
||||
private void insertFilesIntoNode(@NotNull List<VirtualFile> files, ChangesBrowserNode baseNode) {
|
||||
final ChangesGroupingPolicy policy = createGroupingPolicy();
|
||||
Collections.sort(files, VirtualFileHierarchicalComparator.getInstance());
|
||||
|
||||
@@ -285,7 +291,7 @@ public class TreeModelBuilder {
|
||||
assert file != null;
|
||||
// whether a folder does not matter
|
||||
final String path = file.getPath();
|
||||
final StaticFilePath pathKey = (! FileUtil.isAbsolute(path) || VcsUtil.isPathRemote(path)) ?
|
||||
final StaticFilePath pathKey = ! FileUtil.isAbsolute(path) || VcsUtil.isPathRemote(path) ?
|
||||
new StaticFilePath(false, path, null) :
|
||||
new StaticFilePath(false, new File(file.getIOFile().getPath().replace('\\', '/')).getAbsolutePath(), file.getVirtualFile());
|
||||
ChangesBrowserNode oldNode = myFoldersCache.get(pathKey.getKey());
|
||||
@@ -313,13 +319,17 @@ public class TreeModelBuilder {
|
||||
final Change change = new Change(cr, cr, FileStatus.NOT_CHANGED);
|
||||
final String branchName = switchedRoots.get(vf);
|
||||
insertChangeNode(vf, policy, rootsHeadNode, new Computable<ChangesBrowserNode>() {
|
||||
@Override
|
||||
public ChangesBrowserNode compute() {
|
||||
return new ChangesBrowserChangeNode(myProject, change, new ChangeNodeDecorator() {
|
||||
@Override
|
||||
public void decorate(Change change, SimpleColoredComponent component, boolean isShowFlatten) {
|
||||
}
|
||||
@Override
|
||||
public List<Pair<String, Stress>> stressPartsOfFileName(Change change, String parentPath) {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public void preDecorate(Change change, ChangesBrowserNodeRenderer renderer, boolean showFlatten) {
|
||||
renderer.append("[" + branchName + "] ", SimpleTextAttributes.GRAYED_BOLD_ATTRIBUTES);
|
||||
}
|
||||
@@ -363,6 +373,7 @@ public class TreeModelBuilder {
|
||||
|
||||
private Computable<ChangesBrowserNode> defaultNodeCreator(final Object change) {
|
||||
return new Computable<ChangesBrowserNode>() {
|
||||
@Override
|
||||
public ChangesBrowserNode compute() {
|
||||
return ChangesBrowserNode.create(myProject, change);
|
||||
}
|
||||
@@ -394,6 +405,7 @@ public class TreeModelBuilder {
|
||||
return ourInstance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(ChangesBrowserNode node1, ChangesBrowserNode node2) {
|
||||
final int classdiff = node1.getSortWeight() - node2.getSortWeight();
|
||||
if (classdiff != 0) return classdiff;
|
||||
|
||||
Reference in New Issue
Block a user