@@ -25,55 +25,63 @@ public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder problemsHolder, bo
25
25
return new PhpElementVisitor () {
26
26
@ Override
27
27
public void visitPhpMethodReference (MethodReference reference ) {
28
- MagentoApiInspection .check (reference , "Method #ref is not in module API" , problemsHolder );
28
+ PsiElement referencedElement = reference .resolve ();
29
+
30
+ if (referencedElement instanceof Method ) {
31
+ PhpClass phpClass = ((Method ) referencedElement ).getContainingClass ();
32
+
33
+ if (phpClass == null ) {
34
+ return ;
35
+ }
36
+
37
+ if (!MagentoApiInspection .isValidReference (phpClass , reference .getElement ())
38
+ || !MagentoApiInspection .isValidReference ((Method ) referencedElement , reference .getElement ())) {
39
+ problemsHolder .registerProblem (reference , "Method #ref is not in module API" , ProblemHighlightType .GENERIC_ERROR_OR_WARNING );
40
+ }
41
+ }
29
42
}
30
43
31
44
@ Override
32
- public void visitPhpClassReference (ClassReference classReference ) {
33
- MagentoApiInspection .check (classReference , "Class #ref is not in module API" , problemsHolder );
45
+ public void visitPhpClassReference (ClassReference reference ) {
46
+ PsiElement referencedElement = reference .resolve ();
47
+
48
+ if (referencedElement instanceof PhpClass ) {
49
+ if (!MagentoApiInspection .isValidReference ((PhpClass ) referencedElement , reference .getElement ())) {
50
+ problemsHolder .registerProblem (reference , "Class #ref is not in module API" , ProblemHighlightType .GENERIC_ERROR_OR_WARNING );
51
+ }
52
+ }
34
53
}
35
54
};
36
55
}
37
56
38
- private static void check (PhpReference reference , String desc , ProblemsHolder holder ) {
39
- PsiElement element = reference .resolve ();
57
+ private static boolean isValidReference (PhpNamedElement referencedElement , PsiElement contextElement ) {
58
+ MagentoModule referenceSourceModule = getMagentoModule (referencedElement );
59
+ MagentoModule currentModule = getMagentoModule (contextElement );
40
60
41
- if (element instanceof PhpNamedElement ) {
42
- MagentoModule referenceSourceModule = getMagentoModule ((PhpPsiElement ) element );
43
- MagentoModule currentModule = getMagentoModule ((PhpPsiElement ) (reference .getElement ()));
44
61
62
+ if (!areDifferentModules (referenceSourceModule , currentModule )) {
63
+ return true ;
64
+ }
45
65
46
- if (!areDifferentModules (referenceSourceModule , currentModule )) {
47
- return ;
48
- }
49
-
50
- PhpDocComment docComment = ((PhpNamedElement )element ).getDocComment ();
51
- if (docComment == null ) {
52
- holder .registerProblem (reference , desc , ProblemHighlightType .GENERIC_ERROR_OR_WARNING );
53
- return ;
54
- }
55
-
56
- PhpDocTag [] elements = docComment .getTagElementsByName (API_TAG );
57
- if (elements .length == 0 ) {
58
- holder .registerProblem (reference , desc , ProblemHighlightType .GENERIC_ERROR_OR_WARNING );
59
- }
66
+ PhpDocComment docComment = referencedElement .getDocComment ();
67
+ if (docComment == null ) {
68
+ return false ;
60
69
}
70
+
71
+ PhpDocTag [] elements = docComment .getTagElementsByName (API_TAG );
72
+ return elements .length > 0 ;
61
73
}
62
74
63
- private static MagentoModule getMagentoModule (PhpPsiElement element ) {
75
+ private static MagentoModule getMagentoModule (PsiElement element ) {
64
76
ModuleManager moduleManager = ModuleManager .getInstance (element .getProject ());
65
77
return moduleManager .getModuleForFile (element .getContainingFile ());
66
78
}
67
79
68
- private static boolean areDifferentModules (MagentoModule magentoModule1 , MagentoModule magentoModule2 ) {
69
- if (magentoModule1 == null ) {
70
- return false ;
71
- }
72
-
73
- if (magentoModule2 == null ) {
80
+ private static boolean areDifferentModules (MagentoModule magentoModule , MagentoModule currentPackage ) {
81
+ if (magentoModule == null ) {
74
82
return false ;
75
83
}
76
84
77
- return magentoModule1 != magentoModule2 ;
85
+ return magentoModule != currentPackage ;
78
86
}
79
87
}
0 commit comments