Skip to content

Commit c0f3c29

Browse files
authored
Merge pull request #637 from bohdan-harniuk/uct-project-dev
Added summary to output, generated report file, added report file to output
2 parents e1c2f60 + 4a8b93f commit c0f3c29

File tree

7 files changed

+769
-78
lines changed

7 files changed

+769
-78
lines changed

resources/uct/bundle/inspection.properties

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
inspection.deprecation.group.name=Deprecation Inspections
2-
inspection.displayName.ExtendingDeprecatedClass=Extending from Adobe Commerce @deprecated class
3-
inspection.displayName.ImportingDeprecatedClass=Importing Adobe Commerce @deprecated class
4-
inspection.displayName.ImportingDeprecatedInterface=Imported Adobe Commerce @deprecated interface
5-
inspection.displayName.UsingDeprecatedClass=Using Adobe Commerce @deprecated class
6-
inspection.displayName.UsingDeprecatedInterface=Used Adobe Commerce @deprecated interface
7-
inspection.displayName.UsingDeprecatedConstant=Using Adobe Commerce @deprecated constant
8-
inspection.displayName.OverridingDeprecatedConstant=Overriding Adobe Commerce @deprecated constant
9-
inspection.displayName.OverridingDeprecatedProperty=Overriding Adobe Commerce @deprecated property
10-
inspection.displayName.InheritedDeprecatedInterface=Inherited from Adobe Commerce @deprecated interface
11-
inspection.displayName.ImplementedDeprecatedInterface=Implemented Adobe Commerce @deprecated interface
12-
inspection.displayName.CallingDeprecatedMethod=Call Adobe Commerce @deprecated method
13-
inspection.displayName.UsingDeprecatedProperty=Using Adobe Commerce @deprecated property
2+
inspection.issues.description.link=Check https://devdocs.magento.com/upgrade-compatibility-tool/errors.html for a detailed list of Upgrade Compatibility Tool errors.
3+
inspection.displayName.ExtendingDeprecatedClass=Extending from @deprecated class
4+
inspection.displayName.ImportingDeprecatedClass=Importing @deprecated class
5+
inspection.displayName.ImportingDeprecatedInterface=Imported @deprecated interface
6+
inspection.displayName.UsingDeprecatedClass=Using @deprecated class
7+
inspection.displayName.UsingDeprecatedInterface=Using @deprecated interface
8+
inspection.displayName.UsingDeprecatedConstant=Using @deprecated constant
9+
inspection.displayName.OverridingDeprecatedConstant=Overriding @deprecated constant
10+
inspection.displayName.OverridingDeprecatedProperty=Overriding @deprecated property
11+
inspection.displayName.InheritedDeprecatedInterface=Inherited from @deprecated interface
12+
inspection.displayName.ImplementedDeprecatedInterface=Implemented @deprecated interface
13+
inspection.displayName.CallingDeprecatedMethod=Call @deprecated method
14+
inspection.displayName.UsingDeprecatedProperty=Using @deprecated property
1415
customCode.warnings.deprecated.1131=[1131] Extending from @deprecated class ''{0}''
1516
customCode.warnings.deprecated.1132=[1132] Importing @deprecated class ''{0}''
1617
customCode.warnings.deprecated.1134=[1134] Using @deprecated class ''{0}''

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

Lines changed: 60 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,23 @@
66
package com.magento.idea.magento2uct.execution;
77

