3
3
import static com .intuit .graphql .orchestrator .resolverdirective .FieldResolverDirectiveUtil .canContainFieldResolverDirective ;
4
4
import static com .intuit .graphql .orchestrator .resolverdirective .FieldResolverDirectiveUtil .createFieldResolverContexts ;
5
5
6
+ import com .intuit .graphql .graphQL .Directive ;
6
7
import com .intuit .graphql .graphQL .FieldDefinition ;
7
8
import com .intuit .graphql .orchestrator .resolverdirective .ArgumentDefinitionNotAllowed ;
8
9
import com .intuit .graphql .orchestrator .resolverdirective .FieldResolverDirectiveUtil ;
10
+ import com .intuit .graphql .orchestrator .resolverdirective .InvalidDirectivePairingException ;
9
11
import com .intuit .graphql .orchestrator .resolverdirective .NotAValidLocationForFieldResolverDirective ;
10
12
import com .intuit .graphql .orchestrator .utils .XtextTypeUtils ;
11
13
import com .intuit .graphql .orchestrator .xtext .XtextGraph ;
12
14
import java .util .ArrayList ;
13
15
import java .util .List ;
14
16
import java .util .Objects ;
15
17
import org .apache .commons .collections4 .CollectionUtils ;
18
+ import org .eclipse .emf .common .util .EList ;
16
19
import org .eclipse .emf .ecore .EObject ;
17
20
18
21
public class FieldResolverTransformerPreMerge implements Transformer <XtextGraph , XtextGraph > {
@@ -39,21 +42,51 @@ public XtextGraph transform(XtextGraph sourceXtextGraph) {
39
42
}
40
43
41
44
private void validateFieldWithResolver (List <FieldResolverContext > fieldResolverContexts ) {
42
- fieldResolverContexts
43
- .forEach (fieldResolverContext -> {
44
- FieldDefinition fieldDefinition = fieldResolverContext .getFieldDefinition ();
45
- String fieldName = fieldDefinition .getName ();
46
- String parentTypeName = XtextTypeUtils .getParentTypeName (fieldDefinition );
47
-
48
- EObject parentType = fieldDefinition .eContainer ();
49
- if (!(canContainFieldResolverDirective (parentType ))) {
50
- throw new NotAValidLocationForFieldResolverDirective (fieldName , parentTypeName );
51
- }
52
-
53
- if (hasArguments (fieldDefinition )) {
54
- throw new ArgumentDefinitionNotAllowed (fieldName , parentTypeName );
55
- }
56
- });
45
+ fieldResolverContexts
46
+ .forEach (fieldResolverContext -> {
47
+ FieldDefinition fieldDefinition = fieldResolverContext .getFieldDefinition ();
48
+ String fieldName = fieldDefinition .getName ();
49
+ String parentTypeName = XtextTypeUtils .getParentTypeName (fieldDefinition );
50
+
51
+ EObject parentType = fieldDefinition .eContainer ();
52
+ if (!(canContainFieldResolverDirective (parentType ))) {
53
+ throw new NotAValidLocationForFieldResolverDirective (fieldName , parentTypeName );
54
+ }
55
+
56
+ if (hasArguments (fieldDefinition )) {
57
+ throw new ArgumentDefinitionNotAllowed (fieldName , parentTypeName );
58
+ }
59
+
60
+ EList <Directive > directives = fieldDefinition .getDirectives ();
61
+ boolean hasResolverDirective = false ;
62
+ boolean hasExternalDirective = false ;
63
+ boolean hasProvidesDirective = false ;
64
+ boolean hasRequiresDirective = false ;
65
+
66
+ for (Directive directive : directives ) {
67
+ String directiveName = directive .getDefinition ().getName ();
68
+ switch (directiveName ) {
69
+ case "resolver" :
70
+ hasResolverDirective = true ;
71
+ break ;
72
+ case "external" :
73
+ hasExternalDirective = true ;
74
+ break ;
75
+ case "provides" :
76
+ hasProvidesDirective = true ;
77
+ break ;
78
+ case "requires" :
79
+ hasRequiresDirective = true ;
80
+ break ;
81
+ }
82
+ }
83
+
84
+ if (hasResolverDirective ) {
85
+ if (hasExternalDirective || hasProvidesDirective || hasRequiresDirective ) {
86
+ throw new InvalidDirectivePairingException (fieldName , parentTypeName );
87
+ }
88
+ }
89
+ });
57
90
}
58
91
59
92
private boolean hasArguments (FieldDefinition fieldDefinition ) {
0 commit comments