From 20000f8be07ba59ca0dbcf994bdf7921751cfdd5 Mon Sep 17 00:00:00 2001 From: Mykola Donin Date: Fri, 21 Jan 2022 11:43:00 +0200 Subject: [PATCH 1/2] 907: fix ClassCastException --- .../stubs/indexes/graphql/GraphQlResolverIndex.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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..518ab597e 100644 --- a/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java +++ b/src/com/magento/idea/magento2plugin/stubs/indexes/graphql/GraphQlResolverIndex.java @@ -8,6 +8,7 @@ import com.intellij.lang.jsgraphql.psi.*; 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.*; @@ -127,10 +128,12 @@ public static List getGraphQLUsages(@NotNull PhpClass phpCl PsiManager psiManager = PsiManager.getInstance(phpClass.getProject()); for (VirtualFile virtualFile : containingFiles) { - GraphQLFile file = (GraphQLFile) psiManager.findFile(virtualFile); - if (file == null) { + final PsiFile fileCandidate = psiManager.findFile(virtualFile); + + if (!(fileCandidate instanceof GraphQLFile)) { continue; } + GraphQLFile file = (GraphQLFile) fileCandidate; PsiElement[] children = file.getChildren(); findMatchingQuotedString(children, classFqn, quotedStrings); } From 3dfbd61de90fa029233f34a888909bc186e18bec Mon Sep 17 00:00:00 2001 From: Mykola Donin Date: Fri, 21 Jan 2022 12:13:19 +0200 Subject: [PATCH 2/2] 907: fix code style --- .../indexes/graphql/GraphQlResolverIndex.java | 121 ++++++++++++------ 1 file changed, 81 insertions(+), 40 deletions(-) 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 518ab597e..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,22 +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 @@ -31,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; } @@ -60,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) { @@ -104,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 @@ -118,30 +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) { + /** + * 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; } - GraphQLFile file = (GraphQLFile) fileCandidate; - 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; } @@ -150,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; }