Skip to content

Commit a4b5fd8

Browse files
committed
#2006 Support manifest.json w/o Webpack Encore
1 parent 56a419f commit a4b5fd8

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

Diff for: src/main/java/fr/adrienbrault/idea/symfony2plugin/asset/AssetDirectoryReader.java

+37-19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.intellij.openapi.vfs.VirtualFile;
66
import com.intellij.openapi.vfs.VirtualFileVisitor;
77
import com.intellij.psi.PsiDirectory;
8+
import com.intellij.psi.search.FilenameIndex;
9+
import com.intellij.psi.search.GlobalSearchScope;
810
import fr.adrienbrault.idea.symfony2plugin.Settings;
911
import fr.adrienbrault.idea.symfony2plugin.templating.webpack.SymfonyWebpackUtil;
1012
import fr.adrienbrault.idea.symfony2plugin.util.ProjectUtil;
@@ -62,7 +64,8 @@ private static Collection<VirtualFile> getProjectAssetRoot(@NotNull Project proj
6264
public Collection<AssetFile> getAssetFiles(@NotNull Project project) {
6365
Collection<AssetFile> files = new ArrayList<>();
6466

65-
for (VirtualFile webDirectory : getProjectAssetRoot(project)) {
67+
Collection<VirtualFile> projectAssetRoots = getProjectAssetRoot(project);
68+
for (VirtualFile webDirectory : projectAssetRoots) {
6669
VfsUtil.visitChildrenRecursively(webDirectory, new VirtualFileVisitor<VirtualFile>() {
6770
@Override
6871
public boolean visitFile(@NotNull VirtualFile virtualFile) {
@@ -72,14 +75,13 @@ public boolean visitFile(@NotNull VirtualFile virtualFile) {
7275
return super.visitFile(virtualFile);
7376
}
7477
});
78+
}
7579

76-
VirtualFile fileByRelativePath = webDirectory.findFileByRelativePath("build/manifest.json");
77-
if (fileByRelativePath != null) {
78-
SymfonyWebpackUtil.visitManifestJsonEntries(
79-
fileByRelativePath,
80-
pair -> files.add(AssetFile.createVirtualManifestEntry(fileByRelativePath, pair.getFirst()))
81-
);
82-
}
80+
for (VirtualFile projectManifestJsonFile : getProjectManifestJsonFiles(project, projectAssetRoots)) {
81+
SymfonyWebpackUtil.visitManifestJsonEntries(
82+
projectManifestJsonFile,
83+
pair -> files.add(AssetFile.createVirtualManifestEntry(projectManifestJsonFile, pair.getFirst()))
84+
);
8385
}
8486

8587
if(!this.includeBundleDir) {
@@ -155,7 +157,8 @@ public Collection<VirtualFile> resolveAssetFile(@NotNull Project project, @NotNu
155157

156158
Collection<VirtualFile> files = new HashSet<>();
157159

158-
for (VirtualFile webDirectory : getProjectAssetRoot(project)) {
160+
Collection<VirtualFile> projectAssetRoots = getProjectAssetRoot(project);
161+
for (VirtualFile webDirectory : projectAssetRoots) {
159162
Matcher matcher = Pattern.compile("^(.*[/\\\\])\\*([.\\w+]*)$").matcher(assetName);
160163
if (!matcher.find()) {
161164
VirtualFile assetFile = VfsUtil.findRelativeFile(webDirectory, assetName.split("/"));
@@ -167,18 +170,17 @@ public Collection<VirtualFile> resolveAssetFile(@NotNull Project project, @NotNu
167170
// "/*.js"
168171
files.addAll(collectWildcardDirectories(matcher, webDirectory));
169172
}
173+
}
170174

171-
VirtualFile fileByRelativePath = webDirectory.findFileByRelativePath("build/manifest.json");
172-
if (fileByRelativePath != null) {
173-
SymfonyWebpackUtil.visitManifestJsonEntries(
174-
fileByRelativePath,
175-
pair -> {
176-
if (filename.equalsIgnoreCase(pair.getFirst())) {
177-
files.add(fileByRelativePath);
178-
}
175+
for (VirtualFile projectManifestJsonFile : getProjectManifestJsonFiles(project, projectAssetRoots)) {
176+
SymfonyWebpackUtil.visitManifestJsonEntries(
177+
projectManifestJsonFile,
178+
pair -> {
179+
if (filename.equalsIgnoreCase(pair.getFirst())) {
180+
files.add(projectManifestJsonFile);
179181
}
180-
);
181-
}
182+
}
183+
);
182184
}
183185

184186
return files;
@@ -223,4 +225,20 @@ private boolean isValidFile(@NotNull VirtualFile virtualFile) {
223225
String extension = virtualFile.getExtension();
224226
return extension != null && this.filterExtension.contains(extension);
225227
}
228+
229+
private Collection<VirtualFile> getProjectManifestJsonFiles(@NotNull Project project, @NotNull Collection<VirtualFile> webDirectories) {
230+
HashSet<VirtualFile> manifestFiles = new HashSet<>(
231+
FilenameIndex.getVirtualFilesByName("manifest.json", GlobalSearchScope.allScope(project))
232+
);
233+
234+
// for files which are ignored by indexing, resolve based on project web folder
235+
for (VirtualFile webDirectory : webDirectories) {
236+
VirtualFile fileByRelativePath = webDirectory.findFileByRelativePath("build/manifest.json");
237+
if (fileByRelativePath != null) {
238+
manifestFiles.add(fileByRelativePath);
239+
}
240+
}
241+
242+
return manifestFiles;
243+
}
226244
}

0 commit comments

Comments
 (0)