Skip to content

Commit b5a5754

Browse files
authored
Merge pull request #1941 from Haehnchen/feature/glob-pattern
provide "glob" pattern extraction for string to provide a file scanner
2 parents 72a8c72 + 6f0a9c2 commit b5a5754

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.*;
3333
import java.util.function.Supplier;
3434
import java.util.stream.Collectors;
35+
import java.util.stream.Stream;
3536

3637
/**
3738
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -420,4 +421,38 @@ public Collection<? extends PsiElement> get() {
420421
return psiElements;
421422
}
422423
}
424+
425+
/**
426+
* Split given "resource" path to get the root path and its pattern
427+
*
428+
* @param resourcePath "../src/{Entity,Foobar}/"
429+
* @return "../src", "{Entity,Foobar}"
430+
*/
431+
@NotNull
432+
public static Pair<String, String> getGlobalPatternDirectory(@NotNull String resourcePath) {
433+
String[] split = resourcePath.split("/");
434+
List<String> path = new ArrayList<>();
435+
436+
for (int i = 0; i < split.length; i++) {
437+
String s1 = split[i];
438+
if (Stream.of("$", "*", "[", "]", "|", "(", ")", "?", "{", "}").anyMatch(s1::contains)) {
439+
String join = String.join("/", Arrays.copyOfRange(split, i, split.length));
440+
441+
if (resourcePath.endsWith("/") && !join.endsWith("/")) {
442+
join += "/";
443+
}
444+
445+
return new Pair<>(String.join("/", path), join);
446+
}
447+
448+
path.add(s1);
449+
}
450+
451+
String join = String.join("/", path);
452+
if (resourcePath.endsWith("/") && !join.endsWith("/")) {
453+
join += "/";
454+
}
455+
456+
return new Pair<>(join, null);
457+
}
423458
}

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/util/resource/FileResourceUtilTest.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package fr.adrienbrault.idea.symfony2plugin.tests.util.resource;
22

3+
import com.intellij.openapi.util.Pair;
34
import com.intellij.psi.PsiFile;
45
import com.intellij.util.containers.ContainerUtil;
56
import com.jetbrains.php.lang.psi.elements.PhpClass;
67
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
78
import fr.adrienbrault.idea.symfony2plugin.util.resource.FileResourceUtil;
8-
import kotlin.Pair;
9+
import org.jetbrains.annotations.NotNull;
910

1011
/**
1112
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -42,4 +43,26 @@ public void testGetFileResourceTargetsInBundleDirectory() {
4243
));
4344
}
4445
}
46+
47+
public void testGetGlobalPatternDirectory() {
48+
@NotNull Pair<String, String> globalPatternDirectory = FileResourceUtil.getGlobalPatternDirectory("../src/DependencyInjection/");
49+
assertEquals("../src/DependencyInjection/", globalPatternDirectory.getFirst());
50+
assertNull(globalPatternDirectory.getSecond());
51+
52+
globalPatternDirectory = FileResourceUtil.getGlobalPatternDirectory("../src/DependencyInjection/**/test.php");
53+
assertEquals("../src/DependencyInjection", globalPatternDirectory.getFirst());
54+
assertEquals("**/test.php", globalPatternDirectory.getSecond());
55+
56+
globalPatternDirectory = FileResourceUtil.getGlobalPatternDirectory("../src/{Entity,Foobar}/");
57+
assertEquals("../src", globalPatternDirectory.getFirst());
58+
assertEquals("{Entity,Foobar}/", globalPatternDirectory.getSecond());
59+
60+
globalPatternDirectory = FileResourceUtil.getGlobalPatternDirectory("../src/Kernel.php");
61+
assertEquals("../src/Kernel.php", globalPatternDirectory.getFirst());
62+
assertNull(globalPatternDirectory.getSecond());
63+
64+
globalPatternDirectory = FileResourceUtil.getGlobalPatternDirectory("src/");
65+
assertEquals("src/", globalPatternDirectory.getFirst());
66+
assertNull(globalPatternDirectory.getSecond());
67+
}
4568
}

0 commit comments

Comments
 (0)