Skip to content

Commit 0920b62

Browse files
authored
Merge pull request #790 from bohdan-harniuk/uct-inspection-overridden-non-api-const-or-prop
UCT-728,729: Inspection overridden non api constant or property
2 parents 9299aea + 325bc99 commit 0920b62

File tree

7 files changed

+154
-0
lines changed

7 files changed

+154
-0
lines changed

resources/META-INF/plugin.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,20 @@
438438
enabledByDefault="false"
439439
level="WARNING"
440440
implementationClass="com.magento.idea.magento2uct.inspections.php.api.CalledNonApiMethod"/>
441+
<localInspection language="PHP" groupPath="UCT"
442+
shortName="OverriddenNonApiConstant"
443+
bundle="uct.bundle.inspection" key="inspection.displayName.OverriddenNonApiConstant"
444+
groupBundle="uct.bundle.inspection" groupKey="inspection.api.group.name"
445+
enabledByDefault="false"
446+
level="WARNING"
447+
implementationClass="com.magento.idea.magento2uct.inspections.php.api.OverriddenNonApiConstant"/>
448+
<localInspection language="PHP" groupPath="UCT"
449+
shortName="OverriddenNonApiProperty"
450+
bundle="uct.bundle.inspection" key="inspection.displayName.OverriddenNonApiProperty"
451+
groupBundle="uct.bundle.inspection" groupKey="inspection.api.group.name"
452+
enabledByDefault="false"
453+
level="WARNING"
454+
implementationClass="com.magento.idea.magento2uct.inspections.php.api.OverriddenNonApiProperty"/>
441455
<!-- \UCT inspection -->
442456

