1 package com
.intellij
.ide
.macro
;
3 import com
.intellij
.ide
.IdeBundle
;
4 import com
.intellij
.openapi
.actionSystem
.DataConstants
;
5 import com
.intellij
.openapi
.actionSystem
.DataContext
;
6 import com
.intellij
.openapi
.actionSystem
.PlatformDataKeys
;
7 import com
.intellij
.openapi
.project
.Project
;
8 import com
.intellij
.openapi
.roots
.ProjectRootManager
;
9 import com
.intellij
.openapi
.util
.io
.FileUtil
;
10 import com
.intellij
.openapi
.vfs
.VirtualFile
;
12 public class FileDirRelativeToSourcepathMacro
extends Macro
{
13 public String
getName() {
14 return "FileDirRelativeToSourcepath";
17 public String
getDescription() {
18 return IdeBundle
.message("macro.file.dir.relative.to.sourcepath.root");
21 public String
expand(final DataContext dataContext
) {
22 final Project project
= PlatformDataKeys
.PROJECT
.getData(dataContext
);
23 if (project
== null) return null;
24 VirtualFile file
= (VirtualFile
)dataContext
.getData(DataConstants
.VIRTUAL_FILE
);
25 if (file
== null) return null;
26 if (!file
.isDirectory()) {
27 file
= file
.getParent();
28 if (file
== null) return null;
30 final VirtualFile sourceRoot
= ProjectRootManager
.getInstance(project
).getFileIndex().getSourceRootForFile(file
);
31 if (sourceRoot
== null) return null;
32 return FileUtil
.getRelativePath(getIOFile(sourceRoot
), getIOFile(file
));