Skip to content

Commit 65be14c

Browse files
author
Vitaliy
authored
Merge pull request #175 from konarshankar07/additional-fix-added-for-grapql-resolver--task-169
#169 :- Quick fix for Resolver inspection adds implement directive to the next line
2 parents f0a09fc + 57503bd commit 65be14c

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
inspection.plugin.duplicateInSameFile=The plugin name already used in this file. For more details see Inspection Description.
22
inspection.plugin.duplicateInOtherPlaces=The plugin name "{0}" for targeted "{1}" class is already used in the module "{2}" ({3} scope). For more details see Inspection Description.
3-
inspection.graphql.resolver.mustImplement=Class must implements any of the following interfaces: \\Magento\\Framework\\GraphQl\\Query\\ResolverInterface, \\Magento\\Framework\\GraphQl\\Query\\Resolver\\BatchResolverInterface, \\Magento\\Framework\\GraphQl\\Query\\Resolver\\BatchServiceContractResolverInterface
3+
inspection.graphql.resolver.mustImplement=Class must implements any of the following interfaces: \\Magento\\Framework\\GraphQl\\Query\\ResolverInterface, \\Magento\\Framework\\GraphQl\\Query\\Resolver\\BatchResolverInterface, \\Magento\\Framework\\GraphQl\\Query\\Resolver\\BatchServiceContractResolverInterface
4+
inspection.graphql.resolver.fix.family=Implement Resolver interface
5+
inspection.graphql.resolver.fix.title=Select one of the following interface

src/com/magento/idea/magento2plugin/inspections/php/fix/PhpImplementResolverClassQuickFix.java

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,67 @@
77

88
import com.intellij.codeInspection.LocalQuickFix;
99
import com.intellij.codeInspection.ProblemDescriptor;
10+
import com.intellij.openapi.command.WriteCommandAction;
1011
import com.intellij.openapi.project.Project;
12+
import com.intellij.openapi.ui.DialogBuilder;
1113
import com.intellij.psi.PsiElement;
14+
import com.jetbrains.php.refactoring.extract.extractInterface.PhpExtractInterfaceProcessor;
1215
import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
1316
import com.jetbrains.php.lang.psi.elements.PhpClass;
17+
import com.magento.idea.magento2plugin.bundles.InspectionBundle;
1418
import com.magento.idea.magento2plugin.magento.files.GraphQlResolver;
1519
import org.jetbrains.annotations.NotNull;
20+
import javax.swing.*;
1621

1722
public class PhpImplementResolverClassQuickFix implements LocalQuickFix {
23+
private InspectionBundle inspectionBundle = new InspectionBundle();
24+
1825
@NotNull
1926
@Override
2027
public String getFamilyName() {
21-
return "Implements Resolver interface";
28+
return inspectionBundle.message("inspection.graphql.resolver.fix.family");
2229
}
2330

2431
@Override
2532
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
26-
PsiElement correctInterface = PhpPsiElementFactory.createImplementsList(project, GraphQlResolver.RESOLVER_INTERFACE);
27-
PhpClass graphQlResolverClass = (PhpClass) descriptor.getPsiElement().getParent();
28-
graphQlResolverClass.getImplementsList().replace(correctInterface);
33+
String[] expectedInterface = {
34+
GraphQlResolver.BATCH_RESOLVER_INTERFACE,
35+
GraphQlResolver.BATCH_SERVICE_CONTRACT_RESOLVER_INTERFACE,
36+
GraphQlResolver.RESOLVER_INTERFACE
37+
};
38+
final JComboBox expectedInterfaceDropdown = new JComboBox(expectedInterface);
39+
((JLabel)expectedInterfaceDropdown.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
40+
DialogBuilder dialogBox = createDialogBox(expectedInterfaceDropdown, project);
41+
if (dialogBox.showAndGet()) {
42+
String getSelectedInterface = expectedInterfaceDropdown.getSelectedItem().toString();
43+
final PsiElement erroredElement = descriptor.getPsiElement();
44+
final PsiElement correctInterface = PhpPsiElementFactory.createImplementsList(project, getSelectedInterface);
45+
final PhpClass graphQlResolverClass = (PhpClass) erroredElement.getParent();
46+
String[] implementedInterfaceNames = graphQlResolverClass.getInterfaceNames();
47+
WriteCommandAction.runWriteCommandAction(project, () -> {
48+
if (implementedInterfaceNames.length == 0) {
49+
PhpExtractInterfaceProcessor.addImplementClause(project, graphQlResolverClass, getSelectedInterface);
50+
} else {
51+
graphQlResolverClass.getImplementsList().replace(correctInterface);
52+
}
53+
});
54+
}
55+
}
56+
57+
private DialogBuilder createDialogBox(JComboBox selectedClass, Project project)
58+
{
59+
JPanel panel = new JPanel();
60+
panel.add(selectedClass);
61+
DialogBuilder builder = new DialogBuilder(project);
62+
builder.setTitle(inspectionBundle.message("inspection.graphql.resolver.fix.title"));
63+
builder.setCenterPanel(panel);
64+
builder.addOkAction();
65+
builder.addCancelAction();
66+
return builder;
67+
}
68+
69+
@Override
70+
public boolean startInWriteAction() {
71+
return false;
2972
}
3073
}

0 commit comments

Comments
 (0)