Skip to content

Commit ec9680c

Browse files
authored
Merge pull request #783 from bohdan-harniuk/uct-inspection-used-non-existent-property
UCT-715: Inspection used non existent property
2 parents db76a5d + 99fdd96 commit ec9680c

File tree

7 files changed

+139
-74
lines changed

7 files changed

+139
-74
lines changed

resources/META-INF/plugin.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,13 @@
410410
enabledByDefault="false"
411411
level="ERROR"
412412
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"/>
413420
<localInspection language="PHP" groupPath="UCT"
414421
shortName="ImportedNonApiClass"
415422
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>[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: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ inspection.displayName.OverriddenNonExistentProperty=Overridden non-existent Ado
2424
inspection.displayName.CalledNonExistentMethod=Call non-existent Adobe Commerce method
2525
inspection.displayName.UsedNonExistentType=Used non-existent Adobe Commerce type
2626
inspection.displayName.UsedNonExistentConstant=Used non-existent Adobe Commerce constant
27+
inspection.displayName.UsedNonExistentProperty=Used non-existent Adobe Commerce property
2728
inspection.displayName.ImportedNonApiClass=Imported non Adobe Commerce API class
2829
customCode.warnings.deprecated.1131=[1131] Extending from @deprecated class ''{0}''
2930
customCode.warnings.deprecated.1132=[1132] Importing @deprecated class ''{0}''
@@ -47,4 +48,5 @@ customCode.critical.existence.1515=[1515] Overridden property ''{0}'' that is re
4748
customCode.critical.existence.1410=[1410] Called method ''{0}'' that is removed in the ''{1}''
4849
customCode.critical.existence.1110=[1110] Used type ''{0}'' that is removed in the ''{1}''
4950
customCode.critical.existence.1214=[1214] Used constant ''{0}'' that is removed in the ''{1}''
51+
customCode.critical.existence.1514=[1514] Used property ''{0}'' that is removed in the ''{1}''
5052
customCode.critical.api.1122=[1122] Imported class ''{0}'' is not marked as an API

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

Lines changed: 54 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,84 +8,75 @@
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.intellij.psi.PsiFile;
14-
import com.jetbrains.php.lang.inspections.PhpInspection;
11+
import com.jetbrains.php.lang.psi.elements.ClassConstantReference;
1512
import com.jetbrains.php.lang.psi.elements.Field;
1613
import com.jetbrains.php.lang.psi.elements.FieldReference;
1714
import com.jetbrains.php.lang.psi.elements.PhpClass;
18-
import com.jetbrains.php.lang.psi.visitors.PhpElementVisitor;
15+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
1916
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
17+
import com.magento.idea.magento2uct.inspections.php.UsedFieldInspection;
18+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
2019
import com.magento.idea.magento2uct.packages.SupportedIssue;
21-
import com.magento.idea.magento2uct.settings.UctSettingsService;
2220
import com.magento.idea.magento2uct.versioning.VersionStateManager;
2321
import org.jetbrains.annotations.NotNull;
2422

25-
public class UsingDeprecatedProperty extends PhpInspection {
23+
public class UsingDeprecatedProperty extends UsedFieldInspection {
2624

2725
@Override
28-
@SuppressWarnings("PMD.CognitiveComplexity")
29-
public @NotNull PsiElementVisitor buildVisitor(
26+
protected void execute(
27+
final Project project,
3028
final @NotNull ProblemsHolder problemsHolder,
31-
final boolean isOnTheFly
29+
final Field field,
30+
final FieldReference fieldReference
3231
) {
33-
return new PhpElementVisitor() {
34-
35-
@Override
36-
public void visitPhpFieldReference(final FieldReference fieldReference) {
37-
final Project project = fieldReference.getProject();
38-
final UctSettingsService settings = UctSettingsService.getInstance(project);
39-
40-
if (!settings.isEnabled() || !settings.isIssueLevelSatisfiable(
41-
SupportedIssue.USING_DEPRECATED_PROPERTY.getLevel())
42-
) {
43-
return;
44-
}
45-
final PsiElement element = fieldReference.resolve();
46-
final PsiFile file = fieldReference.getContainingFile();
47-
48-
if (!(element instanceof Field) || element.getContainingFile().equals(file)) {
49-
return;
50-
}
51-
final Field field = (Field) element;
32+
if (VersionStateManager.getInstance(project).isDeprecated(field.getFQN())) {
33+
if (problemsHolder instanceof UctProblemsHolder) {
34+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
35+
SupportedIssue.USING_DEPRECATED_PROPERTY.getCode()
36+
);
37+
}
38+
problemsHolder.registerProblem(
39+
fieldReference,
40+
SupportedIssue.USING_DEPRECATED_PROPERTY.getMessage(
41+
field.getFQN().replace(".", "::")
42+
),
43+
ProblemHighlightType.LIKE_DEPRECATED
44+
);
45+
} else {
46+
final PhpClass containingClass = field.getContainingClass();
5247

53-
if (VersionStateManager.getInstance(project).isDeprecated(field.getFQN())) {
54-
if (problemsHolder instanceof UctProblemsHolder) {
55-
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
56-
SupportedIssue.USING_DEPRECATED_PROPERTY.getCode()
57-
);
58-
}
59-
problemsHolder.registerProblem(
60-
fieldReference,
61-
SupportedIssue.USING_DEPRECATED_PROPERTY.getMessage(
62-
field.getFQN().replace(".", "::")
63-
),
64-
ProblemHighlightType.LIKE_DEPRECATED
48+
if (containingClass == null) {
49+
return;
50+
}
51+
if (VersionStateManager.getInstance(project).isDeprecated(containingClass.getFQN())) {
52+
if (problemsHolder instanceof UctProblemsHolder) {
53+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
54+
SupportedIssue.USING_DEPRECATED_PROPERTY.getCode()
6555
);
66-
} else {
67-
final PhpClass containingClass = field.getContainingClass();
68-
69-
if (containingClass == null) {
70-
return;
71-
}
72-
if (VersionStateManager.getInstance(project)
73-
.isDeprecated(containingClass.getFQN())) {
74-
if (problemsHolder instanceof UctProblemsHolder) {
75-
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
76-
SupportedIssue.USING_DEPRECATED_PROPERTY.getCode()
77-
);
78-
}
79-
problemsHolder.registerProblem(
80-
fieldReference,
81-
SupportedIssue.USING_DEPRECATED_PROPERTY.getMessage(
82-
field.getFQN().replace(".", "::")
83-
),
84-
ProblemHighlightType.LIKE_DEPRECATED
85-
);
86-
}
8756
}
57+
problemsHolder.registerProblem(
58+
fieldReference,
59+
SupportedIssue.USING_DEPRECATED_PROPERTY.getMessage(
60+
field.getFQN().replace(".", "::")
61+
),
62+
ProblemHighlightType.LIKE_DEPRECATED
63+
);
8864
}
89-
};
65+
}
66+
}
67+
68+
@Override
69+
protected void execute(
70+
final Project project,
71+
final @NotNull ProblemsHolder problemsHolder,
72+
final ClassConstImpl constant,
73+
final ClassConstantReference constantReference
74+
) {
75+
// We do not need to check constant in the field inspection.
76+
}
77+
78+
@Override
79+
protected IssueSeverityLevel getSeverityLevel() {
80+
return SupportedIssue.USING_DEPRECATED_PROPERTY.getLevel();
9081
}
9182
}

src/com/magento/idea/magento2uct/inspections/php/existence/UsedNonExistentConstant.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.jetbrains.php.lang.psi.elements.ClassConstantReference;
1212
import com.jetbrains.php.lang.psi.elements.Field;
1313
import com.jetbrains.php.lang.psi.elements.FieldReference;
14-
import com.jetbrains.php.lang.psi.elements.PhpClass;
1514
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
1615
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
1716
import com.magento.idea.magento2uct.inspections.php.UsedFieldInspection;
@@ -39,19 +38,11 @@ protected void execute(
3938
final ClassConstImpl constant,
4039
final ClassConstantReference constantReference
4140
) {
42-
final String constantFqn = constant.getFQN();
43-
44-
if (VersionStateManager.getInstance(project).isExists(constantFqn)) {
45-
return;
46-
}
47-
final PhpClass containingClass = constant.getContainingClass();
48-
49-
if (containingClass == null) {
41+
if (VersionStateManager.getInstance(project).isExists(constant.getFQN())) {
5042
return;
5143
}
52-
final String messageArg = containingClass.getFQN().concat("::").concat(constant.getName());
5344
final String message = SupportedIssue.USED_NON_EXISTENT_CONSTANT.getMessage(
54-
messageArg,
45+
constant.getFQN().replace(".", "::"),
5546
VersionStateManager.getInstance(project).getRemovedInVersion(constant.getFQN())
5647
);
5748

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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.existence;
7+
8+
import com.intellij.codeInspection.ProblemHighlightType;
9+
import com.intellij.codeInspection.ProblemsHolder;
10+
import com.intellij.openapi.project.Project;
11+
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;
14+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
15+
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
16+
import com.magento.idea.magento2uct.inspections.php.UsedFieldInspection;
17+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
18+
import com.magento.idea.magento2uct.packages.SupportedIssue;
19+
import com.magento.idea.magento2uct.versioning.VersionStateManager;
20+
import org.jetbrains.annotations.NotNull;
21+
22+
public class UsedNonExistentProperty extends UsedFieldInspection {
23+
24+
@Override
25+
protected void execute(
26+
final Project project,
27+
final @NotNull ProblemsHolder problemsHolder,
28+
final Field field,
29+
final FieldReference fieldReference
30+
) {
31+
if (VersionStateManager.getInstance(project).isExists(field.getFQN())) {
32+
return;
33+
}
34+
final String message = SupportedIssue.USED_NON_EXISTENT_PROPERTY.getMessage(
35+
field.getFQN().replace(".", "::"),
36+
VersionStateManager.getInstance(project).getRemovedInVersion(field.getFQN())
37+
);
38+
39+
if (problemsHolder instanceof UctProblemsHolder) {
40+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
41+
SupportedIssue.USED_NON_EXISTENT_PROPERTY.getCode()
42+
);
43+
}
44+
problemsHolder.registerProblem(fieldReference, message, ProblemHighlightType.ERROR);
45+
}
46+
47+
@Override
48+
protected void execute(
49+
final Project project,
50+
final @NotNull ProblemsHolder problemsHolder,
51+
final ClassConstImpl constant,
52+
final ClassConstantReference constantReference
53+
) {
54+
// We do not need to check constant in the field inspection.
55+
}
56+
57+
@Override
58+
protected IssueSeverityLevel getSeverityLevel() {
59+
return SupportedIssue.USED_NON_EXISTENT_PROPERTY.getLevel();
60+
}
61+
}

src/com/magento/idea/magento2uct/packages/SupportedIssue.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.magento.idea.magento2uct.inspections.php.existence.OverriddenNonExistentConstant;
3232
import com.magento.idea.magento2uct.inspections.php.existence.OverriddenNonExistentProperty;
3333
import com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentConstant;
34+
import com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentProperty;
3435
import com.magento.idea.magento2uct.inspections.php.existence.UsedNonExistentType;
3536
import java.lang.reflect.InvocationTargetException;
3637
import java.util.LinkedList;
@@ -172,6 +173,12 @@ public enum SupportedIssue {
172173
"customCode.critical.existence.1214",
173174
UsedNonExistentConstant.class
174175
),
176+
USED_NON_EXISTENT_PROPERTY(
177+
1514,
178+
IssueSeverityLevel.CRITICAL,
179+
"customCode.critical.existence.1514",
180+
UsedNonExistentProperty.class
181+
),
175182
IMPORTED_NON_API_CLASS(
176183
1122,
177184
IssueSeverityLevel.ERROR,

0 commit comments

Comments
 (0)