9
9
import com .intellij .psi .PsiElement ;
10
10
import com .intellij .psi .PsiFile ;
11
11
import com .intellij .psi .PsiReference ;
12
+ import com .intellij .psi .PsiReferenceProvider ;
12
13
import com .intellij .psi .ResolveResult ;
13
14
import com .intellij .psi .impl .file .PsiDirectoryImpl ;
14
15
import com .intellij .psi .xml .XmlAttributeValue ;
15
16
import com .intellij .psi .xml .XmlFile ;
16
17
import com .intellij .psi .xml .XmlTag ;
18
+ import com .intellij .util .ProcessingContext ;
17
19
import com .jetbrains .php .lang .psi .elements .Method ;
18
20
import com .jetbrains .php .lang .psi .elements .Parameter ;
19
21
import com .jetbrains .php .lang .psi .elements .ParameterList ;
20
22
import com .jetbrains .php .lang .psi .elements .PhpClass ;
21
23
import com .magento .idea .magento2plugin .inspections .BaseInspectionsTestCase ;
22
24
import com .magento .idea .magento2plugin .magento .packages .File ;
23
25
import com .magento .idea .magento2plugin .reference .xml .PolyVariantReferenceBase ;
26
+ import java .lang .reflect .InvocationTargetException ;
27
+ import java .util .ArrayList ;
28
+ import java .util .Arrays ;
29
+ import java .util .List ;
24
30
import org .jetbrains .annotations .Nullable ;
25
31
26
32
@ SuppressWarnings ({
@@ -36,6 +42,7 @@ protected void setUp() throws Exception {
36
42
myFixture .setTestDataPath (testDataFolderPath );
37
43
}
38
44
45
+ @ SuppressWarnings ("PMD.CognitiveComplexity" )
39
46
protected void assertHasReferenceToXmlAttributeValue (final String reference ) {
40
47
final PsiElement element = getElementFromCaret ();
41
48
for (final PsiReference psiReference : element .getReferences ()) {
@@ -70,6 +77,7 @@ protected void assertHasReferenceToXmlAttributeValue(final String reference) {
70
77
fail (String .format (referenceNotFound , reference ));
71
78
}
72
79
80
+ @ SuppressWarnings ("PMD.CognitiveComplexity" )
73
81
protected void assertHasReferenceToXmlTag (final String tagName ) {
74
82
final PsiElement element = getElementFromCaret ();
75
83
for (final PsiReference psiReference : element .getReferences ()) {
@@ -106,7 +114,40 @@ protected void assertHasReferenceToXmlTag(final String tagName) {
106
114
107
115
protected void assertHasReferenceToFile (final String reference ) {
108
116
final PsiElement element = getElementFromCaret ();
109
- for (final PsiReference psiReference : element .getReferences ()) {
117
+
118
+ assertHasReferenceToFile (reference , Arrays .asList (element .getReferences ()));
119
+ }
120
+
121
+ protected void assertHasReferenceToFile (
122
+ final String reference ,
123
+ final Class <? extends PsiReferenceProvider > providerClass
124
+ ) {
125
+ final PsiElement element = getLeafElementFromCaret ();
126
+ final List <PsiReference > references = new ArrayList <>();
127
+
128
+ try {
129
+ final PsiReferenceProvider provider = providerClass .getConstructor ().newInstance ();
130
+ references .addAll (
131
+ Arrays .asList (
132
+ provider .getReferencesByElement (element , new ProcessingContext ())
133
+ )
134
+ );
135
+ } catch (NoSuchMethodException
136
+ | IllegalAccessException
137
+ | InvocationTargetException
138
+ | InstantiationException exception
139
+ ) {
140
+ references .addAll (Arrays .asList (element .getReferences ()));
141
+ }
142
+
143
+ assertHasReferenceToFile (reference , references );
144
+ }
145
+
146
+ protected void assertHasReferenceToFile (
147
+ final String reference ,
148
+ final List <PsiReference > references
149
+ ) {
150
+ for (final PsiReference psiReference : references ) {
110
151
final PsiElement resolved = psiReference .resolve ();
111
152
if (!(resolved instanceof PsiFile )) {
112
153
continue ;
@@ -250,4 +291,8 @@ protected void assertEmptyReference() {
250
291
private PsiElement getElementFromCaret () {
251
292
return myFixture .getFile ().findElementAt (myFixture .getCaretOffset ()).getParent ();
252
293
}
294
+
295
+ private PsiElement getLeafElementFromCaret () {
296
+ return myFixture .getFile ().findElementAt (myFixture .getCaretOffset ());
297
+ }
253
298
}
0 commit comments