Skip to content

Commit dfbb120

Browse files
UCT-704: Refactored deprecated inspections, added base class for target inspection
1 parent 0b81f44 commit dfbb120

File tree

4 files changed

+95
-198
lines changed

4 files changed

+95
-198
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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.jetbrains.php.lang.inspections.PhpInspection;
13+
import com.jetbrains.php.lang.psi.elements.ClassReference;
14+
import com.jetbrains.php.lang.psi.elements.PhpClass;
15+
import com.jetbrains.php.lang.psi.resolve.types.PhpTypeAnalyserVisitor;
16+
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
17+
import com.magento.idea.magento2uct.settings.UctSettingsService;
18+
import org.jetbrains.annotations.NotNull;
19+
20+
public abstract class UsedTypeInspection extends PhpInspection {
21+
22+
@Override
23+
public @NotNull PsiElementVisitor buildVisitor(
24+
final @NotNull ProblemsHolder problemsHolder,
25+
final boolean isOnTheFly
26+
) {
27+
return new PhpTypeAnalyserVisitor() {
28+
29+
@Override
30+
public void visitPhpClassReference(final ClassReference reference) {
31+
final Project project = reference.getProject();
32+
final UctSettingsService settings = UctSettingsService.getInstance(project);
33+
34+
if (!settings.isEnabled()
35+
|| !settings.isIssueLevelSatisfiable(getSeverityLevel())) {
36+
return;
37+
}
38+
final PsiElement resolved = reference.resolve();
39+
40+
if (!(resolved instanceof PhpClass)) {
41+
return;
42+
}
43+
final PhpClass phpClass = (PhpClass) resolved;
44+
45+
execute(project, problemsHolder, phpClass, reference);
46+
}
47+
};
48+
}
49+
50+
/**
51+
* Implement this method to specify inspection logic.
52+
*
53+
* @param project Project
54+
* @param problemsHolder ProblemsHolder
55+
* @param phpClass PhpClass
56+
* @param reference ClassReference
57+
*/
58+
protected abstract void execute(
59+
final Project project,
60+
final @NotNull ProblemsHolder problemsHolder,
61+
final PhpClass phpClass,
62+
final ClassReference reference
63+
);
64+
65+
/**
66+
* Implement this method to specify issue severity level for target inspection.
67+
*
68+
* @return IssueSeverityLevel
69+
*/
70+
protected abstract IssueSeverityLevel getSeverityLevel();
71+
}

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

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,27 @@
77

88
import com.intellij.codeInspection.ProblemHighlightType;
99
import com.intellij.codeInspection.ProblemsHolder;
10+
import com.intellij.openapi.project.Project;
1011
import com.jetbrains.php.lang.psi.elements.ClassReference;
11-
import com.jetbrains.php.lang.psi.elements.Field;
12+
import com.jetbrains.php.lang.psi.elements.PhpClass;
1213
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
14+
import com.magento.idea.magento2uct.inspections.php.UsedTypeInspection;
1315
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
1416
import com.magento.idea.magento2uct.packages.SupportedIssue;
17+
import com.magento.idea.magento2uct.versioning.VersionStateManager;
1518
import org.jetbrains.annotations.NotNull;
1619

