7
7
8
8
import com .intellij .codeInspection .ProblemHighlightType ;
9
9
import com .intellij .codeInspection .ProblemsHolder ;
10
+ import com .intellij .psi .PsiElement ;
10
11
import com .intellij .psi .PsiElementVisitor ;
11
12
import com .intellij .psi .PsiFile ;
13
+ import com .intellij .psi .util .PsiTreeUtil ;
12
14
import com .jetbrains .php .lang .inspections .PhpInspection ;
15
+ import com .jetbrains .php .lang .psi .elements .Method ;
16
+ import com .jetbrains .php .lang .psi .elements .MethodReference ;
17
+ import com .jetbrains .php .lang .psi .elements .PhpClass ;
13
18
import com .jetbrains .php .lang .psi .elements .StringLiteralExpression ;
14
19
import com .jetbrains .php .lang .psi .visitors .PhpElementVisitor ;
15
20
import com .magento .idea .magento2plugin .bundles .InspectionBundle ;
16
21
import com .magento .idea .magento2plugin .inspections .php .fix .PhpModuleNameQuickFix ;
17
22
import com .magento .idea .magento2plugin .inspections .util .GetEditableModuleNameByRootFileUtil ;
18
23
import com .magento .idea .magento2plugin .magento .files .RegistrationPhp ;
24
+ import com .magento .idea .magento2plugin .magento .packages .code .FrameworkLibraryType ;
19
25
import com .magento .idea .magento2plugin .util .magento .IsFileInEditableModuleUtil ;
20
26
import org .jetbrains .annotations .NotNull ;
21
27
22
28
public class ModuleDeclarationInRegistrationPhpInspection extends PhpInspection {
23
29
24
- @ NotNull
25
30
@ Override
26
- public PsiElementVisitor buildVisitor (
31
+ public @ NotNull PsiElementVisitor buildVisitor (
27
32
final @ NotNull ProblemsHolder problemsHolder ,
28
33
final boolean isOnTheFly
29
34
) {
@@ -33,19 +38,43 @@ public PsiElementVisitor buildVisitor(
33
38
public void visitPhpStringLiteralExpression (final StringLiteralExpression expression ) {
34
39
final PsiFile file = expression .getContainingFile ();
35
40
final String filename = file .getName ();
36
- if (!filename .equals (RegistrationPhp .FILE_NAME )) {
37
- return ;
41
+
42
+ if (!RegistrationPhp .FILE_NAME .equals (filename )) {
43
+ return ;
44
+ }
45
+ final MethodReference callerReference = PsiTreeUtil .getParentOfType (
46
+ expression ,
47
+ MethodReference .class
48
+ );
49
+
50
+ if (callerReference == null ) {
51
+ return ;
52
+ }
53
+ final PsiElement caller = callerReference .resolve ();
54
+
55
+ if (!(caller instanceof Method )) {
56
+ return ;
38
57
}
58
+ final PhpClass callerOwner = ((Method ) caller ).getContainingClass ();
59
+
60
+ if (callerOwner == null
61
+ || !FrameworkLibraryType .COMPONENT_REGISTRAR .getType ().equals (
62
+ callerOwner .getPresentableFQN ()
63
+ )) {
64
+ return ;
65
+ }
66
+
39
67
if (!IsFileInEditableModuleUtil .execute (file )) {
40
- return ;
68
+ return ;
41
69
}
42
70
final String expectedName = GetEditableModuleNameByRootFileUtil .execute (file );
43
71
final String actualName = expression .getContents ();
72
+
44
73
if (actualName .equals (expectedName )) {
45
- return ;
74
+ return ;
46
75
}
47
-
48
76
final InspectionBundle inspectionBundle = new InspectionBundle ();
77
+
49
78
problemsHolder .registerProblem (
50
79
expression ,
51
80
inspectionBundle .message (
0 commit comments