Hierarchy providers refactored
[fedora-idea.git] / lang-impl / src / com / intellij / ide / macro / FileDirRelativeToSourcepathMacro.java
blob53f9b0003ea8f6dd8f83b30e3c68a7a662900e2b
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));