88
import com.intellij.codeInspection.ProblemDescriptor;
9+
import com.intellij.execution.process.ProcessAdapter;
10+
import com.intellij.execution.process.ProcessEvent;
911
import com.intellij.execution.process.ProcessHandler;
12+
import com.intellij.json.psi.JsonFile;
1013
import com.intellij.openapi.application.ApplicationManager;
14+
import com.intellij.openapi.editor.Document;
1115
import com.intellij.openapi.project.Project;
1216
import com.intellij.openapi.vfs.VfsUtil;
1317
import com.intellij.openapi.vfs.VirtualFile;
1418
import com.intellij.psi.PsiDirectory;
19+
import com.intellij.psi.PsiDocumentManager;
1520
import com.intellij.psi.PsiFile;
1621
import com.intellij.psi.PsiManager;
1722
import com.jetbrains.php.lang.psi.PhpFile;
23+
import com.magento.idea.magento2uct.execution.output.ReportBuilder;
24+
import com.magento.idea.magento2uct.execution.output.Summary;
25+
import com.magento.idea.magento2uct.execution.output.UctReportOutputUtil;
1826
import com.magento.idea.magento2uct.execution.process.OutputWrapper;
1927
import com.magento.idea.magento2uct.execution.scanner.ModuleFilesScanner;
2028
import com.magento.idea.magento2uct.execution.scanner.ModuleScanner;
@@ -51,6 +59,15 @@ public GenerateUctReportCommand(
5159
this.output = output;
5260
this.process = process;
5361
settingsService = UctSettingsService.getInstance(project);
62+
63+
this.process.addProcessListener(new ProcessAdapter() {
64+
65+
@Override
66+
public void processTerminated(final @NotNull ProcessEvent event) {
67+
super.processTerminated(event);
68+
output.write("\nProcess finished with exit code " + event.getExitCode() + "\n");
69+
}
70+
});
5471
}
5572

