IJPL-185498 Add isDirectory parameter to FilePathIconProvider

Merge-request: IJ-MR-161288
Merged-by: Filipp Smorygo <Philipp.Smorygo@jetbrains.com>

GitOrigin-RevId: f11221d5e3ca6c4fdfcfa2ba9873700d1a1f1952
This commit is contained in:
Filipp Smorygo
2025-05-08 16:46:49 +00:00
committed by intellij-monorepo-bot
parent 2e54d8b4a8
commit 129c65214c
4 changed files with 21 additions and 5 deletions

View File

@@ -1209,7 +1209,8 @@ c:com.intellij.openapi.vcs.changes.ExternallyRenamedChange
- setRenamedOrMovedTarget(com.intellij.openapi.vcs.FilePath):V - setRenamedOrMovedTarget(com.intellij.openapi.vcs.FilePath):V
com.intellij.openapi.vcs.changes.FilePathIconProvider com.intellij.openapi.vcs.changes.FilePathIconProvider
- sf:EP_NAME:com.intellij.openapi.extensions.ExtensionPointName - sf:EP_NAME:com.intellij.openapi.extensions.ExtensionPointName
- a:getIcon(com.intellij.openapi.vcs.FilePath,com.intellij.openapi.project.Project):javax.swing.Icon - getIcon(com.intellij.openapi.vcs.FilePath,com.intellij.openapi.project.Project):javax.swing.Icon
- getIcon(com.intellij.openapi.vcs.FilePath,Z,com.intellij.openapi.project.Project):javax.swing.Icon
f:com.intellij.openapi.vcs.changes.FilePathsHelper f:com.intellij.openapi.vcs.changes.FilePathsHelper
- s:convertPath(com.intellij.openapi.vcs.FilePath):java.lang.String - s:convertPath(com.intellij.openapi.vcs.FilePath):java.lang.String
- s:convertPath(java.lang.String):java.lang.String - s:convertPath(java.lang.String):java.lang.String

View File

@@ -22,10 +22,25 @@ public interface FilePathIconProvider {
ExtensionPointName.create("com.intellij.openapi.vcs.changes.ui.filePathIconProvider"); ExtensionPointName.create("com.intellij.openapi.vcs.changes.ui.filePathIconProvider");
/** /**
* @deprecated Do not call this method directly because the `isDirectory` property of filePath is not reliable enough.
* Use {@link #getIcon(FilePath, boolean, Project)} instead.
*
* @param filePath file for which icon is shown * @param filePath file for which icon is shown
* @param project current opened project * @param project current opened project
* @return {@code null} if there is no appropriate icon for given file path * @return {@code null} if there is no appropriate icon for given file path
*/ */
@Nullable @Deprecated(forRemoval = true)
Icon getIcon(@NotNull FilePath filePath, @Nullable Project project); default @Nullable Icon getIcon(@NotNull FilePath filePath, @Nullable Project project) {
throw new UnsupportedOperationException("Implementors must override at least one of getIcon() methods");
}
/**
* @param filePath file for which icon is shown
* @param isDirectory flag that indicates if file is directory or not
* @param project current opened project
* @return {@code null} if there is no appropriate icon for given file path
*/
default @Nullable Icon getIcon(@NotNull FilePath filePath, boolean isDirectory, @Nullable Project project) {
return getIcon(filePath, project);
}
} }

View File

@@ -103,7 +103,7 @@ public class ChangesBrowserNodeRenderer extends ColoredTreeCellRenderer {
* @param isDirectory directory flag is specified explicitly, as {@link FilePath#isDirectory()} can be unreliable * @param isDirectory directory flag is specified explicitly, as {@link FilePath#isDirectory()} can be unreliable
*/ */
public void setIcon(@NotNull FilePath filePath, boolean isDirectory) { public void setIcon(@NotNull FilePath filePath, boolean isDirectory) {
Icon icon = FilePathIconProvider.EP_NAME.computeSafeIfAny(provider -> provider.getIcon(filePath, myProject)); Icon icon = FilePathIconProvider.EP_NAME.computeSafeIfAny(provider -> provider.getIcon(filePath, isDirectory, myProject));
if (icon != null) { if (icon != null) {
setIcon(icon); setIcon(icon);
return; return;

View File

@@ -102,7 +102,7 @@ class RepositoryBrowserPanel(
} }
if (file is VcsVirtualFile) { if (file is VcsVirtualFile) {
val localPath = getLocalFilePath(file) val localPath = getLocalFilePath(file)
val icon = FilePathIconProvider.EP_NAME.computeSafeIfAny { it.getIcon(localPath, project) } val icon = FilePathIconProvider.EP_NAME.computeSafeIfAny { it.getIcon(localPath, false, project) }
if (icon != null) return icon if (icon != null) return icon
} }
return FileTypeManager.getInstance().getFileTypeByFileName(file.nameSequence).icon return FileTypeManager.getInstance().getFileTypeByFileName(file.nameSequence).icon