void (@NotNull List<? extends FilePatch> list, @NotNull final PatchBaseDirectoryDetector directoryDetector, @NotNull List<? super PatchAndVariants> candidates, @NotNull List<? super FilePatch> newOrWithoutMatches) { for (final FilePatch patch : list) { final String fileName = patch.getBeforeFileName(); if (patch.isNewFile() || (patch.getBeforeName() == null)) { newOrWithoutMatches.add(patch); continue; } final Collection<VirtualFile> files = new ArrayList<>(findFilesFromIndex(directoryDetector, fileName)); // for directories outside the project scope but under version control if (patch.getBeforeName() != null && patch.getBeforeName().startsWith("..")) { final VirtualFile relativeFile = VfsUtil.findRelativeFile(myBaseDir, getPathParts(patch.getBeforeName())); if (relativeFile != null) { files.add(relativeFile); } } if (files.isEmpty()) { newOrWithoutMatches.add(patch); } else { //files order is not defined, so get the best variant depends on it, too List<AbstractFilePatchInProgress<?>> variants = ContainerUtil.mapNotNull(files, file -> processMatch(patch, file)); if (variants.isEmpty()) { newOrWithoutMatches.add(patch); // just to be sure } else { candidates.add(new PatchAndVariants(variants)); } } } }