5673
/**
@@ -74,9 +91,15 @@ public void execute() {
7491
rootDirectory,
7592
new ExcludeMagentoBundledFilter()
7693
);
94+
final Summary summary = new Summary(
95+
settingsService.getCurrentVersion(),
96+
settingsService.getTargetVersion()
97+
);
98+
final ReportBuilder reportBuilder = new ReportBuilder(project);
7799

78100
ApplicationManager.getApplication().executeOnPooledThread(() -> {
79101
ApplicationManager.getApplication().runReadAction(() -> {
102+
summary.trackProcessStarted();
80103
for (final ComponentData componentData : scanner) {
81104
if (process.isProcessTerminated()) {
82105
return;
@@ -87,6 +110,7 @@ public void execute() {
87110
if (!(psiFile instanceof PhpFile)) {
88111
continue;
89112
}
113+
final String filename = psiFile.getVirtualFile().getPath();
90114
final UctProblemsHolder fileProblemsHolder = inspectionManager.run(psiFile);
91115

92116
if (fileProblemsHolder == null) {
@@ -98,7 +122,7 @@ public void execute() {
98122
outputUtil.printModuleName(componentData.getName());
99123
isModuleHeaderPrinted = true;
100124
}
101-
outputUtil.printProblemFile(psiFile.getVirtualFile().getPath());
125+
outputUtil.printProblemFile(filename);
102126
}
103127

104128
for (final ProblemDescriptor descriptor
@@ -107,15 +131,47 @@ public void execute() {
107131
descriptor
108132
);
109133
if (code != null) {
134+
final SupportedIssue issue = SupportedIssue.getByCode(code);
135+
136+
if (issue != null) {
137+
final String errorMessage = descriptor
138+
.getDescriptionTemplate()
139+
.substring(6)
140+
.trim();
141+
summary.addToSummary(issue.getLevel());
142+
reportBuilder.addIssue(
143+
descriptor.getLineNumber() + 1,
144+
filename,
145+
errorMessage,
146+
issue
147+
);
148+
}
110149
outputUtil.printIssue(descriptor, code);
111150
}
112151
}
113152
}
114153
}
115-
if (scanner.getModuleCount() == 0) {
116-
output.print(output.wrapInfo("Couldn't find modules to analyse").concat("\n"));
154+
summary.trackProcessFinished();
155+
summary.setProcessedModules(scanner.getModuleCount());
156+
outputUtil.printSummary(summary);
157+
reportBuilder.addSummary(summary);
158+
});
159+
160+
ApplicationManager.getApplication().invokeLaterOnWriteThread(() -> {
161+
final JsonFile report = reportBuilder.build();
162+
163+
if (report != null) {
164+
final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(
165+
project
166+
);
167+
final Document document = psiDocumentManager.getDocument(report);
168+
169+
if (document != null) {
170+
psiDocumentManager.commitDocument(document);
171+
}
172+
outputUtil.printReportFile(report.getVirtualFile().getPath());
173+
process.destroyProcess();
117174
}
118-
process.destroyProcess();
119175
});
120176
});
121177
}
@@ -139,65 +195,4 @@ public void execute() {
139195

140196
return PsiManager.getInstance(project).findDirectory(targetDirVirtualFile);
141197
}
142-
143-
private static final class UctReportOutputUtil {
144-
145-
private static final String ISSUE_FORMAT = " * {SEVERITY}[{code}] Line {line}: {message}";
146-
private final OutputWrapper stdout;
147-
148-
/**
149-
* UCT report styled output util.
150-
*
151-
* @param output OutputWrapper
152-
*/
153-
public UctReportOutputUtil(final @NotNull OutputWrapper output) {
154-
stdout = output;
155-
}
156-
157-
/**
158-
* Print module name header.
159-
*
160-
* @param moduleName String
161-
*/
162-
public void printModuleName(final @NotNull String moduleName) {
163-
final String moduleNameLine = "Module Name: ".concat(moduleName);
164-
stdout.print("\n\n" + stdout.wrapInfo(moduleNameLine).concat("\n"));
165-
stdout.print(stdout.wrapInfo("-".repeat(moduleNameLine.length())).concat("\n"));
166-
}
167-
168-
/**
169-
* Print problem file header.
170-
*
171-
* @param filePath String
172-
*/
173-
public void printProblemFile(final @NotNull String filePath) {
174-
final String file = "File: ".concat(filePath);
175-
stdout.print("\n".concat(stdout.wrapInfo(file)).concat("\n"));
176-
stdout.print(stdout.wrapInfo("-".repeat(file.length())).concat("\n\n"));
177-
}
178-
179-
/**
180-
* Print issue message.
181-
*
182-
* @param descriptor ProblemDescriptor
183-
* @param code int
184-
*/
185-
public void printIssue(final @NotNull ProblemDescriptor descriptor, final int code) {
186-
final String errorMessage = descriptor.getDescriptionTemplate().substring(6).trim();
187-
final SupportedIssue issue = SupportedIssue.getByCode(code);
188-
189-
if (issue == null) {
190-
return;
191-
}
192-
193-
final String output = ISSUE_FORMAT
194-
.replace("{SEVERITY}", issue.getLevel().getFormattedLabel())
195-
.replace("{code}", Integer.toString(code))
196-
.replace("{line}", Integer.toString(descriptor.getLineNumber() + 1))
197-
.replace("{message}", errorMessage)
198-
.concat("\n");
199-
200-
stdout.print(output);
201-
}
202-
}
203198
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package com.magento.idea.magento2uct.execution;
77

8+
import com.intellij.execution.process.ProcessAdapter;
9+
import com.intellij.execution.process.ProcessEvent;
810
import com.intellij.execution.process.ProcessHandler;
911
import com.intellij.openapi.application.ApplicationManager;
1012
import com.intellij.openapi.project.Project;
@@ -49,6 +51,15 @@ public ReindexUctCommand(
4951
this.directory = directory;
5052
this.output = output;
5153
this.process = process;
54+
55+
this.process.addProcessListener(new ProcessAdapter() {
56+
57+
@Override
58+
public void processTerminated(final @NotNull ProcessEvent event) {
59+
super.processTerminated(event);
60+
output.write("\nProcess finished with exit code " + event.getExitCode() + "\n");
61+
}
62+
});
5263
}
5364

5465
/**

0 commit comments

Comments
 (0)