Skip to content

Commit c463f8d

Browse files
Merge branch '4.2.0-develop' of github.com:magento/magento2-phpstorm-plugin into uct-inspections-imported-non-api-interface
2 parents 55671bb + ec9680c commit c463f8d

File tree

10 files changed

+371
-111
lines changed

10 files changed

+371
-111
lines changed

resources/META-INF/plugin.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,20 @@
403403
enabledByDefault="false"
404404
level="ERROR"
405405
implementationClass="com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentType"/>
406+
<localInspection language="PHP" groupPath="UCT"
407+
shortName="UsedNonExistentConstant"
408+
bundle="uct.bundle.inspection" key="inspection.displayName.UsedNonExistentConstant"
409+
groupBundle="uct.bundle.inspection" groupKey="inspection.existence.group.name"
410+
enabledByDefault="false"
411+
level="ERROR"
412+
implementationClass="com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentConstant"/>
413+
<localInspection language="PHP" groupPath="UCT"
414+
shortName="UsedNonExistentProperty"
415+
bundle="uct.bundle.inspection" key="inspection.displayName.UsedNonExistentProperty"
416+
groupBundle="uct.bundle.inspection" groupKey="inspection.existence.group.name"
417+
enabledByDefault="false"
418+
level="ERROR"
419+
implementationClass="com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentProperty"/>
406420
<localInspection language="PHP" groupPath="UCT"
407421
shortName="ImportedNonApiClass"
408422
bundle="uct.bundle.inspection" key="inspection.displayName.ImportedNonApiClass"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<html>
2+
<body>
3+
<p>[1214] The used constant is no longer present in the codebase.</p>
4+
<!-- tooltip end -->
5+
</body>
6+
</html>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<html>
2+
<body>
3+
<p>[1514] The used property is no longer present in the codebase.</p>
4+
<!-- tooltip end -->
5+
</body>
6+
</html>

