From 6c82bb3bae643c419ce329aef524df50e4955535 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 30 Apr 2012 18:57:18 +0200 Subject: [PATCH] encapsulate unique vfile path calculation in a service --- .../fileEditor/impl/UniqueNameBuilder.java | 21 ------------ .../UniqueNameEditorTabTitleProvider.java | 3 +- .../impl/UniqueVFilePathBuilderImpl.java | 32 +++++++++++++++++++ .../fileEditor/UniqueVFilePathBuilder.java | 27 ++++++++++++++++ .../src/META-INF/LangExtensions.xml | 3 ++ 5 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueVFilePathBuilderImpl.java create mode 100644 platform/platform-api/src/com/intellij/openapi/fileEditor/UniqueVFilePathBuilder.java diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameBuilder.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameBuilder.java index 94bdb5efe8ea..df02355ec82c 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameBuilder.java +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameBuilder.java @@ -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 { } return myShortPaths.get(key); } - - public static String getUniqueVirtualFilePath(Project project, VirtualFile file) { - final Collection filesWithSameName = FilenameIndex.getVirtualFilesByName(project, file.getName(), - ProjectScope.getProjectScope(project)); - if (filesWithSameName.size() > 1) { - String path = project.getBasePath(); - path = path == null ? "" : FileUtil.toSystemIndependentName(path); - UniqueNameBuilder builder = new UniqueNameBuilder(path, File.separator, 25); - for (VirtualFile virtualFile: filesWithSameName) { - builder.addPath(virtualFile, virtualFile.getPath()); - } - return builder.getShortPath(file); - } - return null; - } } diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameEditorTabTitleProvider.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameEditorTabTitleProvider.java index 788265503012..529d7be987b2 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameEditorTabTitleProvider.java +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueNameEditorTabTitleProvider.java @@ -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); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueVFilePathBuilderImpl.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueVFilePathBuilderImpl.java new file mode 100644 index 000000000000..092fd905400a --- /dev/null +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/UniqueVFilePathBuilderImpl.java @@ -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 filesWithSameName = FilenameIndex.getVirtualFilesByName(project, file.getName(), + ProjectScope.getProjectScope(project)); + if (filesWithSameName.size() > 1) { + String path = project.getBasePath(); + path = path == null ? "" : FileUtil.toSystemIndependentName(path); + UniqueNameBuilder builder = new UniqueNameBuilder(path, File.separator, 25); + for (VirtualFile virtualFile: filesWithSameName) { + builder.addPath(virtualFile, virtualFile.getPath()); + } + return builder.getShortPath(file); + } + return null; + } +} diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/UniqueVFilePathBuilder.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/UniqueVFilePathBuilder.java new file mode 100644 index 000000000000..7c6f95406de8 --- /dev/null +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/UniqueVFilePathBuilder.java @@ -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); +} diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 3fc36ec9d0fd..e5e671fa4bff 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -165,6 +165,9 @@ + +