From 47ad1309e686ec360c0d34892e5a36726f348808 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 24 Nov 2020 12:09:13 +0530 Subject: [PATCH 1/2] Added QuickFix for missing GraphQL resolver --- resources/magento2/inspection.properties | 1 + .../graphqls/SchemaResolverInspection.java | 30 +++++---- .../fix/CreateResolverClassQuickFix.java | 62 +++++++++++++++++++ 3 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 src/com/magento/idea/magento2plugin/inspections/graphqls/fix/CreateResolverClassQuickFix.java diff --git a/resources/magento2/inspection.properties b/resources/magento2/inspection.properties index ede358bac..f28b881a6 100644 --- a/resources/magento2/inspection.properties +++ b/resources/magento2/inspection.properties @@ -5,6 +5,7 @@ inspection.graphql.resolver.mustImplement=Class must implements any of the follo inspection.graphql.resolver.notExist=Resolver class do not exist inspection.graphql.resolver.fix.family=Implement Resolver interface inspection.graphql.resolver.fix.title=Select one of the following interface +inspection.graphql.schema.resolver.fix.family=Create GraphQL Resolver inspection.plugin.error.nonPublicMethod=You can't declare a plugin for a not public method. inspection.plugin.error.finalClass=You can't declare a plugin for a final class. inspection.plugin.error.finalMethod=You can't declare a plugin for a final method. diff --git a/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java b/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java index 143ae7fe7..bf327f68a 100644 --- a/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java +++ b/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java @@ -12,6 +12,7 @@ import com.intellij.lang.jsgraphql.psi.GraphQLVisitor; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.bundles.InspectionBundle; +import com.magento.idea.magento2plugin.inspections.graphqls.fix.CreateResolverClassQuickFix; import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; import com.magento.idea.magento2plugin.util.magento.graphql.GraphQlUtil; import org.jetbrains.annotations.NotNull; @@ -22,24 +23,31 @@ public class SchemaResolverInspection extends LocalInspectionTool { @NotNull @Override - public GraphQLVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { + public GraphQLVisitor buildVisitor( + @NotNull final ProblemsHolder holder, + final boolean isOnTheFly + ) { return new GraphQLVisitor() { @Override - public void visitValue(@NotNull GraphQLValue element) { - String getVisitedElementValue = element.getText(); + public void visitValue(@NotNull final GraphQLValue element) { + final String getVisitedElementValue = element.getText(); if (getVisitedElementValue == null) { return; } - String resolverFQN = GraphQlUtil.resolverStringToPhpFQN(getVisitedElementValue); - GetPhpClassByFQN getPhpClassByFQN = GetPhpClassByFQN.getInstance(holder.getProject()); - PhpClass resolverClass = getPhpClassByFQN.execute(resolverFQN); + final String resolverFQN + = GraphQlUtil.resolverStringToPhpFQN(getVisitedElementValue); + final GetPhpClassByFQN getPhpClassByFQN + = GetPhpClassByFQN.getInstance(holder.getProject()); + final PhpClass resolverClass = getPhpClassByFQN.execute(resolverFQN); if (resolverClass == null) { - holder.registerProblem(element, - inspectionBundle.message( - "inspection.graphql.resolver.notExist" - ), - ProblemHighlightType.ERROR); + holder.registerProblem( + element, + inspectionBundle.message( + "inspection.graphql.resolver.notExist" + ), + ProblemHighlightType.ERROR, + new CreateResolverClassQuickFix()); return; } if (!GraphQlUtil.isResolver(resolverClass)) { diff --git a/src/com/magento/idea/magento2plugin/inspections/graphqls/fix/CreateResolverClassQuickFix.java b/src/com/magento/idea/magento2plugin/inspections/graphqls/fix/CreateResolverClassQuickFix.java new file mode 100644 index 000000000..8b5ac5d48 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/inspections/graphqls/fix/CreateResolverClassQuickFix.java @@ -0,0 +1,62 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.inspections.graphqls.fix; + +import com.google.common.base.Strings; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; +import com.magento.idea.magento2plugin.actions.generation.NewGraphQlResolverAction; +import com.magento.idea.magento2plugin.actions.generation.data.GraphQlResolverFileData; +import com.magento.idea.magento2plugin.actions.generation.generator.ModuleGraphQlResolverClassGenerator; +import com.magento.idea.magento2plugin.bundles.InspectionBundle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; + +public class CreateResolverClassQuickFix implements LocalQuickFix { + @Override + public @Nls(capitalization = Nls.Capitalization.Sentence) @NotNull String getFamilyName() { + return new InspectionBundle().message( + "inspection.graphql.schema.resolver.fix.family" + ); + } + + @Override + public void applyFix( + @NotNull final Project project, + @NotNull final ProblemDescriptor descriptor + ) { + final String resolverFqn = StringUtil.unquoteString(descriptor.getPsiElement().getText()) + .replace("\\\\", "\\"); + final List fqnPartsList + = new ArrayList<>(Arrays.asList(resolverFqn.split("\\\\"))); + + fqnPartsList.removeIf(Strings::isNullOrEmpty); + + final int endIndex = fqnPartsList.size() - 1; + final String moduleName = String.join("_", fqnPartsList.subList(0, 2)); + final String resolverName = fqnPartsList.get(endIndex); + final String directory = fqnPartsList.get(2); + final String namespace = String.join("\\", fqnPartsList.subList(0, endIndex)); + + final GraphQlResolverFileData graphQlResolverFileData = new GraphQlResolverFileData( + directory, + resolverName, + moduleName, + resolverFqn, + namespace + ); + + final ModuleGraphQlResolverClassGenerator generator + = new ModuleGraphQlResolverClassGenerator(graphQlResolverFileData, project); + + generator.generate(NewGraphQlResolverAction.ACTION_NAME, true); + } +} From f971b00174f6873ac79f13b7e308cbf641cf21a8 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 24 Nov 2020 12:16:49 +0530 Subject: [PATCH 2/2] Fixed CheckStyle issues --- .../graphqls/SchemaResolverInspection.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java b/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java index bf327f68a..28de3bd91 100644 --- a/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java +++ b/src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java @@ -48,14 +48,14 @@ public void visitValue(@NotNull final GraphQLValue element) { ), ProblemHighlightType.ERROR, new CreateResolverClassQuickFix()); - return; - } - if (!GraphQlUtil.isResolver(resolverClass)) { - holder.registerProblem(element, - inspectionBundle.message( - "inspection.graphql.resolver.mustImplement" - ), - ProblemHighlightType.ERROR); + } else if (!GraphQlUtil.isResolver(resolverClass)) { + holder.registerProblem( + element, + inspectionBundle.message( + "inspection.graphql.resolver.mustImplement" + ), + ProblemHighlightType.ERROR + ); } } };