resources/uct/bundle/inspection.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ inspection.displayName.OverriddenNonExistentConstant=Overridden non-existent Ado
2323
inspection.displayName.OverriddenNonExistentProperty=Overridden non-existent Adobe Commerce property
2424
inspection.displayName.CalledNonExistentMethod=Call non-existent Adobe Commerce method
2525
inspection.displayName.UsedNonExistentType=Used non-existent Adobe Commerce type
26+
inspection.displayName.UsedNonExistentConstant=Used non-existent Adobe Commerce constant
27+
inspection.displayName.UsedNonExistentProperty=Used non-existent Adobe Commerce property
2628
inspection.displayName.ImportedNonApiClass=Imported non Adobe Commerce API class
2729
inspection.displayName.ImportedNonApiInterface=Imported non Adobe Commerce API interface
2830
customCode.warnings.deprecated.1131=[1131] Extending from @deprecated class ''{0}''
@@ -46,5 +48,7 @@ customCode.critical.existence.1215=[1215] Overridden constant ''{0}'' that is re
4648
customCode.critical.existence.1515=[1515] Overridden property ''{0}'' that is removed in the ''{1}''
4749
customCode.critical.existence.1410=[1410] Called method ''{0}'' that is removed in the ''{1}''
4850
customCode.critical.existence.1110=[1110] Used type ''{0}'' that is removed in the ''{1}''
51+
customCode.critical.existence.1214=[1214] Used constant ''{0}'' that is removed in the ''{1}''
52+
customCode.critical.existence.1514=[1514] Used property ''{0}'' that is removed in the ''{1}''
4953
customCode.critical.api.1122=[1122] Imported class ''{0}'' is not marked as an API
5054
customCode.critical.api.1322=[1322] Imported interface ''{0}'' is not marked as an API
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2uct.inspections.php;
7+
8+
import com.intellij.codeInspection.ProblemsHolder;
9+
import com.intellij.openapi.project.Project;
10+
import com.intellij.psi.PsiElement;
11+
import com.intellij.psi.PsiElementVisitor;
12+
import com.intellij.psi.PsiFile;
13+
import com.jetbrains.php.lang.inspections.PhpInspection;
14+
import com.jetbrains.php.lang.psi.elements.ClassConstantReference;
15+
import com.jetbrains.php.lang.psi.elements.Field;
16+
import com.jetbrains.php.lang.psi.elements.FieldReference;
17+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
18+
import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor;
19+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
20+
import com.magento.idea.magento2uct.settings.UctSettingsService;
21+
import org.jetbrains.annotations.NotNull;
22+
23+
public abstract class UsedFieldInspection extends PhpInspection {
24+
25+
@Override
26+
public @NotNull PsiElementVisitor buildVisitor(
27+
final @NotNull ProblemsHolder problemsHolder,
28+
final boolean isOnTheFly
29+
) {
30+
return new PhpElementVisitor() {
31+
32+
@Override
33+
public void visitPhpFieldReference(final FieldReference fieldReference) {
34+
final Project project = fieldReference.getProject();
35+
final UctSettingsService settings = UctSettingsService.getInstance(project);
36+
37+
if (!settings.isEnabled()
38+
|| !settings.isIssueLevelSatisfiable(getSeverityLevel())) {
39+
return;
40+
}
41+
final PsiElement element = fieldReference.resolve();
42+
final PsiFile file = fieldReference.getContainingFile();
43+
44+
if (!(element instanceof Field) || element.getContainingFile().equals(file)) {
45+
return;
46+
}
47+
execute(project, problemsHolder, (Field) element, fieldReference);
48+
}
49+
50+
@Override
51+
public void visitPhpClassConstantReference(
52+
final ClassConstantReference constantReference
53+
) {
54+
final Project project = constantReference.getProject();
55+
final UctSettingsService settings = UctSettingsService.getInstance(project);
56+
57+
if (!settings.isEnabled()
58+
|| !settings.isIssueLevelSatisfiable(getSeverityLevel())) {
59+
return;
60+
}
61+
final PsiElement element = constantReference.resolve();
62+
final PsiFile file = constantReference.getContainingFile();
63+
64+
if (!(element instanceof ClassConstImpl)
65+
|| element.getContainingFile().equals(file)) {
66+
return;
67+
}
68+
execute(project, problemsHolder, (ClassConstImpl) element, constantReference);
69+
}
70+
};
71+
}
72+
73+
/**
74+
* Implement this method to specify inspection logic.
75+
*
76+
* @param project Project
77+
* @param problemsHolder ProblemsHolder
78+
* @param field Field
79+
* @param fieldReference FieldReference
80+
*/
81+
protected abstract void execute(
82+
final Project project,
83+
final @NotNull ProblemsHolder problemsHolder,
84+
final Field field,
85+
final FieldReference fieldReference
86+
);
87+
88+
/**
89+
* Implement this method to specify inspection logic.
90+
*
91+
* @param project Project
92+
* @param problemsHolder ProblemsHolder
93+
* @param constant Field
94+
* @param constantReference FieldReference
95+
*/
96+
protected abstract void execute(
97+
final Project project,
98+
final @NotNull ProblemsHolder problemsHolder,
99+
final ClassConstImpl constant,
100+
final ClassConstantReference constantReference
101+
);
102+
103+
/**
104+
* Implement this method to specify issue severity level for target inspection.
105+
*
106+
* @return IssueSeverityLevel
107+
*/
108+
protected abstract IssueSeverityLevel getSeverityLevel();
109+
}

src/com/magento/idea/magento2uct/inspections/php/deprecation/UsingDeprecatedConstant.java

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -8,70 +8,64 @@
88
import com.intellij.codeInspection.ProblemHighlightType;
99
import com.intellij.codeInspection.ProblemsHolder;
1010
import com.intellij.openapi.project.Project;
11-
import com.intellij.psi.PsiElement;
12-
import com.intellij.psi.PsiElementVisitor;
13-
import com.jetbrains.php.lang.inspections.PhpInspection;
1411
import com.jetbrains.php.lang.psi.elements.ClassConstantReference;
12+
import com.jetbrains.php.lang.psi.elements.Field;
13+
import com.jetbrains.php.lang.psi.elements.FieldReference;
1514
import com.jetbrains.php.lang.psi.elements.PhpClass;
1615
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
17-
import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor;
1816
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
17+
import com.magento.idea.magento2uct.inspections.php.UsedFieldInspection;
18+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
1919
import com.magento.idea.magento2uct.packages.SupportedIssue;
20-
import com.magento.idea.magento2uct.settings.UctSettingsService;
2120
import com.magento.idea.magento2uct.versioning.VersionStateManager;
2221
import org.jetbrains.annotations.NotNull;
2322