17-
public class UsingDeprecatedClass extends UsingDeprecatedType {
20+
public class UsingDeprecatedClass extends UsedTypeInspection {
1821

1922
@Override
20-
protected void registerProblem(
23+
protected void execute(
24+
final Project project,
2125
final @NotNull ProblemsHolder problemsHolder,
22-
final Field field,
23-
final String fieldClass,
24-
final boolean isInterface
26+
final PhpClass phpClass,
27+
final ClassReference reference
2528
) {
26-
if (isInterface) {
27-
return;
28-
}
29-
if (problemsHolder instanceof UctProblemsHolder) {
30-
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
31-
SupportedIssue.USING_DEPRECATED_CLASS.getCode()
32-
);
33-
}
34-
problemsHolder.registerProblem(
35-
field,
36-
SupportedIssue.USING_DEPRECATED_CLASS.getMessage(fieldClass),
37-
ProblemHighlightType.LIKE_DEPRECATED
38-
);
39-
}
40-
41-
@Override
42-
protected void registerReferenceProblem(
43-
final @NotNull ProblemsHolder problemsHolder,
44-
final ClassReference reference,
45-
final String deprecatedType,
46-
final boolean isInterface
47-
) {
48-
if (isInterface) {
29+
if (phpClass.isInterface()
30+
|| !VersionStateManager.getInstance(project).isDeprecated(phpClass.getFQN())) {
4931
return;
5032
}
5133
if (problemsHolder instanceof UctProblemsHolder) {
@@ -55,7 +37,7 @@ protected void registerReferenceProblem(
5537
}
5638
problemsHolder.registerProblem(
5739
reference,
58-
SupportedIssue.USING_DEPRECATED_CLASS.getMessage(deprecatedType),
40+
SupportedIssue.USING_DEPRECATED_CLASS.getMessage(phpClass.getFQN()),
5941
ProblemHighlightType.LIKE_DEPRECATED
6042
);
6143
}

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

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,55 +7,38 @@
77

88
import com.intellij.codeInspection.ProblemHighlightType;
99
import com.intellij.codeInspection.ProblemsHolder;
10+
import com.intellij.openapi.project.Project;
1011
import com.jetbrains.php.lang.psi.elements.ClassReference;
11-
import com.jetbrains.php.lang.psi.elements.Field;
12+
import com.jetbrains.php.lang.psi.elements.PhpClass;
1213
import com.magento.idea.magento2uct.inspections.UctProblemsHolder;
14+
import com.magento.idea.magento2uct.inspections.php.UsedTypeInspection;
1315
import com.magento.idea.magento2uct.packages.IssueSeverityLevel;
1416
import com.magento.idea.magento2uct.packages.SupportedIssue;
17+
import com.magento.idea.magento2uct.versioning.VersionStateManager;
1518
import org.jetbrains.annotations.NotNull;
1619

17-
public class UsingDeprecatedInterface extends UsingDeprecatedType {
20+
public class UsingDeprecatedInterface extends UsedTypeInspection {
1821

1922
@Override
20-
protected void registerProblem(
23+
protected void execute(
24+
final Project project,
2125
final @NotNull ProblemsHolder problemsHolder,
22-
final Field field,
23-
final String fieldInterface,
24-
final boolean isInterface
26+
final PhpClass phpClass,
27+
final ClassReference reference
2528
) {
26-
if (!isInterface) {
29+
if (!phpClass.isInterface()
30+
|| !VersionStateManager.getInstance(project).isDeprecated(phpClass.getFQN())) {
2731
return;
2832
}
29-
if (problemsHolder instanceof UctProblemsHolder) {
30-
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
31-
SupportedIssue.USING_DEPRECATED_INTERFACE.getCode()
32-
);
33-
}
34-
problemsHolder.registerProblem(
35-
field,
36-
SupportedIssue.USING_DEPRECATED_INTERFACE.getMessage(fieldInterface),
37-
ProblemHighlightType.LIKE_DEPRECATED
38-
);
39-
}
4033

41-
@Override
42-
protected void registerReferenceProblem(
43-
final @NotNull ProblemsHolder problemsHolder,
44-
final ClassReference reference,
45-
final String deprecatedType,
46-
final boolean isInterface
47-
) {
48-
if (!isInterface) {
49-
return;
50-
}
5134
if (problemsHolder instanceof UctProblemsHolder) {
5235
((UctProblemsHolder) problemsHolder).setReservedErrorCode(
5336
SupportedIssue.USING_DEPRECATED_INTERFACE.getCode()
5437
);
5538
}
5639
problemsHolder.registerProblem(
5740
reference,
58-
SupportedIssue.USING_DEPRECATED_INTERFACE.getMessage(deprecatedType),
41+
SupportedIssue.USING_DEPRECATED_INTERFACE.getMessage(phpClass.getFQN()),
5942
ProblemHighlightType.LIKE_DEPRECATED
6043
);
6144
}

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

Lines changed: 0 additions & 139 deletions
This file was deleted.

0 commit comments

Comments
 (0)