Skip to content

Commit 9e799ac

Browse files
committed
1023: added functional for addtional scanning files
1 parent 267b88c commit 9e799ac

File tree

4 files changed

+380
-0
lines changed

4 files changed

+380
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.magento.files;
7+
8+
import com.intellij.lang.Language;
9+
import com.intellij.lang.xml.XMLLanguage;
10+
11+
public class ThemeXml implements ModuleFileInterface {
12+
public static final String FILE_NAME = "theme.xml";
13+
public static final String TITLE_ELEMENT_NAME = "title";
14+
public static final String TEMPLATE = "Magento Theme XML";
15+
private static final ThemeXml INSTANCE = new ThemeXml();
16+
17+
/**
18+
* Getter for singleton instance of class.
19+
*/
20+
public static ThemeXml getInstance() {
21+
return INSTANCE;
22+
}
23+
24+
@Override
25+
public String getFileName() {
26+
return FILE_NAME;
27+
}
28+
29+
@Override
30+
public String getTemplate() {
31+
return TEMPLATE;
32+
}
33+
34+
@Override
35+
public Language getLanguage() {
36+
return XMLLanguage.INSTANCE;
37+
}
38+
}

src/com/magento/idea/magento2uct/execution/GenerateUctReportCommand.java

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import com.magento.idea.magento2uct.execution.process.OutputWrapper;
2727
import com.magento.idea.magento2uct.execution.scanner.ModuleFilesScanner;
2828
import com.magento.idea.magento2uct.execution.scanner.ModuleScanner;
29+
import com.magento.idea.magento2uct.execution.scanner.ThemeFilesScanner;
30+
import com.magento.idea.magento2uct.execution.scanner.ThemeScanner;
2931
import com.magento.idea.magento2uct.execution.scanner.data.ComponentData;
3032
import com.magento.idea.magento2uct.execution.scanner.filter.ExcludeMagentoBundledFilter;
3133
import com.magento.idea.magento2uct.inspections.UctInspectionManager;
@@ -81,6 +83,7 @@ public void processTerminated(final @NotNull ProcessEvent event) {
8183
public void execute() {
8284
output.write("Upgrade compatibility tool\n");
8385
final PsiDirectory rootDirectory = getTargetPsiDirectory();
86+
final PsiDirectory additionalDirectory = getAdditionalTargetPsiDirectory();
8487

8588
if (rootDirectory == null) {
8689
output.print(
@@ -99,6 +102,10 @@ public void execute() {
99102
);
100103
final ReportBuilder reportBuilder = new ReportBuilder(project);
101104
final UctReportOutputUtil outputUtil = new UctReportOutputUtil(output);
105+
final ThemeScanner themeScanner = new ThemeScanner(
106+
additionalDirectory,
107+
new ExcludeMagentoBundledFilter()
108+
);
102109

103110
ApplicationManager.getApplication().executeOnPooledThread(() -> {
104111
ApplicationManager.getApplication().runReadAction(() -> {
@@ -152,6 +159,56 @@ public void execute() {
152159
}
153160
}
154161
}
162+
for (final ComponentData themeComponentData: themeScanner) {
163+
if (process.isProcessTerminated()) {
164+
return;
165+
}
166+
boolean isThemeHeaderPrinted = false;
167+
168+
for (final PsiFile psiFile : new ThemeFilesScanner(themeComponentData)) {
169+
if (!(psiFile instanceof PhpFile)) {
170+
continue;
171+
}
172+
173+
final String filename = psiFile.getVirtualFile().getPath();
174+
final UctInspectionManager inspectionManager = new UctInspectionManager(
175+
project
176+
);
177+
final UctProblemsHolder fileProblemsHolder = inspectionManager.run(psiFile);
178+
179+
if (fileProblemsHolder == null) {
180+
continue;
181+
}
182+
183+
if (fileProblemsHolder.hasResults()) {
184+
if (!isThemeHeaderPrinted) {
185+
outputUtil.printModuleName(themeComponentData.getName());
186+
isThemeHeaderPrinted = true;
187+
}
188+
outputUtil.printProblemFile(filename);
189+
}
190+
final List<ProblemDescriptor> problems = SortDescriptorResultsUtil.sort(
191+
FilterDescriptorResultsUtil.filter(fileProblemsHolder)
192+
);
193+
194+
for (final ProblemDescriptor descriptor : problems) {
195+
final SupportedIssue issue = fileProblemsHolder.getIssue(descriptor);
196+
197+
final String errorMessage = descriptor
198+
.getDescriptionTemplate()
199+
.substring(6)
200+
.trim();
201+
summary.addToSummary(issue.getLevel());
202+
reportBuilder.addIssue(
203+
descriptor.getLineNumber() + 1,
204+
filename,
205+
errorMessage,
206+
issue
207+
);
208+
outputUtil.printIssue(descriptor, issue.getCode());
209+
}
210+
}
211+
}
155212
summary.trackProcessFinished();
156213
summary.setProcessedModules(scanner.getModuleCount());
157214
outputUtil.printSummary(summary);
@@ -201,4 +258,25 @@ public void execute() {
201258

202259
return PsiManager.getInstance(project).findDirectory(targetDirVirtualFile);
203260
}
261+
262+
/**
263+
* Get additional target psi directory.
264+
*
265+
* @return PsiDirectory
266+
*/
267+
private @Nullable PsiDirectory getAdditionalTargetPsiDirectory() {
268+
final String additionalTargetDirPath = settingsService.getAdditionalPath();
269+
270+
if (additionalTargetDirPath == null) {
271+
return null;
272+
}
273+
final VirtualFile targetDirVirtualFile
274+
= VfsUtil.findFile(Paths.get(additionalTargetDirPath), false);
275+
276+
if (targetDirVirtualFile == null) {
277+
return null;
278+
}
279+
280+
return PsiManager.getInstance(project).findDirectory(targetDirVirtualFile);
281+
}
204282
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2uct.execution.scanner;
7+
8+
import com.intellij.psi.PsiDirectory;
9+
import com.intellij.psi.PsiFile;
10+
import com.jetbrains.php.lang.psi.PhpFile;
11+
import com.magento.idea.magento2uct.execution.scanner.data.ComponentData;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
import java.util.ArrayList;
15+
import java.util.Iterator;
16+
import java.util.List;
17+
18+
public class ThemeFilesScanner implements Iterable<PsiFile> {
19+
20+
private final ComponentData componentData;
21+
private final List<PsiFile> files;
22+
23+
/**
24+
* Module files scanner constructor.
25+
*
26+
* @param componentData ComponentData
27+
*/
28+
public ThemeFilesScanner(final @NotNull ComponentData componentData) {
29+
this.componentData = componentData;
30+
files = new ArrayList<>();
31+
}
32+
33+
@Override
34+
public @NotNull Iterator<PsiFile> iterator() {
35+
return run().iterator();
36+
}
37+
38+
/**
39+
* Collect module files.
40+
*
41+
* @return List[PsiFile]
42+
*/
43+
private List<PsiFile> run() {
44+
files.clear();
45+
collectFilesInDirectoryRecursively(componentData.getDirectory());
46+
47+
return files;
48+
}
49+
50+
/**
51+
* Collect all files in directory recursively.
52+
*
53+
* @param directory PsiDirectory
54+
*/
55+
private void collectFilesInDirectoryRecursively(final @NotNull PsiDirectory directory) {
56+
for (final PsiFile file : directory.getFiles()) {
57+
if (!(file instanceof PhpFile)) {
58+
files.add(file);
59+
}
60+
}
61+
62+
for (final PsiDirectory subDirectory : directory.getSubdirectories()) {
63+
collectFilesInDirectoryRecursively(subDirectory);
64+
}
65+
}
66+
}

0 commit comments

Comments
 (0)