|
8 | 8 | import com.intellij.codeInspection.LocalInspectionTool;
|
9 | 9 | import com.intellij.codeInspection.ProblemHighlightType;
|
10 | 10 | import com.intellij.codeInspection.ProblemsHolder;
|
| 11 | +import com.intellij.lang.jsgraphql.psi.GraphQLNamedElement; |
11 | 12 | import com.intellij.lang.jsgraphql.psi.GraphQLValue;
|
12 | 13 | import com.intellij.lang.jsgraphql.psi.GraphQLVisitor;
|
| 14 | +import com.intellij.psi.PsiElement; |
13 | 15 | import com.jetbrains.php.lang.psi.elements.PhpClass;
|
14 | 16 | import com.magento.idea.magento2plugin.bundles.InspectionBundle;
|
15 | 17 | import com.magento.idea.magento2plugin.inspections.graphqls.fix.CreateResolverClassQuickFix;
|
| 18 | +import com.magento.idea.magento2plugin.magento.files.GraphQlResolver; |
16 | 19 | import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
|
| 20 | +import com.magento.idea.magento2plugin.util.RegExUtil; |
17 | 21 | import com.magento.idea.magento2plugin.util.magento.graphql.GraphQlUtil;
|
18 | 22 | import org.jetbrains.annotations.NotNull;
|
19 | 23 |
|
20 | 24 | public class SchemaResolverInspection extends LocalInspectionTool {
|
21 | 25 |
|
22 | 26 | private final InspectionBundle inspectionBundle = new InspectionBundle();
|
23 | 27 |
|
24 |
| - @NotNull |
25 | 28 | @Override
|
26 |
| - public GraphQLVisitor buildVisitor( |
27 |
| - @NotNull final ProblemsHolder holder, |
| 29 | + public @NotNull GraphQLVisitor buildVisitor( |
| 30 | + final @NotNull ProblemsHolder holder, |
28 | 31 | final boolean isOnTheFly
|
29 | 32 | ) {
|
30 | 33 | return new GraphQLVisitor() {
|
31 | 34 | @Override
|
32 |
| - public void visitValue(@NotNull final GraphQLValue element) { |
| 35 | + public void visitValue(final @NotNull GraphQLValue element) { |
33 | 36 | final String getVisitedElementValue = element.getText();
|
34 |
| - if (getVisitedElementValue == null) { |
| 37 | + final PsiElement parentElementValue = element.getParent(); |
| 38 | + |
| 39 | + if (getVisitedElementValue == null |
| 40 | + || !(parentElementValue instanceof GraphQLNamedElement)) { |
35 | 41 | return;
|
36 | 42 | }
|
| 43 | + final String attributeName = ((GraphQLNamedElement) parentElementValue).getName(); |
37 | 44 |
|
| 45 | + if (!GraphQlResolver.CLASS_ARGUMENT.equals(attributeName)) { |
| 46 | + return; |
| 47 | + } |
38 | 48 | final String resolverFQN
|
39 | 49 | = GraphQlUtil.resolverStringToPhpFQN(getVisitedElementValue);
|
| 50 | + |
| 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 | + return; |
| 61 | + } |
40 | 62 | final GetPhpClassByFQN getPhpClassByFQN
|
41 | 63 | = GetPhpClassByFQN.getInstance(holder.getProject());
|
42 | 64 | final PhpClass resolverClass = getPhpClassByFQN.execute(resolverFQN);
|
| 65 | + |
43 | 66 | if (resolverClass == null) {
|
44 | 67 | holder.registerProblem(
|
45 | 68 | element,
|
46 | 69 | inspectionBundle.message(
|
47 |
| - "inspection.graphql.resolver.notExist" |
| 70 | + "inspection.graphql.resolver.notExist" |
48 | 71 | ),
|
49 | 72 | ProblemHighlightType.ERROR,
|
50 | 73 | new CreateResolverClassQuickFix());
|
|
0 commit comments