Skip to content

Commit f268ef6

Browse files
author
makzef
committed
1135: Fixed issues with incorrect generation of resolver class
1 parent 31e26e2 commit f268ef6

File tree

4 files changed

+54
-8
lines changed

4 files changed

+54
-8
lines changed

resources/magento2/inspection.properties

+3
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,6 @@ inspection.warning.class.does.not.exist=The class "{0}" does not exist
3939
inspection.warning.method.does.not.exist=The method "{0}" does not exist in the service class
4040
inspection.warning.method.should.have.public.access=The method "{0}" should have public access
4141
inspection.warning.method.should.have.public.access.fix=Change the method access
42+
inspection.warning.class.invalidFormat=The class "{0}" has invalid format
43+
inspection.error.class.tooShortFormat=The target resolver class format is incorrect.\nThe fully qualified name "{0}" should contain at least 3 parts.
44+
inspection.error.class.tooShortFormatTitle=Resolver class format is incorrect

src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleGraphQlResolverClassGenerator.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.magento.idea.magento2plugin.bundles.ValidatorBundle;
2626
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
2727
import com.magento.idea.magento2plugin.magento.files.GraphQlResolverPhp;
28-
import com.magento.idea.magento2plugin.magento.packages.File;
2928
import com.magento.idea.magento2plugin.magento.packages.MagentoPhpClass;
3029
import com.magento.idea.magento2plugin.util.GetFirstClassOfFile;
3130
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
@@ -132,10 +131,11 @@ private PhpClass createGraphQlResolverClass(final String actionName) {
132131
if (parentDirectory == null) {
133132
return null;
134133
}
135-
final String[] graphQlResolverDirectories = graphQlResolverFileData
136-
.getGraphQlResolverDirectory().split(File.separator);
137-
for (final String graphQlResolverDirectory: graphQlResolverDirectories) {
138-
parentDirectory = directoryGenerator.findOrCreateSubdirectory(
134+
135+
final String graphQlResolverDirectory = graphQlResolverFileData
136+
.getGraphQlResolverDirectory();
137+
if (!graphQlResolverDirectory.isBlank()) {
138+
parentDirectory = directoryGenerator.findOrCreateSubdirectories(
139139
parentDirectory,
140140
graphQlResolverDirectory
141141
);

src/com/magento/idea/magento2plugin/inspections/graphqls/SchemaResolverInspection.java

+27-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
import com.intellij.codeInspection.LocalInspectionTool;
99
import com.intellij.codeInspection.ProblemHighlightType;
1010
import com.intellij.codeInspection.ProblemsHolder;
11+
import com.intellij.lang.jsgraphql.psi.GraphQLNamedElement;
1112
import com.intellij.lang.jsgraphql.psi.GraphQLValue;
1213
import com.intellij.lang.jsgraphql.psi.GraphQLVisitor;
14+
import com.intellij.psi.PsiElement;
1315
import com.jetbrains.php.lang.psi.elements.PhpClass;
1416
import com.magento.idea.magento2plugin.bundles.InspectionBundle;
1517
import com.magento.idea.magento2plugin.inspections.graphqls.fix.CreateResolverClassQuickFix;
18+
import com.magento.idea.magento2plugin.magento.files.GraphQlResolver;
1619
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
20+
import com.magento.idea.magento2plugin.util.RegExUtil;
1721
import com.magento.idea.magento2plugin.util.magento.graphql.GraphQlUtil;
1822
import org.jetbrains.annotations.NotNull;
1923

@@ -31,20 +35,41 @@ public GraphQLVisitor buildVisitor(
3135
@Override
3236
public void visitValue(@NotNull final GraphQLValue element) {
3337
final String getVisitedElementValue = element.getText();
34-
if (getVisitedElementValue == null) {
38+
final PsiElement parentElementValue = element.getParent();
39+
if (getVisitedElementValue == null
40+
|| !(parentElementValue instanceof GraphQLNamedElement)) {
41+
return;
42+
}
43+
44+
final String attributeName = ((GraphQLNamedElement) parentElementValue).getName();
45+
if (!GraphQlResolver.CLASS_ARGUMENT.equals(attributeName)) {
3546
return;
3647
}
3748

3849
final String resolverFQN
3950
= GraphQlUtil.resolverStringToPhpFQN(getVisitedElementValue);
51+
if (!resolverFQN.matches(RegExUtil.PhpRegex.FQN)) {
52+
holder.registerProblem(
53+
element,
54+
inspectionBundle.message(
55+
"inspection.warning.class.invalidFormat",
56+
resolverFQN
57+
),
58+
ProblemHighlightType.WARNING
59+
);
60+
61+
return;
62+
}
63+
4064
final GetPhpClassByFQN getPhpClassByFQN
4165
= GetPhpClassByFQN.getInstance(holder.getProject());
4266
final PhpClass resolverClass = getPhpClassByFQN.execute(resolverFQN);
67+
4368
if (resolverClass == null) {
4469
holder.registerProblem(
4570
element,
4671
inspectionBundle.message(
47-
"inspection.graphql.resolver.notExist"
72+
"inspection.graphql.resolver.notExist"
4873
),
4974
ProblemHighlightType.ERROR,
5075
new CreateResolverClassQuickFix());

src/com/magento/idea/magento2plugin/inspections/graphqls/fix/CreateResolverClassQuickFix.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,19 @@
1414
import com.magento.idea.magento2plugin.actions.generation.data.GraphQlResolverFileData;
1515
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleGraphQlResolverClassGenerator;
1616
import com.magento.idea.magento2plugin.bundles.InspectionBundle;
17+
import com.magento.idea.magento2plugin.magento.packages.File;
1718
import java.util.ArrayList;
1819
import java.util.Arrays;
1920
import java.util.List;
21+
import javax.swing.JOptionPane;
2022
import org.jetbrains.annotations.NotNull;
2123

2224
public class CreateResolverClassQuickFix implements LocalQuickFix {
25+
26+
private static final int CLASSPATH_MIN_DEPTH = 3;
27+
28+
private final InspectionBundle inspectionBundle = new InspectionBundle();
29+
2330
@Override
2431
public @NotNull String getFamilyName() {
2532
return new InspectionBundle().message(
@@ -39,10 +46,21 @@ public void applyFix(
3946

4047
fqnPartsList.removeIf(Strings::isNullOrEmpty);
4148

49+
if (fqnPartsList.size() < CLASSPATH_MIN_DEPTH) {
50+
JOptionPane.showMessageDialog(
51+
null,
52+
inspectionBundle.message("inspection.error.class.tooShortFormat", resolverFqn),
53+
inspectionBundle.message("inspection.error.class.tooShortFormatTitle"),
54+
JOptionPane.ERROR_MESSAGE
55+
);
56+
57+
return;
58+
}
59+
4260
final int endIndex = fqnPartsList.size() - 1;
4361
final String moduleName = String.join("_", fqnPartsList.subList(0, 2));
4462
final String resolverName = fqnPartsList.get(endIndex);
45-
final String directory = fqnPartsList.get(2);
63+
final String directory = String.join(File.separator, fqnPartsList.subList(2, endIndex));
4664
final String namespace = String.join("\\", fqnPartsList.subList(0, endIndex));
4765

4866
final GraphQlResolverFileData graphQlResolverFileData = new GraphQlResolverFileData(

0 commit comments

Comments
 (0)