diff options
Diffstat (limited to 'platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java')
-rw-r--r-- | platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java index bd97349ca0bb..ba0db4a9df1c 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/ProjectPathMacroManager.java @@ -12,47 +12,57 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.SystemIndependent; import org.jetbrains.jps.model.serialization.PathMacroUtil; +import java.util.Map; import java.util.function.Supplier; public class ProjectPathMacroManager extends PathMacroManager { - private final Supplier<@SystemIndependent String> myBasePathPointer; - private final @Nullable Supplier<@SystemIndependent String> myNamePointer; + private final @NotNull Supplier<@Nullable @SystemIndependent String> myProjectFilePathPointer; + private final @NotNull Supplier<@Nullable @SystemIndependent String> myBasePathPointer; + private final @Nullable Supplier<@NotNull @SystemIndependent String> myNamePointer; public ProjectPathMacroManager(@NotNull Project project) { super(PathMacros.getInstance()); + myProjectFilePathPointer = project::getProjectFilePath; myBasePathPointer = project::getBasePath; myNamePointer = !project.isDefault() ? project::getName : null; } @NonInjectable - private ProjectPathMacroManager(Supplier<@SystemIndependent String> basePathPointer, - @Nullable Supplier<@SystemIndependent String> namePointer) { + private ProjectPathMacroManager(@NotNull Supplier<@Nullable @SystemIndependent String> projectFilePathPointer, + @NotNull Supplier<@Nullable @SystemIndependent String> basePathPointer, + @Nullable Supplier<@NotNull @SystemIndependent String> namePointer) { super(PathMacros.getInstance()); + myProjectFilePathPointer = projectFilePathPointer; myBasePathPointer = basePathPointer; myNamePointer = namePointer; } - @NotNull @Override - public ExpandMacroToPathMap getExpandMacroMap() { + public @NotNull ExpandMacroToPathMap getExpandMacroMap() { ExpandMacroToPathMap result = super.getExpandMacroMap(); addFileHierarchyReplacements(result, PathMacroUtil.PROJECT_DIR_MACRO_NAME, myBasePathPointer.get()); if (myNamePointer != null) { result.addMacroExpand(PathMacroUtil.PROJECT_NAME_MACRO_NAME, myNamePointer.get()); } + String projectFile = myProjectFilePathPointer.get(); + if (projectFile != null) { + for (Map.Entry<String, String> entry : ProjectWidePathMacroContributor.getAllMacros(projectFile).entrySet()) { + result.addMacroExpand(entry.getKey(), entry.getValue()); + } + } return result; } - @NotNull @Override - protected ReplacePathToMacroMap computeReplacePathMap() { + protected @NotNull ReplacePathToMacroMap computeReplacePathMap() { ReplacePathToMacroMap result = super.computeReplacePathMap(); addFileHierarchyReplacements(result, PathMacroUtil.PROJECT_DIR_MACRO_NAME, myBasePathPointer.get(), null); return result; } - public static ProjectPathMacroManager createInstance(Supplier<@SystemIndependent String> basePathPointer, - @Nullable Supplier<@SystemIndependent String> namePointer) { - return new ProjectPathMacroManager(basePathPointer, namePointer); + public static ProjectPathMacroManager createInstance(@NotNull Supplier<@Nullable @SystemIndependent String> projectFilePathPointer, + @NotNull Supplier<@SystemIndependent @Nullable String> basePathPointer, + @Nullable Supplier<@SystemIndependent @NotNull String> namePointer) { + return new ProjectPathMacroManager(projectFilePathPointer, basePathPointer, namePointer); } } |