22 * Copyright © Magento, Inc. All rights reserved.
33 * See COPYING.txt for license details.
44 */
5+
56package com .magento .idea .magento2plugin .stubs .indexes .graphql ;
67
78import 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 ;
918import com .intellij .openapi .vfs .VirtualFile ;
1019import com .intellij .psi .PsiElement ;
20+ import com .intellij .psi .PsiFile ;
1121import com .intellij .psi .PsiManager ;
1222import 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 ;
1428import com .intellij .util .io .EnumeratorStringDescriptor ;
1529import com .intellij .util .io .KeyDescriptor ;
1630import com .jetbrains .php .lang .psi .elements .PhpClass ;
1731import 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 ;
1837import org .jetbrains .annotations .NotNull ;
19- import java .util .*;
2038
2139public class GraphQlResolverIndex extends ScalarIndexExtension <String > {
2240 public static final ID <String , Void > KEY
@@ -30,50 +48,57 @@ public ID<String, Void> getName() {
3048
3149 @ NotNull
3250 @ Override
51+ @ SuppressWarnings ({"PMD.CognitiveComplexity" , "PMD.NPathComplexity" })
3352 public DataIndexer <String , Void , FileContent > getIndexer () {
3453 return inputData -> {
35- Map <String , Void > map = new HashMap <>();
54+ final Map <String , Void > map = new HashMap <>();
3655
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 )) {
4161 continue ;
4262 }
43- PsiElement [] objectChildren = child .getChildren ();
44- for (PsiElement objectChild : objectChildren ) {
63+ final PsiElement [] objectChildren = child .getChildren ();
64+ for (final PsiElement objectChild : objectChildren ) {
4565 if (!(objectChild instanceof GraphQLFieldsDefinition )) {
4666 continue ;
4767 }
48- PsiElement [] fieldsChildren = objectChild .getChildren ();
49- for (PsiElement fieldsChild : fieldsChildren ) {
68+ final PsiElement [] fieldsChildren = objectChild .getChildren ();
69+ for (final PsiElement fieldsChild : fieldsChildren ) {
5070 if (!(fieldsChild instanceof GraphQLFieldDefinition )) {
5171 continue ;
5272 }
53- PsiElement [] fieldChildren = fieldsChild .getChildren ();
54- for (PsiElement fieldChild : fieldChildren ) {
73+ final PsiElement [] fieldChildren = fieldsChild .getChildren ();
74+ for (final PsiElement fieldChild : fieldChildren ) {
5575 if (!(fieldChild instanceof GraphQLDirective )) {
5676 continue ;
5777 }
5878 if (!fieldChild .getText ().startsWith ("@resolver" )) {
5979 continue ;
6080 }
6181
62- PsiElement [] directiveChildren = fieldChild .getChildren ();
82+ final PsiElement [] directiveChildren = fieldChild .getChildren ();
6383
64- for (PsiElement directiveChild : directiveChildren ) {
84+ for (final PsiElement directiveChild : directiveChildren ) {
6585 if (!(directiveChild instanceof GraphQLArguments )) {
6686 continue ;
6787 }
6888
69- PsiElement [] argumentsChildren = directiveChild .getChildren ();
70- for (PsiElement argumentsChild : argumentsChildren ) {
89+ final PsiElement [] argumentsChildren = directiveChild .getChildren ();
90+ for (final PsiElement argumentsChild : argumentsChildren ) {
7191 if (!(argumentsChild instanceof GraphQLArgument )) {
7292 continue ;
7393 }
7494
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+ }
77102
78103 String resolverFQN = argumentStringValue .getText ();
79104 if (resolverFQN == null ) {
@@ -103,8 +128,8 @@ public KeyDescriptor<String> getKeyDescriptor() {
103128 @ NotNull
104129 @ Override
105130 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 ( ));
108133 }
109134
110135 @ Override
@@ -117,28 +142,44 @@ public int getVersion() {
117142 return 1 ;
118143 }
119144
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 )) {
132168 continue ;
133169 }
134- PsiElement [] children = file .getChildren ();
170+ final GraphQLFile file = (GraphQLFile ) fileCandidate ;
171+ final PsiElement [] children = file .getChildren ();
135172 findMatchingQuotedString (children , classFqn , quotedStrings );
136173 }
137174 return quotedStrings ;
138175 }
139176
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 ) {
142183 if (!(element instanceof GraphQLArgument ) && element .getChildren ().length == 0 ) {
143184 continue ;
144185 }
@@ -147,16 +188,19 @@ private static PsiElement findMatchingQuotedString(PsiElement[] psiElements, Str
147188 continue ;
148189 }
149190
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+ }
152196
153197 String resolverFQN = argumentStringValue .getText ();
154198 if (resolverFQN == null ) {
155199 return null ;
156200 }
157-
201+
158202 resolverFQN = GraphQlUtil .resolverStringToPhpFQN (resolverFQN );
159-
203+
160204 if (!resolverFQN .equals (classFqn )) {
161205 continue ;
162206 }
0 commit comments