Skip to content

Commit 94e1852

Browse files
UCT-707: Added base class for inspections
1 parent 8d0b7d8 commit 94e1852

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed
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 field Field
94+
* @param fieldReference FieldReference
95+
*/
96+
protected abstract void execute(
97+
final Project project,
98+
final @NotNull ProblemsHolder problemsHolder,
99+
final ClassConstImpl field,
100+
final ClassConstantReference fieldReference
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+
}

0 commit comments

Comments
 (0)