// Copyright 2016 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.macro;
import com.intellij.application.options.PathMacrosImpl;
import com.intellij.ide.macro.Macro;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.twitter.intellij.pants.util.PantsUtil;
import java.util.Optional;
public class FilePathRelativeToBuiltRootMacro extends Macro {
/**
* Have to use one of the names listed in {@link PathMacrosImpl#ourToolsMacros} as a workaround due to
* https://intellij-support.jetbrains.com/hc/en-us/community/posts/206103709-Custom-macro
*
* @return corresponding name of this macro
*/
@Override
public String getName() {
return "FileRelativePath";
}
@Override
public String getDescription() {
return "Relative path from build root";
}
@Override
public String expand(final DataContext dataContext) {
VirtualFile fileSelected = CommonDataKeys.VIRTUAL_FILE.getData(dataContext);
if (fileSelected == null) {
return null;
}
Optional<VirtualFile> buildRoot = PantsUtil.findBuildRoot(fileSelected);
if (!buildRoot.isPresent()) {
return null;
}
return FileUtil.getRelativePath(VfsUtil.virtualToIoFile(buildRoot.get()), VfsUtil.virtualToIoFile(fileSelected));
}
}