diff --git a/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java b/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java index e3dd7ffb2..05351ddbb 100644 --- a/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java +++ b/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java @@ -2,21 +2,39 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.stubs.indexes.graphql; import com.intellij.lang.jsgraphql.GraphQLFileType; -import com.intellij.lang.jsgraphql.psi.*; +import com.intellij.lang.jsgraphql.psi.GraphQLArgument; +import com.intellij.lang.jsgraphql.psi.GraphQLArguments; +import com.intellij.lang.jsgraphql.psi.GraphQLDirective; +import com.intellij.lang.jsgraphql.psi.GraphQLFieldDefinition; +import com.intellij.lang.jsgraphql.psi.GraphQLFieldsDefinition; +import com.intellij.lang.jsgraphql.psi.GraphQLFile; +import com.intellij.lang.jsgraphql.psi.GraphQLInterfaceTypeDefinition; +import com.intellij.lang.jsgraphql.psi.GraphQLObjectTypeDefinition; +import com.intellij.lang.jsgraphql.psi.GraphQLQuotedString; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.util.indexing.*; +import com.intellij.util.indexing.DataIndexer; +import com.intellij.util.indexing.FileBasedIndex; +import com.intellij.util.indexing.FileContent; +import com.intellij.util.indexing.ID; +import com.intellij.util.indexing.ScalarIndexExtension; import com.intellij.util.io.EnumeratorStringDescriptor; import com.intellij.util.io.KeyDescriptor; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.util.magento.graphql.GraphQlUtil; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.jetbrains.annotations.NotNull; -import java.util.*; public class GraphQlResolverIndex extends ScalarIndexExtension { public static final ID KEY @@ -30,28 +48,30 @@ public ID getName() { @NotNull @Override + @SuppressWarnings({"PMD.CognitiveComplexity", "PMD.NPathComplexity"}) public DataIndexer getIndexer() { return inputData -> { - Map map = new HashMap<>(); + final Map map = new HashMap<>(); - GraphQLFile graphQLFile = (GraphQLFile) inputData.getPsiFile(); - PsiElement[] children = graphQLFile.getChildren(); - for (PsiElement child : children) { - if (!(child instanceof GraphQLObjectTypeDefinition) && !(child instanceof GraphQLInterfaceTypeDefinition)) { + final GraphQLFile graphQLFile = (GraphQLFile) inputData.getPsiFile(); + final PsiElement[] children = graphQLFile.getChildren(); + for (final PsiElement child : children) { + if (!(child instanceof GraphQLObjectTypeDefinition) + && !(child instanceof GraphQLInterfaceTypeDefinition)) { continue; } - PsiElement[] objectChildren = child.getChildren(); - for (PsiElement objectChild : objectChildren) { + final PsiElement[] objectChildren = child.getChildren(); + for (final PsiElement objectChild : objectChildren) { if (!(objectChild instanceof GraphQLFieldsDefinition)) { continue; } - PsiElement[] fieldsChildren = objectChild.getChildren(); - for (PsiElement fieldsChild : fieldsChildren) { + final PsiElement[] fieldsChildren = objectChild.getChildren(); + for (final PsiElement fieldsChild : fieldsChildren) { if (!(fieldsChild instanceof GraphQLFieldDefinition)) { continue; } - PsiElement[] fieldChildren = fieldsChild.getChildren(); - for (PsiElement fieldChild : fieldChildren) { + final PsiElement[] fieldChildren = fieldsChild.getChildren(); + for (final PsiElement fieldChild : fieldChildren) { if (!(fieldChild instanceof GraphQLDirective)) { continue; } @@ -59,21 +79,26 @@ public DataIndexer getIndexer() { continue; } - PsiElement[] directiveChildren = fieldChild.getChildren(); + final PsiElement[] directiveChildren = fieldChild.getChildren(); - for (PsiElement directiveChild : directiveChildren) { + for (final PsiElement directiveChild : directiveChildren) { if (!(directiveChild instanceof GraphQLArguments)) { continue; } - PsiElement[] argumentsChildren = directiveChild.getChildren(); - for (PsiElement argumentsChild : argumentsChildren) { + final PsiElement[] argumentsChildren = directiveChild.getChildren(); + for (final PsiElement argumentsChild : argumentsChildren) { if (!(argumentsChild instanceof GraphQLArgument)) { continue; } - PsiElement argumentStringValue = GraphQlUtil.fetchResolverQuotedStringFromArgument(argumentsChild); - if (argumentStringValue == null) continue; + final PsiElement argumentStringValue = + GraphQlUtil.fetchResolverQuotedStringFromArgument( + argumentsChild + ); + if (argumentStringValue == null) { + continue; + } String resolverFQN = argumentStringValue.getText(); if (resolverFQN == null) { @@ -103,8 +128,8 @@ public KeyDescriptor getKeyDescriptor() { @NotNull @Override public FileBasedIndex.InputFilter getInputFilter() { - return virtualFile -> (virtualFile.getFileType() == GraphQLFileType.INSTANCE - && virtualFile.getName().equals("schema.graphqls")); + return virtualFile -> virtualFile.getFileType() == GraphQLFileType.INSTANCE + && "schema.graphqls".equals(virtualFile.getName()); } @Override @@ -117,28 +142,44 @@ public int getVersion() { return 1; } - - public static List getGraphQLUsages(@NotNull PhpClass phpClass) { - List quotedStrings = new ArrayList<>(); - - String classFqn = phpClass.getFQN(); - Collection containingFiles = FileBasedIndex - .getInstance().getContainingFiles(KEY, classFqn, GlobalSearchScope.allScope(phpClass.getProject())); - - PsiManager psiManager = PsiManager.getInstance(phpClass.getProject()); - for (VirtualFile virtualFile : containingFiles) { - GraphQLFile file = (GraphQLFile) psiManager.findFile(virtualFile); - if (file == null) { + /** + * Get GraphQL Usages. + * + * @param phpClass PhpClass + * + * @return List[GraphQLQuotedString] + */ + public static List getGraphQLUsages(final @NotNull PhpClass phpClass) { + final List quotedStrings = new ArrayList<>(); + + final String classFqn = phpClass.getFQN(); + final Collection containingFiles = FileBasedIndex + .getInstance().getContainingFiles( + KEY, + classFqn, + GlobalSearchScope.allScope(phpClass.getProject()) + ); + + final PsiManager psiManager = PsiManager.getInstance(phpClass.getProject()); + for (final VirtualFile virtualFile : containingFiles) { + final PsiFile fileCandidate = psiManager.findFile(virtualFile); + + if (!(fileCandidate instanceof GraphQLFile)) { continue; } - PsiElement[] children = file.getChildren(); + final GraphQLFile file = (GraphQLFile) fileCandidate; + final PsiElement[] children = file.getChildren(); findMatchingQuotedString(children, classFqn, quotedStrings); } return quotedStrings; } - private static PsiElement findMatchingQuotedString(PsiElement[] psiElements, String classFqn, List quotedStrings) { - for (PsiElement element: psiElements) { + private static PsiElement findMatchingQuotedString( + final PsiElement[] psiElements, + final String classFqn, + final List quotedStrings + ) { + for (final PsiElement element: psiElements) { if (!(element instanceof GraphQLArgument) && element.getChildren().length == 0) { continue; } @@ -147,16 +188,19 @@ private static PsiElement findMatchingQuotedString(PsiElement[] psiElements, Str continue; } - PsiElement argumentStringValue = GraphQlUtil.fetchResolverQuotedStringFromArgument(element); - if (argumentStringValue == null) continue; + final PsiElement argumentStringValue = + GraphQlUtil.fetchResolverQuotedStringFromArgument(element); + if (argumentStringValue == null) { + continue; + } String resolverFQN = argumentStringValue.getText(); if (resolverFQN == null) { return null; } - + resolverFQN = GraphQlUtil.resolverStringToPhpFQN(resolverFQN); - + if (!resolverFQN.equals(classFqn)) { continue; }