Replace "ObjectsConvertor" usages with "ContainerUtil" alternatives

This commit is contained in:
Konstantin Kolosovsky
2017-03-21 18:57:17 +03:00
parent 96d3484f72
commit 37900bfdb3
14 changed files with 65 additions and 119 deletions
@@ -16,57 +16,35 @@
package com.intellij.openapi.vcs;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.NotNullFunction;
import com.intellij.util.Function;
import com.intellij.util.containers.Convertor;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static com.intellij.util.containers.ContainerUtil.map;
public class ObjectsConvertor {
public static final Convertor<FilePath, VirtualFile> FILEPATH_TO_VIRTUAL = new Convertor<FilePath, VirtualFile>() {
public VirtualFile convert(FilePath fp) {
return fp.getVirtualFile();
}
};
public static final Convertor<VirtualFile, FilePath> VIRTUAL_FILEPATH = new Convertor<VirtualFile, FilePath>() {
public FilePath convert(VirtualFile vf) {
return VcsUtil.getFilePath(vf);
}
};
public static final NotNullFunction<Object, Boolean> NOT_NULL = new NotNullFunction<Object, Boolean>() {
@NotNull
public Boolean fun(final Object o) {
return o != null;
}
};
public static List<VirtualFile> fp2vf(@NotNull final Collection<FilePath> in) {
return convert(in, FILEPATH_TO_VIRTUAL);
@NotNull
public static List<VirtualFile> fp2vf(@NotNull Collection<FilePath> in) {
return map(in, FilePath::getVirtualFile);
}
public static List<FilePath> vf2fp(@NotNull final List<VirtualFile> in) {
return convert(in, VIRTUAL_FILEPATH);
@NotNull
public static List<FilePath> vf2fp(@NotNull List<VirtualFile> in) {
return map(in, VcsUtil::getFilePath);
}
public static <T,S> List<S> convert(@NotNull final Collection<T> in, final Convertor<T,S> convertor) {
return convert(in, convertor, null);
}
public static <T,U, S extends U> List<S> convert(@NotNull final Collection<T> in, final Convertor<T,S> convertor,
@Nullable final NotNullFunction<U, Boolean> outFilter) {
final List<S> out = new ArrayList<>();
for (T t : in) {
final S converted = convertor.convert(t);
if ((outFilter != null) && (! Boolean.TRUE.equals(outFilter.fun(converted)))) continue;
out.add(converted);
}
return out;
/**
* @deprecated Use {@link com.intellij.util.containers.ContainerUtil#map(Collection, Function)}
*/
@SuppressWarnings("unused") // Required for compatibility with external plugins.
@Deprecated
@NotNull
public static <T, S> List<S> convert(@NotNull Collection<T> in, @NotNull Convertor<T, S> convertor) {
return map(in, convertor::convert);
}
}
@@ -47,7 +47,6 @@ import com.intellij.openapi.util.*;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.VcsBundle;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.changes.ChangeListManager;
@@ -82,6 +81,7 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import static com.intellij.ui.SimpleTextAttributes.STYLE_PLAIN;
import static com.intellij.util.containers.ContainerUtil.map;
public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
@@ -567,7 +567,7 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
@Override
protected List<AbstractFilePatchInProgress.PatchChange> getSelectedObjects(ChangesBrowserNode<AbstractFilePatchInProgress.PatchChange> node) {
final List<Change> under = node.getAllChangesUnder();
return ObjectsConvertor.convert(under, o -> (AbstractFilePatchInProgress.PatchChange)o);
return map(under, AbstractFilePatchInProgress.PatchChange.class::cast);
}
@Override
@@ -689,8 +689,7 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
}
private List<AbstractFilePatchInProgress.PatchChange> getAllChanges() {
return ObjectsConvertor.convert(myPatches,
AbstractFilePatchInProgress::getChange);
return map(myPatches, AbstractFilePatchInProgress::getChange);
}
private static void acceptChange(final NamedLegendStatuses nameStatuses, final AbstractFilePatchInProgress.PatchChange change) {
@@ -790,7 +789,7 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
}
private static List<AbstractFilePatchInProgress> changes2patches(final List<AbstractFilePatchInProgress.PatchChange> selectedChanges) {
return ObjectsConvertor.convert(selectedChanges, AbstractFilePatchInProgress.PatchChange::getPatchInProgress);
return map(selectedChanges, AbstractFilePatchInProgress.PatchChange::getPatchInProgress);
}
private class MapPopup extends BaseListPopupStep<VirtualFile> {
@@ -980,8 +979,7 @@ public class ApplyPatchDifferentiatedDialog extends DialogWrapper {
}
private Collection<AbstractFilePatchInProgress> getIncluded() {
return ObjectsConvertor.convert(myChangesTreeList.getIncludedChanges(),
AbstractFilePatchInProgress.PatchChange::getPatchInProgress);
return map(myChangesTreeList.getIncludedChanges(), AbstractFilePatchInProgress.PatchChange::getPatchInProgress);
}
@Nullable
@@ -24,7 +24,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager;
import com.intellij.openapi.vcs.changes.shelf.ShelvedBinaryFilePatch;
import com.intellij.openapi.vfs.VfsUtil;
@@ -32,7 +31,6 @@ import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.Convertor;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -45,6 +43,7 @@ import java.util.Iterator;
import java.util.List;
import static com.intellij.openapi.vcs.changes.patch.AutoMatchStrategy.processStipUp;
import static com.intellij.util.containers.ContainerUtil.mapNotNull;
public class MatchPatchPaths {
private static final int BIG_FILE_BOUND = 100000;
@@ -186,13 +185,7 @@ public class MatchPatchPaths {
}
else {
//files order is not defined, so get the best variant depends on it, too
final List<AbstractFilePatchInProgress> variants =
ObjectsConvertor.convert(files, new Convertor<VirtualFile, AbstractFilePatchInProgress>() {
@Override
public AbstractFilePatchInProgress convert(VirtualFile o) {
return processMatch(patch, o);
}
}, ObjectsConvertor.NOT_NULL);
List<AbstractFilePatchInProgress> variants = mapNotNull(files, file -> processMatch(patch, file));
if (variants.isEmpty()) {
newOrWithoutMatches.add(patch); // just to be sure
}
@@ -217,12 +210,7 @@ public class MatchPatchPaths {
private static void putSelected(@NotNull MultiMap<VirtualFile, AbstractFilePatchInProgress> result,
@NotNull final List<AbstractFilePatchInProgress> variants,
@NotNull AbstractFilePatchInProgress patchInProgress) {
patchInProgress.setAutoBases(ObjectsConvertor.convert(variants, new Convertor<AbstractFilePatchInProgress, VirtualFile>() {
@Override
public VirtualFile convert(AbstractFilePatchInProgress o) {
return o.getBase();
}
}, ObjectsConvertor.NOT_NULL));
patchInProgress.setAutoBases(mapNotNull(variants, AbstractFilePatchInProgress::getBase));
result.putValue(patchInProgress.getBase(), patchInProgress);
}
@@ -33,6 +33,7 @@ import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Functions;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.Convertor;
import com.intellij.util.containers.MultiMap;
@@ -41,6 +42,9 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
import static com.intellij.util.containers.ContainerUtil.map;
import static com.intellij.util.containers.ContainerUtil.mapNotNull;
public class NewMappings {
public static final Comparator<VcsDirectoryMapping> MAPPINGS_COMPARATOR = Comparator.comparing(VcsDirectoryMapping::getDirectory);
@@ -364,16 +368,13 @@ public class NewMappings {
final String vcsName = iterator.next();
final Collection<VcsDirectoryMapping> mappings = myVcsToPaths.get(vcsName);
final List<Pair<VirtualFile, VcsDirectoryMapping>> objects = ObjectsConvertor.convert(mappings,
new Convertor<VcsDirectoryMapping, Pair<VirtualFile, VcsDirectoryMapping>>() {
public Pair<VirtualFile, VcsDirectoryMapping> convert(final VcsDirectoryMapping dm) {
VirtualFile vf = lfs.findFileByPath(dm.getDirectory());
if (vf == null) {
vf = lfs.refreshAndFindFileByPath(dm.getDirectory());
}
return vf == null ? null : Pair.create(vf, dm);
List<Pair<VirtualFile, VcsDirectoryMapping>> objects = mapNotNull(mappings, dm -> {
VirtualFile vf = lfs.findFileByPath(dm.getDirectory());
if (vf == null) {
vf = lfs.refreshAndFindFileByPath(dm.getDirectory());
}
}, ObjectsConvertor.NOT_NULL);
return vf == null ? null : Pair.create(vf, dm);
});
final List<Pair<VirtualFile, VcsDirectoryMapping>> filteredFiles;
// todo static
@@ -395,13 +396,7 @@ public class NewMappings {
filteredFiles = vcs.filterUniqueRoots(objects, fileConvertor);
}
final List<VcsDirectoryMapping> filteredMappings =
ObjectsConvertor.convert(filteredFiles, new Convertor<Pair<VirtualFile, VcsDirectoryMapping>, VcsDirectoryMapping>() {
public VcsDirectoryMapping convert(final Pair<VirtualFile, VcsDirectoryMapping> o) {
return o.getSecond();
}
});
List<VcsDirectoryMapping> filteredMappings = map(filteredFiles, Functions.pairSecond());
// to calculate what had been removed
mappings.removeAll(filteredMappings);
@@ -186,8 +186,8 @@ public abstract class AbstractCommonUpdateAction extends AbstractVcsAction {
final Map<AbstractVcs, Collection<FilePath>> result = new THashMap<>();
for (Map.Entry<AbstractVcs, Collection<FilePath>> entry : resultPrep.entrySet()) {
AbstractVcs vcs = entry.getKey();
result.put(vcs, vcs.filterUniqueRoots(new ArrayList<>(entry.getValue()), ObjectsConvertor.FILEPATH_TO_VIRTUAL));
AbstractVcs<?> vcs = entry.getKey();
result.put(vcs, vcs.filterUniqueRoots(new ArrayList<>(entry.getValue()), FilePath::getVirtualFile));
}
return result;
}
@@ -18,13 +18,15 @@ package git4idea.changes;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vcs.*;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.VcsOutgoingChangesProvider;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Consumer;
import com.intellij.util.containers.Convertor;
import com.intellij.vcsUtil.VcsUtil;
import git4idea.GitBranch;
import git4idea.GitBranchesSearcher;
@@ -38,6 +40,9 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
import static com.intellij.util.Functions.identity;
import static com.intellij.util.containers.ContainerUtil.map;
public class GitOutgoingChangesProvider implements VcsOutgoingChangesProvider<CommittedChangeList> {
private final static Logger LOG = Logger.getInstance("#git4idea.changes.GitOutgoingChangesProvider");
private final Project myProject;
@@ -62,12 +67,7 @@ public class GitOutgoingChangesProvider implements VcsOutgoingChangesProvider<Co
handler.addParameters(base.asString() + "..HEAD");
}
});
return new Pair<>(base, ObjectsConvertor.convert(lists, new Convertor<GitCommittedChangeList, CommittedChangeList>() {
@Override
public CommittedChangeList convert(GitCommittedChangeList o) {
return o;
}
}));
return new Pair<>(base, map(lists, identity()));
}
@Nullable
@@ -16,10 +16,8 @@
package git4idea.history.browser;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.Convertor;
import git4idea.GitCommit;
import git4idea.history.wholeTree.AbstractHash;
import org.jetbrains.annotations.NotNull;
@@ -227,15 +225,6 @@ public class GitHeavyCommit {
myOnTracked = onTracked;
}
public List<AbstractHash> getConvertedParents() {
return ObjectsConvertor.convert(getParentsHashes(), new Convertor<String, AbstractHash>() {
@Override
public AbstractHash convert(String o) {
return AbstractHash.create(o);
}
});
}
public String getSubject() {
return mySubject;
}
@@ -17,9 +17,9 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.vcsUtil.VcsUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.zmlx.hg4idea.HgRevisionNumber;
@@ -76,7 +76,7 @@ public class HgWorkingCopyRevisionsCommand {
*/
@NotNull
public Couple<HgRevisionNumber> parents(@NotNull VirtualFile repo, @Nullable VirtualFile file, @Nullable HgRevisionNumber revision) {
return parents(repo, ObjectsConvertor.VIRTUAL_FILEPATH.convert(file), revision);
return parents(repo, VcsUtil.getFilePath(file), revision);
}
/**
@@ -14,7 +14,6 @@ package org.zmlx.hg4idea.provider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ContentRevision;
import com.intellij.openapi.vcs.diff.DiffProvider;
@@ -42,7 +41,7 @@ public class HgDiffProvider implements DiffProvider {
return null;
}
FilePath filePath = ObjectsConvertor.VIRTUAL_FILEPATH.convert(file);
FilePath filePath = VcsUtil.getFilePath(file);
return new HgWorkingCopyRevisionsCommand(project).parents(vcsRoot, filePath).first;
}
@@ -40,8 +40,8 @@ import com.intellij.openapi.vfs.LocalFileOperationsHandler;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.newvfs.RefreshQueue;
import com.intellij.util.Functions;
import com.intellij.util.ThrowableConsumer;
import com.intellij.util.containers.Convertor;
import com.intellij.util.containers.MultiMap;
import com.intellij.vcsUtil.ActionWithTempFile;
import com.intellij.vcsUtil.VcsUtil;
@@ -63,6 +63,7 @@ import java.io.IOException;
import java.util.*;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static com.intellij.util.containers.ContainerUtil.map;
public class SvnFileSystemListener extends CommandAdapter implements LocalFileOperationsHandler, Disposable {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.idea.svn.SvnFileSystemListener");
@@ -897,7 +898,7 @@ public class SvnFileSystemListener extends CommandAdapter implements LocalFileOp
if (!filesToProcess.isEmpty()) {
runInBackground(project, "Deleting files from Subversion", createDeleteRunnable(project, vcs, filesToProcess, exceptions));
}
final List<FilePath> deletedFilesFiles = ObjectsConvertor.convert(deletedFiles, o -> o.getFirst());
List<FilePath> deletedFilesFiles = map(deletedFiles, Functions.pairFirst());
for (FilePath file : deletedFilesFiles) {
final FilePath parent = file.getParentPath();
if (parent != null) {
@@ -946,10 +947,9 @@ public class SvnFileSystemListener extends CommandAdapter implements LocalFileOp
SvnVcs vcs,
VcsShowConfirmationOption.Value value,
AbstractVcsHelper vcsHelper) {
final Convertor<Pair<FilePath, WorkingCopyFormat>, FilePath> convertor = o -> o.getFirst();
Collection<FilePath> filesToProcess;
if (value == VcsShowConfirmationOption.Value.DO_ACTION_SILENTLY) {
filesToProcess = ObjectsConvertor.convert(deletedFiles, convertor);
filesToProcess = map(deletedFiles, Functions.pairFirst());
} else {
final String singleFilePrompt;
@@ -961,9 +961,9 @@ public class SvnFileSystemListener extends CommandAdapter implements LocalFileOp
else {
singleFilePrompt = SvnBundle.getString("confirmation.text.delete.file");
}
final Collection<FilePath> files = vcsHelper
.selectFilePathsToProcess(ObjectsConvertor.convert(deletedFiles, convertor), SvnBundle.message("confirmation.title.delete.multiple.files"), null,
SvnBundle.message("confirmation.title.delete.file"), singleFilePrompt, vcs.getDeleteConfirmation());
Collection<FilePath> files = vcsHelper
.selectFilePathsToProcess(map(deletedFiles, Functions.pairFirst()), SvnBundle.message("confirmation.title.delete.multiple.files"),
null, SvnBundle.message("confirmation.title.delete.file"), singleFilePrompt, vcs.getDeleteConfirmation());
filesToProcess = files == null ? null : new ArrayList<>(files);
}
return filesToProcess;
@@ -17,7 +17,6 @@ package org.jetbrains.idea.svn;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.InvokeAfterUpdateMode;
import com.intellij.openapi.vfs.VfsUtilCore;
@@ -36,6 +35,7 @@ import java.util.List;
import java.util.Set;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static com.intellij.util.containers.ContainerUtil.map;
/**
* @author Konstantin Kolosovsky.
@@ -92,8 +92,7 @@ public class SvnRootsDetector {
}
private void addNestedRoots(final boolean clearState, final Runnable callback) {
final List<VirtualFile> basicVfRoots = ObjectsConvertor.convert(myResult.myTopRoots, real -> real.getVirtualFile());
List<VirtualFile> basicVfRoots = map(myResult.myTopRoots, RootUrlInfo::getVirtualFile);
final ChangeListManager clManager = ChangeListManager.getInstance(myVcs.getProject());
if (clearState) {
@@ -97,6 +97,7 @@ import java.io.File;
import java.util.*;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static com.intellij.util.containers.ContainerUtil.map;
import static java.util.Collections.emptyList;
@SuppressWarnings({"IOResourceOpenedButNotSafelyClosed"})
@@ -799,7 +800,7 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
infos.add(new MyPair<>(vf, url.toString(), s));
}
final List<MyPair<S>> filtered = new UniqueRootsFilter().filter(infos);
final List<S> converted = ObjectsConvertor.convert(filtered, o -> o.getSrc());
List<S> converted = map(filtered, MyPair::getSrc);
if (!notMatched.isEmpty()) {
// potential bug is here: order is not kept. but seems it only occurs for cases where result is sorted after filtering so ok
converted.addAll(notMatched);
@@ -17,7 +17,6 @@ package org.jetbrains.idea.svn.branchConfig;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -34,6 +33,7 @@ import java.io.File;
import java.util.*;
import static com.intellij.openapi.vfs.VfsUtilCore.virtualToIoFile;
import static com.intellij.util.containers.ContainerUtil.map;
public class SvnBranchConfigurationNew {
private static final Logger LOG = Logger.getInstance("#org.jetbrains.idea.svn.branchConfig.SvnBranchConfigurationNew");
@@ -65,7 +65,7 @@ public class SvnBranchConfigurationNew {
public List<String> getBranchUrls() {
final ArrayList<String> result = new ArrayList<>(myBranchMap.keySet());
final List<String> cutList = ObjectsConvertor.convert(result, s -> cutEndSlash(s));
List<String> cutList = map(result, SvnBranchConfigurationNew::cutEndSlash);
Collections.sort(cutList);
return cutList;
}
@@ -26,7 +26,6 @@ import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vcs.ObjectsConvertor;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -73,6 +72,7 @@ import java.util.*;
import java.util.List;
import static com.intellij.notification.NotificationDisplayType.STICKY_BALLOON;
import static com.intellij.util.containers.ContainerUtil.map;
import static java.util.Collections.singletonList;
public class CopiesPanel {
@@ -110,9 +110,8 @@ public class CopiesPanel {
final List<WorkingCopyFormat> supportedFormats = getSupportedFormats();
Runnable runnable = () -> {
if (myCurrentInfoList != null) {
final List<OverrideEqualsWrapper<WCInfo>> newList =
ObjectsConvertor
.convert(infoList, o -> new OverrideEqualsWrapper<>(InfoEqualityPolicy.getInstance(), o), ObjectsConvertor.NOT_NULL);
List<OverrideEqualsWrapper<WCInfo>> newList =
map(infoList, info -> new OverrideEqualsWrapper<>(InfoEqualityPolicy.getInstance(), info));
if (Comparing.haveEqualElements(newList, myCurrentInfoList)) {
myRefreshLabel.setEnabled(true);