2
2
* Copyright © Magento, Inc. All rights reserved.
3
3
* See COPYING.txt for license details.
4
4
*/
5
+
5
6
package com .magento .idea .magento2plugin .stubs .indexes .graphql ;
6
7
7
8
import com .intellij .lang .jsgraphql .GraphQLFileType ;
8
- import com .intellij .lang .jsgraphql .psi .*;
9
+ import com .intellij .lang .jsgraphql .psi .GraphQLArgument ;
10
+ import com .intellij .lang .jsgraphql .psi .GraphQLArguments ;
11
+ import com .intellij .lang .jsgraphql .psi .GraphQLDirective ;
12
+ import com .intellij .lang .jsgraphql .psi .GraphQLFieldDefinition ;
13
+ import com .intellij .lang .jsgraphql .psi .GraphQLFieldsDefinition ;
14
+ import com .intellij .lang .jsgraphql .psi .GraphQLFile ;
15
+ import com .intellij .lang .jsgraphql .psi .GraphQLInterfaceTypeDefinition ;
16
+ import com .intellij .lang .jsgraphql .psi .GraphQLObjectTypeDefinition ;
17
+ import com .intellij .lang .jsgraphql .psi .GraphQLQuotedString ;
9
18
import com .intellij .openapi .vfs .VirtualFile ;
10
19
import com .intellij .psi .PsiElement ;
20
+ import com .intellij .psi .PsiFile ;
11
21
import com .intellij .psi .PsiManager ;
12
22
import com .intellij .psi .search .GlobalSearchScope ;
13
- import com .intellij .util .indexing .*;
23
+ import com .intellij .util .indexing .DataIndexer ;
24
+ import com .intellij .util .indexing .FileBasedIndex ;
25
+ import com .intellij .util .indexing .FileContent ;
26
+ import com .intellij .util .indexing .ID ;
27
+ import com .intellij .util .indexing .ScalarIndexExtension ;
14
28
import com .intellij .util .io .EnumeratorStringDescriptor ;
15
29
import com .intellij .util .io .KeyDescriptor ;
16
30
import com .jetbrains .php .lang .psi .elements .PhpClass ;
17
31
import com .magento .idea .magento2plugin .util .magento .graphql .GraphQlUtil ;
32
+ import java .util .ArrayList ;
33
+ import java .util .Collection ;
34
+ import java .util .HashMap ;
35
+ import java .util .List ;
36
+ import java .util .Map ;
18
37
import org .jetbrains .annotations .NotNull ;
19
- import java .util .*;
20
38
21
39
public class GraphQlResolverIndex extends ScalarIndexExtension <String > {
22
40
public static final ID <String , Void > KEY
@@ -30,50 +48,57 @@ public ID<String, Void> getName() {
30
48
31
49
@ NotNull
32
50
@ Override
51
+ @ SuppressWarnings ({"PMD.CognitiveComplexity" , "PMD.NPathComplexity" })
33
52
public DataIndexer <String , Void , FileContent > getIndexer () {
34
53
return inputData -> {
35
- Map <String , Void > map = new HashMap <>();
54
+ final Map <String , Void > map = new HashMap <>();
36
55
37
- GraphQLFile graphQLFile = (GraphQLFile ) inputData .getPsiFile ();
38
- PsiElement [] children = graphQLFile .getChildren ();
39
- for (PsiElement child : children ) {
40
- if (!(child instanceof GraphQLObjectTypeDefinition ) && !(child instanceof GraphQLInterfaceTypeDefinition )) {
56
+ final GraphQLFile graphQLFile = (GraphQLFile ) inputData .getPsiFile ();
57
+ final PsiElement [] children = graphQLFile .getChildren ();
58
+ for (final PsiElement child : children ) {
59
+ if (!(child instanceof GraphQLObjectTypeDefinition )
60
+ && !(child instanceof GraphQLInterfaceTypeDefinition )) {
41
61
continue ;
42
62
}
43
- PsiElement [] objectChildren = child .getChildren ();
44
- for (PsiElement objectChild : objectChildren ) {
63
+ final PsiElement [] objectChildren = child .getChildren ();
64
+ for (final PsiElement objectChild : objectChildren ) {
45
65
if (!(objectChild instanceof GraphQLFieldsDefinition )) {
46
66
continue ;
47
67
}
48
- PsiElement [] fieldsChildren = objectChild .getChildren ();
49
- for (PsiElement fieldsChild : fieldsChildren ) {
68
+ final PsiElement [] fieldsChildren = objectChild .getChildren ();
69
+ for (final PsiElement fieldsChild : fieldsChildren ) {
50
70
if (!(fieldsChild instanceof GraphQLFieldDefinition )) {
51
71
continue ;
52
72
}
53
- PsiElement [] fieldChildren = fieldsChild .getChildren ();
54
- for (PsiElement fieldChild : fieldChildren ) {
73
+ final PsiElement [] fieldChildren = fieldsChild .getChildren ();
74
+ for (final PsiElement fieldChild : fieldChildren ) {
55
75
if (!(fieldChild instanceof GraphQLDirective )) {
56
76
continue ;
57
77
}
58
78
if (!fieldChild .getText ().startsWith ("@resolver" )) {
59
79
continue ;
60
80
}
61
81
62
- PsiElement [] directiveChildren = fieldChild .getChildren ();
82
+ final PsiElement [] directiveChildren = fieldChild .getChildren ();
63
83
64
- for (PsiElement directiveChild : directiveChildren ) {
84
+ for (final PsiElement directiveChild : directiveChildren ) {
65
85
if (!(directiveChild instanceof GraphQLArguments )) {
66
86
continue ;
67
87
}
68
88
69
- PsiElement [] argumentsChildren = directiveChild .getChildren ();
70
- for (PsiElement argumentsChild : argumentsChildren ) {
89
+ final PsiElement [] argumentsChildren = directiveChild .getChildren ();
90
+ for (final PsiElement argumentsChild : argumentsChildren ) {
71
91
if (!(argumentsChild instanceof GraphQLArgument )) {
72
92
continue ;
73
93
}
74
94
75
- PsiElement argumentStringValue = GraphQlUtil .fetchResolverQuotedStringFromArgument (argumentsChild );
76
- if (argumentStringValue == null ) continue ;
95
+ final PsiElement argumentStringValue =
96
+ GraphQlUtil .fetchResolverQuotedStringFromArgument (
97
+ argumentsChild
98
+ );
99
+ if (argumentStringValue == null ) {
100
+ continue ;
101
+ }
77
102
78
103
String resolverFQN = argumentStringValue .getText ();
79
104
if (resolverFQN == null ) {
@@ -103,8 +128,8 @@ public KeyDescriptor<String> getKeyDescriptor() {
103
128
@ NotNull
104
129
@ Override
105
130
public FileBasedIndex .InputFilter getInputFilter () {
106
- return virtualFile -> ( virtualFile .getFileType () == GraphQLFileType .INSTANCE
107
- && virtualFile . getName (). equals ( "schema.graphqls" ));
131
+ return virtualFile -> virtualFile .getFileType () == GraphQLFileType .INSTANCE
132
+ && "schema.graphqls" . equals ( virtualFile . getName ( ));
108
133
}
109
134
110
135
@ Override
@@ -117,28 +142,44 @@ public int getVersion() {
117
142
return 1 ;
118
143
}
119
144
120
-
121
- public static List <GraphQLQuotedString > getGraphQLUsages (@ NotNull PhpClass phpClass ) {
122
- List <GraphQLQuotedString > quotedStrings = new ArrayList <>();
123
-
124
- String classFqn = phpClass .getFQN ();
125
- Collection <VirtualFile > containingFiles = FileBasedIndex
126
- .getInstance ().getContainingFiles (KEY , classFqn , GlobalSearchScope .allScope (phpClass .getProject ()));
127
-
128
- PsiManager psiManager = PsiManager .getInstance (phpClass .getProject ());
129
- for (VirtualFile virtualFile : containingFiles ) {
130
- GraphQLFile file = (GraphQLFile ) psiManager .findFile (virtualFile );
131
- if (file == null ) {
145
+ /**
146
+ * Get GraphQL Usages.
147
+ *
148
+ * @param phpClass PhpClass
149
+ *
150
+ * @return List[GraphQLQuotedString]
151
+ */
152
+ public static List <GraphQLQuotedString > getGraphQLUsages (final @ NotNull PhpClass phpClass ) {
153
+ final List <GraphQLQuotedString > quotedStrings = new ArrayList <>();
154
+
155
+ final String classFqn = phpClass .getFQN ();
156
+ final Collection <VirtualFile > containingFiles = FileBasedIndex
157
+ .getInstance ().getContainingFiles (
158
+ KEY ,
159
+ classFqn ,
160
+ GlobalSearchScope .allScope (phpClass .getProject ())
161
+ );
162
+
163
+ final PsiManager psiManager = PsiManager .getInstance (phpClass .getProject ());
164
+ for (final VirtualFile virtualFile : containingFiles ) {
165
+ final PsiFile fileCandidate = psiManager .findFile (virtualFile );
166
+
167
+ if (!(fileCandidate instanceof GraphQLFile )) {
132
168
continue ;
133
169
}
134
- PsiElement [] children = file .getChildren ();
170
+ final GraphQLFile file = (GraphQLFile ) fileCandidate ;
171
+ final PsiElement [] children = file .getChildren ();
135
172
findMatchingQuotedString (children , classFqn , quotedStrings );
136
173
}
137
174
return quotedStrings ;
138
175
}
139
176
140
- private static PsiElement findMatchingQuotedString (PsiElement [] psiElements , String classFqn , List <GraphQLQuotedString > quotedStrings ) {
141
- for (PsiElement element : psiElements ) {
177
+ private static PsiElement findMatchingQuotedString (
178
+ final PsiElement [] psiElements ,
179
+ final String classFqn ,
180
+ final List <GraphQLQuotedString > quotedStrings
181
+ ) {
182
+ for (final PsiElement element : psiElements ) {
142
183
if (!(element instanceof GraphQLArgument ) && element .getChildren ().length == 0 ) {
143
184
continue ;
144
185
}
@@ -147,16 +188,19 @@ private static PsiElement findMatchingQuotedString(PsiElement[] psiElements, Str
147
188
continue ;
148
189
}
149
190
150
- PsiElement argumentStringValue = GraphQlUtil .fetchResolverQuotedStringFromArgument (element );
151
- if (argumentStringValue == null ) continue ;
191
+ final PsiElement argumentStringValue =
192
+ GraphQlUtil .fetchResolverQuotedStringFromArgument (element );
193
+ if (argumentStringValue == null ) {
194
+ continue ;
195
+ }
152
196
153
197
String resolverFQN = argumentStringValue .getText ();
154
198
if (resolverFQN == null ) {
155
199
return null ;
156
200
}
157
-
201
+
158
202
resolverFQN = GraphQlUtil .resolverStringToPhpFQN (resolverFQN );
159
-
203
+
160
204
if (!resolverFQN .equals (classFqn )) {
161
205
continue ;
162
206
}
0 commit comments