mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
encapsulate unique vfile path calculation in a service
This commit is contained in:
@@ -1,14 +1,8 @@
|
||||
package com.intellij.openapi.fileEditor.impl;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.ProjectScope;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -158,19 +152,4 @@ public class UniqueNameBuilder<T> {
|
||||
}
|
||||
return myShortPaths.get(key);
|
||||
}
|
||||
|
||||
public static String getUniqueVirtualFilePath(Project project, VirtualFile file) {
|
||||
final Collection<VirtualFile> filesWithSameName = FilenameIndex.getVirtualFilesByName(project, file.getName(),
|
||||
ProjectScope.getProjectScope(project));
|
||||
if (filesWithSameName.size() > 1) {
|
||||
String path = project.getBasePath();
|
||||
path = path == null ? "" : FileUtil.toSystemIndependentName(path);
|
||||
UniqueNameBuilder<VirtualFile> builder = new UniqueNameBuilder<VirtualFile>(path, File.separator, 25);
|
||||
for (VirtualFile virtualFile: filesWithSameName) {
|
||||
builder.addPath(virtualFile, virtualFile.getPath());
|
||||
}
|
||||
return builder.getShortPath(file);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.intellij.openapi.fileEditor.impl;
|
||||
|
||||
import com.intellij.ide.ui.UISettings;
|
||||
import com.intellij.openapi.fileEditor.UniqueVFilePathBuilder;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -14,6 +15,6 @@ public class UniqueNameEditorTabTitleProvider implements EditorTabTitleProvider
|
||||
if (!UISettings.getInstance().SHOW_DIRECTORY_FOR_NON_UNIQUE_FILENAMES || DumbService.isDumb(project)) {
|
||||
return null;
|
||||
}
|
||||
return UniqueNameBuilder.getUniqueVirtualFilePath(project, file);
|
||||
return UniqueVFilePathBuilder.getInstance().getUniqueVirtualFilePath(project, file);
|
||||
}
|
||||
}
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package com.intellij.openapi.fileEditor.impl;
|
||||
|
||||
import com.intellij.openapi.fileEditor.UniqueVFilePathBuilder;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.ProjectScope;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class UniqueVFilePathBuilderImpl extends UniqueVFilePathBuilder {
|
||||
@Override
|
||||
public String getUniqueVirtualFilePath(Project project, VirtualFile file) {
|
||||
final Collection<VirtualFile> filesWithSameName = FilenameIndex.getVirtualFilesByName(project, file.getName(),
|
||||
ProjectScope.getProjectScope(project));
|
||||
if (filesWithSameName.size() > 1) {
|
||||
String path = project.getBasePath();
|
||||
path = path == null ? "" : FileUtil.toSystemIndependentName(path);
|
||||
UniqueNameBuilder<VirtualFile> builder = new UniqueNameBuilder<VirtualFile>(path, File.separator, 25);
|
||||
for (VirtualFile virtualFile: filesWithSameName) {
|
||||
builder.addPath(virtualFile, virtualFile.getPath());
|
||||
}
|
||||
return builder.getShortPath(file);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.intellij.openapi.fileEditor;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public abstract class UniqueVFilePathBuilder {
|
||||
private static final UniqueVFilePathBuilder DUMMY_BUILDER = new UniqueVFilePathBuilder() {
|
||||
@Override
|
||||
public String getUniqueVirtualFilePath(Project project, VirtualFile vFile) {
|
||||
return vFile.getPresentableName();
|
||||
}
|
||||
};
|
||||
|
||||
public static UniqueVFilePathBuilder getInstance() {
|
||||
final UniqueVFilePathBuilder service = ServiceManager.getService(UniqueVFilePathBuilder.class);
|
||||
if (service == null) {
|
||||
return DUMMY_BUILDER;
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
||||
public abstract String getUniqueVirtualFilePath(Project project, VirtualFile vFile);
|
||||
}
|
||||
@@ -165,6 +165,9 @@
|
||||
<applicationService serviceInterface="com.intellij.psi.search.searches.IndexPatternSearch"
|
||||
serviceImplementation="com.intellij.psi.impl.search.IndexPatternSearchImpl"/>
|
||||
|
||||
<applicationService serviceInterface="com.intellij.openapi.fileEditor.UniqueVFilePathBuilder"
|
||||
serviceImplementation="com.intellij.openapi.fileEditor.impl.UniqueVFilePathBuilderImpl"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.ui.EditorTextFieldProvider"
|
||||
serviceImplementation="com.intellij.ui.EditorTextFieldProviderImpl"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user