7d2606001b334e3fd0460a94dc80387ca0427ad2
[idea/community.git] / platform / projectModel-impl / src / com / intellij / openapi / components / PathMacroSubstitutor.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.components;
17
18 import org.jdom.Element;
19 import org.jetbrains.annotations.NotNull;
20
21 public interface PathMacroSubstitutor {
22   String expandPath(String path);
23
24   @NotNull
25   default String collapsePath(@NotNull String text) {
26     return collapsePath(text, false);
27   }
28
29   String collapsePath(@NotNull String text, boolean recursively);
30
31   void expandPaths(@NotNull Element element);
32
33   /**
34    * Path will be collapsed only if the entire content of an attribute (tag text) is a path, if a path is a substring of an attribute value it won't be collapsed.
35    */
36   default void collapsePaths(@NotNull Element element) {
37     collapsePaths(element, false);
38   }
39
40   /**
41    * Path will be collapsed even if a path is a substring of an attribute value.
42    */
43   default void collapsePathsRecursively(@NotNull Element element) {
44     collapsePaths(element, true);
45   }
46
47   void collapsePaths(@NotNull Element element, boolean recursively);
48
49   default String collapsePathsRecursively(@NotNull String string) {
50     return collapsePath(string, true);
51   }
52 }