443457
<internalFileTemplate name="Magento Composer JSON"/>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<html>
2+
<body>
3+
<p>[1225] The overridden constant is not marked as an API.</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>[1525] The overridden property is not marked as an API.</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
@@ -28,6 +28,8 @@ inspection.displayName.UsedNonExistentProperty=Used non-existent Adobe Commerce
2828
inspection.displayName.ImportedNonApiClass=Imported non Adobe Commerce API class
2929
inspection.displayName.ImportedNonApiInterface=Imported non Adobe Commerce API interface
3030
inspection.displayName.CalledNonApiMethod=Called non Adobe Commerce API method
31+
inspection.displayName.OverriddenNonApiConstant=Overridden non Adobe Commerce API constant
32+
inspection.displayName.OverriddenNonApiProperty=Overridden non Adobe Commerce API property
3133
customCode.warnings.deprecated.1131=[1131] Extended class ''{0}'' that is @deprecated in the ''{1}''
3234
customCode.warnings.deprecated.1132=[1132] Imported class ''{0}'' that is @deprecated in the ''{1}''
3335
customCode.warnings.deprecated.1134=[1134] Used class ''{0}'' that is @deprecated in the ''{1}''
@@ -54,3 +56,5 @@ customCode.critical.existence.1514=[1514] Used property ''{0}'' that is removed
5456
customCode.errors.api.1122=[1122] Imported class ''{0}'' is not marked as an API
5557
customCode.errors.api.1322=[1322] Imported interface ''{0}'' is not marked as an API
5658
customCode.errors.api.1429=[1429] Called method ''{0}'' is not marked as an API
59+
customCode.errors.api.1225=[1225] Overridden constant ''{0}'' is not marked as an API
60+
customCode.errors.api.1525=[1525] Overridden property ''{0}'' is not marked as an API
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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.api;
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.Field;
12+
import com.jetbrains.php.lang.psi.elements.PhpClass;
13+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
14+
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
15+
import com.magento.idea.magento2uct.inspections.php.OverriddenFieldInspection;
16+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
17+
import com.magento.idea.magento2uct.packages.SupportedIssue;
18+
import com.magento.idea.magento2uct.versioning.VersionStateManager;
19+
import org.jetbrains.annotations.NotNull;
20+
21+
public class OverriddenNonApiConstant extends OverriddenFieldInspection {
22+
23+
@Override
24+
protected void execute(
25+
final Project project,
26+
final @NotNull ProblemsHolder problemsHolder,
27+
final Field field,
28+
final Field overriddenConstant,
29+
final PhpClass parentClass
30+
) {
31+
if (VersionStateManager.getInstance(project).isApi(overriddenConstant.getFQN())) {
32+
return;
33+
}
34+
final String message = SupportedIssue.OVERRIDDEN_NON_API_CONSTANT.getMessage(
35+
overriddenConstant.getFQN().replace(".", "::")
36+
);
37+
38+
if (problemsHolder instanceof UctProblemsHolder) {
39+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
40+
SupportedIssue.OVERRIDDEN_NON_API_CONSTANT.getCode()
41+
);
42+
}
43+
problemsHolder.registerProblem(field, message, ProblemHighlightType.WARNING);
44+
}
45+
46+
@Override
47+
protected boolean isTypeValid(final Field field) {
48+
return field instanceof ClassConstImpl;
49+
}
50+
51+
@Override
52+
protected IssueSeverityLevel getSeverityLevel() {
53+
return SupportedIssue.OVERRIDDEN_NON_API_CONSTANT.getLevel();
54+
}
55+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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.api;
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.Field;
12+
import com.jetbrains.php.lang.psi.elements.PhpClass;
13+
import com.jetbrains.php.lang.psi.elements.impl.ClassConstImpl;
14+
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
15+
import com.magento.idea.magento2uct.inspections.php.OverriddenFieldInspection;
16+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
17+
import com.magento.idea.magento2uct.packages.SupportedIssue;
18+
import com.magento.idea.magento2uct.versioning.VersionStateManager;
19+
import org.jetbrains.annotations.NotNull;
20+
21+
public class OverriddenNonApiProperty extends OverriddenFieldInspection {
22+
23+
@Override
24+
protected void execute(
25+
final Project project,
26+
final @NotNull ProblemsHolder problemsHolder,
27+
final Field property,
28+
final Field overriddenProperty,
29+
final PhpClass parentClass
30+
) {
31+
if (VersionStateManager.getInstance(project).isApi(overriddenProperty.getFQN())) {
32+
return;
33+
}
34+
final String message = SupportedIssue.OVERRIDDEN_NON_API_PROPERTY.getMessage(
35+
overriddenProperty.getFQN().replace(".", "::")
36+
);
37+
38+
if (problemsHolder instanceof UctProblemsHolder) {
39+
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
40+
SupportedIssue.OVERRIDDEN_NON_API_PROPERTY.getCode()
41+
);
42+
}
43+
problemsHolder.registerProblem(property, message, ProblemHighlightType.WARNING);
44+
}
45+
46+
@Override
47+
protected boolean isTypeValid(final Field field) {
48+
return !(field instanceof ClassConstImpl);
49+
}
50+
51+
@Override
52+
protected IssueSeverityLevel getSeverityLevel() {
53+
return SupportedIssue.OVERRIDDEN_NON_API_PROPERTY.getLevel();
54+
}
55+
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import com.magento.idea.magento2uct.inspections.php.api.CalledNonApiMethod;
1313
import com.magento.idea.magento2uct.inspections.php.api.ImportedNonApiClass;
1414
import com.magento.idea.magento2uct.inspections.php.api.ImportedNonApiInterface;
15+
import com.magento.idea.magento2uct.inspections.php.api.OverriddenNonApiConstant;
16+
import com.magento.idea.magento2uct.inspections.php.api.OverriddenNonApiProperty;
1517
import com.magento.idea.magento2uct.inspections.php.deprecation.CallingDeprecatedMethod;
1618
import com.magento.idea.magento2uct.inspections.php.deprecation.ExtendingDeprecatedClass;
1719
import com.magento.idea.magento2uct.inspections.php.deprecation.ImplementedDeprecatedInterface;
@@ -198,6 +200,18 @@ public enum SupportedIssue {
198200
IssueSeverityLevel.ERROR,
199201
"customCode.errors.api.1429",
200202
CalledNonApiMethod.class
203+
),
204+
OVERRIDDEN_NON_API_CONSTANT(
205+
1225,
206+
IssueSeverityLevel.ERROR,
207+
"customCode.errors.api.1225",
208+
OverriddenNonApiConstant.class
209+
),
210+
OVERRIDDEN_NON_API_PROPERTY(
211+
1525,
212+
IssueSeverityLevel.ERROR,
213+
"customCode.errors.api.1525",
214+
OverriddenNonApiProperty.class
201215
);
202216

203217
private final int code;

0 commit comments

Comments
 (0)