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