Skip to content

Commit 728cbe1

Browse files
committed
Merge branch 'master' into back-to-java-11
# Conflicts: # .github/workflows/master.yml # .github/workflows/pull_request.yml # .github/workflows/release.yml
2 parents 0428ebb + 976ddbc commit 728cbe1

5 files changed

Lines changed: 151 additions & 19 deletions

File tree

‎.github/workflows/master.yml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ jobs:
1616
- uses: actions/checkout@v3
1717
- uses: gradle/wrapper-validation-action@v1
1818
- name: Set up JDK 11
19-
uses: actions/setup-java@v1
19+
uses: actions/setup-java@v3
2020
with:
21-
java-version: '11.0.17'
21+
java-version: '11'
22+
distribution: 'corretto'
2223
- name: build test and publish
2324
run: ./gradlew assemble && ./gradlew check --info && ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -x check --info --stacktrace

‎.github/workflows/pull_request.yml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ jobs:
1818
- uses: actions/checkout@v3
1919
- uses: gradle/wrapper-validation-action@v1
2020
- name: Set up JDK 11
21-
uses: actions/setup-java@v1
21+
uses: actions/setup-java@v3
2222
with:
23-
java-version: '11.0.17'
23+
java-version: '11'
24+
distribution: 'corretto'
2425
- name: build and test
2526
run: ./gradlew assemble && ./gradlew check --info --stacktrace

‎.github/workflows/release.yml‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ jobs:
2020
- uses: actions/checkout@v3
2121
- uses: gradle/wrapper-validation-action@v1
2222
- name: Set up JDK 11
23-
uses: actions/setup-java@v1
23+
uses: actions/setup-java@v3
2424
with:
25-
java-version: '11.0.17'
25+
java-version: '11'
26+
distribution: 'corretto'
2627
- name: build test and publish
2728
run: ./gradlew assemble && ./gradlew check --info && ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -x check --info --stacktrace

