(AssociationAttributeDefinition) attributeDefinition;
if ( attributeType.isAnyType() ) {
// Nothing to do because AnyFetch does not implement ExpandingFetchSource (i.e., it cannot be pushed/popped).
}
else if ( attributeType.isEntityType() ) {
final ExpandingFetchSource source = currentSource();
// One way to find out if the fetch was pushed is to check the fetch strategy; rather than recomputing
// the fetch strategy, simply check if current source's fetched attribute definition matches
// associationAttributeDefinition.
if ( AttributeFetch.class.isInstance( source ) &&
associationAttributeDefinition.equals( AttributeFetch.class.cast( source ).getFetchedAttributeDefinition() ) ) {
final ExpandingFetchSource popped = popFromStack();
checkPoppedEntity( popped, associationAttributeDefinition.toEntityDefinition() );
}
}
else if ( attributeType.isCollectionType() ) {
final CollectionReference currentCollection = currentCollection();
// One way to find out if the fetch was pushed is to check the fetch strategy; rather than recomputing
// the fetch strategy, simply check if current collection's fetched attribute definition matches
// associationAttributeDefinition.
if ( AttributeFetch.class.isInstance( currentCollection ) &&
associationAttributeDefinition.equals( AttributeFetch.class.cast( currentCollection ).getFetchedAttributeDefinition() ) ) {
final CollectionReference popped = popFromCollectionStack();
checkedPoppedCollection( popped, associationAttributeDefinition.toCollectionDefinition() );
}
}
}
else if ( attributeType.isComponentType() ) {
// CompositeFetch is always pushed, during #startingAttribute(),
// so pop the current fetch owner, and make sure what we just popped represents this composition
final ExpandingFetchSource popped = popFromStack();
if ( !CompositeAttributeFetch.class.isInstance( popped ) ) {
throw new WalkingException(
String.format(
"Mismatched FetchSource from stack on pop; expected: CompositeAttributeFetch; actual: [%s]",
popped