24-
public class UsingDeprecatedConstant extends PhpInspection {
23+
public class UsingDeprecatedConstant extends UsedFieldInspection {
2524

2625
@Override
27-
public @NotNull PsiElementVisitor buildVisitor(
26+
protected void execute(
27+
final Project project,
2828
final @NotNull ProblemsHolder problemsHolder,
29-
final boolean isOnTheFly
29+
final Field field,
30+
final FieldReference fieldReference
3031
) {
31-
return new PhpElementVisitor() {
32+
// We do not need to check field in the constant inspection.
33+
}
3234

33-
@Override
34-
public void visitPhpClassConstantReference(
35-
final ClassConstantReference constantReference
36-
) {
37-
final Project project = constantReference.getProject();
38-
final UctSettingsService settings = UctSettingsService.getInstance(project);
35+
@Override
36+
protected void execute(
37+
final Project project,
38+
final @NotNull ProblemsHolder problemsHolder,
39+
final ClassConstImpl constant,
40+
final ClassConstantReference constantReference
41+
) {
42+
final String constantFqn = constant.getFQN();
3943

40-
if (!settings.isEnabled() || !settings.isIssueLevelSatisfiable(
41-
SupportedIssue.USING_DEPRECATED_CONSTANT.getLevel())
42-
) {
43-
return;
44-
}
45-
final PsiElement element = constantReference.resolve();
44+
if (!VersionStateManager.getInstance(project).isDeprecated(constantFqn)) {
45+
return;
46+
}
47+
final PhpClass containingClass = constant.getContainingClass();
4648

47-
if (!(element instanceof ClassConstImpl)) {
48-
return;
49-
}
50-
final String constantClass = ((ClassConstImpl) element).getFQN();
49+
if (containingClass == null) {
50+
return;
51+
}
5152

52-
if (!VersionStateManager.getInstance(project).isDeprecated(constantClass)) {
53-
return;
54-
}
55-
final PhpClass containingClass = ((ClassConstImpl) element).getContainingClass();
53+
if (problemsHolder instanceof UctProblemsHolder) {
54+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
55+
SupportedIssue.USING_DEPRECATED_CONSTANT.getCode()
56+
);
57+
}
58+
problemsHolder.registerProblem(
59+
constantReference,
60+
SupportedIssue.USING_DEPRECATED_CONSTANT.getMessage(
61+
containingClass.getFQN().concat("::").concat(constant.getName())
62+
),
63+
ProblemHighlightType.LIKE_DEPRECATED
64+
);
65+
}
5666

57-
if (containingClass == null) {
58-
return;
59-
}
60-
if (problemsHolder instanceof UctProblemsHolder) {
61-
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
62-
SupportedIssue.USING_DEPRECATED_CONSTANT.getCode()
63-
);
64-
}
65-
problemsHolder.registerProblem(
66-
constantReference,
67-
SupportedIssue.USING_DEPRECATED_CONSTANT.getMessage(
68-
containingClass.getFQN()
69-
.concat("::")
70-
.concat(((ClassConstImpl) element).getName())
71-
),
72-
ProblemHighlightType.LIKE_DEPRECATED
73-
);
74-
}
75-
};
67+
@Override
68+
protected IssueSeverityLevel getSeverityLevel() {
69+
return SupportedIssue.USING_DEPRECATED_CONSTANT.getLevel();
7670
}
7771
}

0 commit comments

Comments
 (0)