‎src/main/java/graphql/schema/diffing/ana/EditOperationAnalyzer.java‎

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public EditOperationAnalysisResult analyzeEdits(List<EditOperation> editOperatio
140140
if (editOperation.getTargetVertex().isOfType(SchemaGraph.FIELD)) {
141141
fieldChanged(editOperation);
142142
} else if (editOperation.getTargetVertex().isOfType(SchemaGraph.ARGUMENT)) {
143-
handleArgumentChange(editOperation);
143+
handleArgumentChange(editOperation, mapping);
144144
} else if (editOperation.getTargetVertex().isOfType(SchemaGraph.INPUT_FIELD)) {
145145
handleInputFieldChange(editOperation);
146146
}
@@ -656,16 +656,21 @@ private void handleInputFieldChange(EditOperation editOperation) {
656656
getInputObjectModification(newName).getDetails().add(new InputObjectFieldRename(oldName, inputField.getName()));
657657
}
658658

659-
private void handleArgumentChange(EditOperation editOperation) {
659+
private void handleArgumentChange(EditOperation editOperation, Mapping mapping) {
660+
Vertex oldArgument = editOperation.getSourceVertex();
660661
Vertex argument = editOperation.getTargetVertex();
662+
663+
if (!doesArgumentChangeMakeSense(oldArgument, argument, mapping)) {
664+
return;
665+
}
666+
661667
Vertex fieldOrDirective = newSchemaGraph.getFieldOrDirectiveForArgument(argument);
662668
if (fieldOrDirective.isOfType(SchemaGraph.DIRECTIVE)) {
663669
Vertex directive = fieldOrDirective;
664670
DirectiveModification directiveModification = getDirectiveModification(directive.getName());
665-
String oldName = editOperation.getSourceVertex().getName();
671+
String oldName = oldArgument.getName();
666672
String newName = argument.getName();
667673
directiveModification.getDetails().add(new DirectiveArgumentRename(oldName, newName));
668-
669674
} else {
670675
assertTrue(fieldOrDirective.isOfType(SchemaGraph.FIELD));
671676
Vertex field = fieldOrDirective;
@@ -674,17 +679,16 @@ private void handleArgumentChange(EditOperation editOperation) {
674679
if (fieldsContainerForField.isOfType(SchemaGraph.OBJECT)) {
675680
Vertex object = fieldsContainerForField;
676681
ObjectModification objectModification = getObjectModification(object.getName());
677-
String oldName = editOperation.getSourceVertex().getName();
682+
String oldName = oldArgument.getName();
678683
String newName = argument.getName();
679684
objectModification.getDetails().add(new ObjectFieldArgumentRename(fieldName, oldName, newName));
680685
} else {
681686
assertTrue(fieldsContainerForField.isOfType(SchemaGraph.INTERFACE));
682687
Vertex interfaze = fieldsContainerForField;
683688
InterfaceModification interfaceModification = getInterfaceModification(interfaze.getName());
684-
String oldName = editOperation.getSourceVertex().getName();
689+
String oldName = oldArgument.getName();
685690
String newName = argument.getName();
686691
interfaceModification.getDetails().add(new InterfaceFieldArgumentRename(fieldName, oldName, newName));
687-
688692
}
689693
}
690694
}
@@ -1162,12 +1166,13 @@ private void inputFieldTypeOrDefaultValueChanged(EditOperation editOperation) {
11621166
}
11631167

11641168
private void argumentTypeOrDefaultValueChanged(EditOperation editOperation, Mapping mapping) {
1165-
if (!doesArgumentChangeMakeSense(editOperation, mapping)) {
1169+
Vertex oldArgument = editOperation.getSourceEdge().getFrom();
1170+
Vertex argument = editOperation.getTargetEdge().getFrom();
1171+
1172+
if (!doesArgumentChangeMakeSense(oldArgument, argument, mapping)) {
11661173
return;
11671174
}
11681175

1169-
Edge targetEdge = editOperation.getTargetEdge();
1170-
Vertex argument = targetEdge.getFrom();
11711176
Vertex fieldOrDirective = newSchemaGraph.getFieldOrDirectiveForArgument(argument);
11721177
if (fieldOrDirective.isOfType(SchemaGraph.FIELD)) {
11731178
Vertex field = fieldOrDirective;
@@ -1231,10 +1236,10 @@ private void argumentTypeOrDefaultValueChanged(EditOperation editOperation, Mapp
12311236
* <p>
12321237
* We only want to report argument type changes if it makes sense i.e. if the argument container was the same.
12331238
*/
1234-
private boolean doesArgumentChangeMakeSense(EditOperation editOperation, Mapping mapping) {
1239+
private boolean doesArgumentChangeMakeSense(Vertex oldArgument, Vertex newArgument, Mapping mapping) {
12351240
// Container for an argument in this case should be a field or directive
1236-
Vertex oldContainer = oldSchemaGraph.getFieldOrDirectiveForArgument(editOperation.getSourceEdge().getFrom());
1237-
Vertex newContainer = newSchemaGraph.getFieldOrDirectiveForArgument(editOperation.getTargetEdge().getFrom());
1241+
Vertex oldContainer = oldSchemaGraph.getFieldOrDirectiveForArgument(oldArgument);
1242+
Vertex newContainer = newSchemaGraph.getFieldOrDirectiveForArgument(newArgument);
12381243

12391244
// Make sure the container is the same
12401245
return mapping.getTarget(oldContainer) == newContainer;

‎src/test/groovy/graphql/schema/diffing/ana/EditOperationAnalyzerTest.groovy‎

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2557,6 +2557,130 @@ class EditOperationAnalyzerTest extends Specification {
25572557
defaultValueModification[0].newValue == '1000'
25582558
}
25592559

2560+
def "object field with argument removed and similarly named argument added"() {
2561+
given:
2562+
def oldSdl = """
2563+
type Query {
2564+
issues: IssueQuery
2565+
}
2566+
type IssueQuery {
2567+
issues(id: [ID!]): [Issue]
2568+
issuesById: [Issue]
2569+
}
2570+
type Issue {
2571+
id: ID!
2572+
}
2573+
"""
2574+
def newSdl = '''
2575+
type Query {
2576+
issues: IssueQuery
2577+
}
2578+
type IssueQuery {
2579+
issuesById(ids: [ID!]!): [Issue]
2580+
}
2581+
type Issue {
2582+
id: ID!
2583+
}
2584+
'''
2585+
2586+
when:
2587+
def changes = calcDiff(oldSdl, newSdl)
2588+
2589+
then:
2590+
changes.objectDifferences["IssueQuery"] instanceof ObjectModification
2591+
def issueQueryChanges = changes.objectDifferences["IssueQuery"] as ObjectModification
2592+
issueQueryChanges.details.size() == 2
2593+
2594+
def fieldDeletion = issueQueryChanges.getDetails(ObjectFieldDeletion)
2595+
fieldDeletion.size() == 1
2596+
fieldDeletion[0].name == "issues"
2597+
2598+
def fieldArgumentAddition = issueQueryChanges.getDetails(ObjectFieldArgumentAddition)
2599+
fieldArgumentAddition.size() == 1
2600+
fieldArgumentAddition[0].fieldName == "issuesById"
2601+
fieldArgumentAddition[0].name == "ids"
2602+
}
2603+
2604+
def "interface field with argument removed and similarly named argument added"() {
2605+
given:
2606+
def oldSdl = """
2607+
type Query {
2608+
issues: IssueQuery
2609+
}
2610+
interface IssueQuery {
2611+
issues(id: [ID!]): [Issue]
2612+
issuesById: [Issue]
2613+
}
2614+
type Issue {
2615+
id: ID!
2616+
}
2617+
"""
2618+
def newSdl = '''
2619+
type Query {
2620+
issues: IssueQuery
2621+
}
2622+
interface IssueQuery {
2623+
issuesById(ids: [ID!]!): [Issue]
2624+
}
2625+
type Issue {
2626+
id: ID!
2627+
}
2628+
'''
2629+
2630+
when:
2631+
def changes = calcDiff(oldSdl, newSdl)
2632+
2633+
then:
2634+
changes.interfaceDifferences["IssueQuery"] instanceof InterfaceModification
2635+
def issueQueryChanges = changes.interfaceDifferences["IssueQuery"] as InterfaceModification
2636+
issueQueryChanges.details.size() == 2
2637+
2638+
def fieldDeletion = issueQueryChanges.getDetails(InterfaceFieldDeletion)
2639+
fieldDeletion.size() == 1
2640+
fieldDeletion[0].name == "issues"
2641+
2642+
def fieldArgumentAddition = issueQueryChanges.getDetails(InterfaceFieldArgumentAddition)
2643+
fieldArgumentAddition.size() == 1
2644+
fieldArgumentAddition[0].fieldName == "issuesById"
2645+
fieldArgumentAddition[0].name == "ids"
2646+
}
2647+
2648+
def "directive removed and similarly named argument added"() {
2649+
given:
2650+
def oldSdl = '''
2651+
directive @dog(name: String) on FIELD_DEFINITION
2652+
directive @cat on FIELD_DEFINITION
2653+
type Query {
2654+
pet: String
2655+
}
2656+
'''
2657+
def newSdl = '''
2658+
directive @cat(names: String) on FIELD_DEFINITION
2659+
type Query {
2660+
pet: String
2661+
}
2662+
'''
2663+
2664+
when:
2665+
def changes = calcDiff(oldSdl, newSdl)
2666+
2667+
then:
2668+
changes.directiveDifferences["dog"] instanceof DirectiveDeletion
2669+
def dogChanges = changes.directiveDifferences["dog"] as DirectiveDeletion
2670+
dogChanges.name == "dog"
2671+
2672+
changes.directiveDifferences["cat"] instanceof DirectiveModification
2673+
def catChanges = changes.directiveDifferences["cat"] as DirectiveModification
2674+
!catChanges.isNameChanged()
2675+
catChanges.oldName == catChanges.newName
2676+
catChanges.newName == "cat"
2677+
catChanges.details.size() == 1
2678+
2679+
def argumentAddition = catChanges.getDetails(DirectiveArgumentAddition)
2680+
argumentAddition.size() == 1
2681+
argumentAddition[0].name == "names"
2682+
}
2683+
25602684
EditOperationAnalysisResult calcDiff(
25612685
String oldSdl,
25622686
String newSdl

0 commit comments

Comments
 (0)