@@ -40,7 +40,7 @@ class NadelNoInterfaceToObjectFragmentExpansionTransform : NadelTransform<State>
4040 data class State (
4141 val aliasHelper : NadelAliasHelper ,
4242 val exposedOverallImplNames : Set <String >,
43- val widenToOverallNames : List <String >,
43+ val allUnderlyingMembersAsOverallNames : List <String >,
4444 val relaxedFieldResultKey : String ,
4545 )
4646
@@ -80,7 +80,7 @@ class NadelNoInterfaceToObjectFragmentExpansionTransform : NadelTransform<State>
8080 return State (
8181 aliasHelper = NadelAliasHelper .forField(tag = " abstract_member" , field = parent),
8282 exposedOverallImplNames = relaxationContext.exposedOverallImplNames,
83- widenToOverallNames = relaxationContext.widenToOverallNames ,
83+ allUnderlyingMembersAsOverallNames = relaxationContext.allUnderlyingMembersAsOverallNames ,
8484 relaxedFieldResultKey = overallField.resultKey,
8585 )
8686 }
@@ -95,15 +95,15 @@ class NadelNoInterfaceToObjectFragmentExpansionTransform : NadelTransform<State>
9595 state : State ,
9696 transformServiceExecutionContext : NadelTransformServiceExecutionContext ? ,
9797 ): NadelTransformFieldResult {
98- // Widen to all members so graphql-java prints the field bare.
98+ // Widen objectTypeNames to cover every underlying member so graphql-java prints the field bare.
9999 val bareField = field.toBuilder()
100100 .clearObjectTypesNames()
101- .objectTypeNames(state.widenToOverallNames )
101+ .objectTypeNames(state.allUnderlyingMembersAsOverallNames )
102102 .build()
103103
104104 // Aliased __typename (also bare) so the result side can tell each node's concrete type.
105105 val typeNameField = newNormalizedField()
106- .objectTypeNames(state.widenToOverallNames )
106+ .objectTypeNames(state.allUnderlyingMembersAsOverallNames )
107107 .alias(state.aliasHelper.typeNameResultKey)
108108 .fieldName(Introspection .TypeNameMetaFieldDef .name)
109109 .build()
@@ -217,15 +217,16 @@ private fun computeAbstractTypeRelaxationContext(
217217 return null
218218 }
219219
220- val widenToOverallNames = underlyingMemberNames.map { executionBlueprint.getOverallTypeName(service, it) }
220+ // Every underlying member (incl. hidden ones), named in overall terms so it can go on the overall ENF;
221+ val allUnderlyingMembersAsOverallNames = underlyingMemberNames.map { executionBlueprint.getOverallTypeName(service, it) }
221222
222223 return NadelAbstractTypeRelaxationContext (
223224 exposedOverallImplNames = exposedOverallImplNames,
224- widenToOverallNames = widenToOverallNames ,
225+ allUnderlyingMembersAsOverallNames = allUnderlyingMembersAsOverallNames ,
225226 )
226227}
227228
228229private data class NadelAbstractTypeRelaxationContext (
229230 val exposedOverallImplNames : Set <String >,
230- val widenToOverallNames : List <String >,
231+ val allUnderlyingMembersAsOverallNames : List <String >,
231232)
0 commit comments