Skip to content

Commit 4f2a8b7

Browse files
Merge pull request #927 from doninAtwix/907-fix-ClassCastException
907: Fix class cast exception
2 parents 541ffb9 + 3dfbd61 commit 4f2a8b7

File tree

1 file changed

+85
-41
lines changed

1 file changed

+85
-41
lines changed

src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java

+85-41
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,39 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.stubs.indexes.graphql;
67

78
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;
918
import com.intellij.openapi.vfs.VirtualFile;
1019
import com.intellij.psi.PsiElement;
20+
import com.intellij.psi.PsiFile;
1121
import com.intellij.psi.PsiManager;
1222
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;
1428
import com.intellij.util.io.EnumeratorStringDescriptor;
1529
import com.intellij.util.io.KeyDescriptor;
1630
import com.jetbrains.php.lang.psi.elements.PhpClass;
1731
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;
1837
import org.jetbrains.annotations.NotNull;
19-
import java.util.*;
2038

2139
public 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

Comments
 (0)