private FieldBridge getFieldBridgeFromBridgeProvider( BridgeProvider bridgeProvider, ExtendedBridgeProvider.ExtendedBridgeProviderContext context, ContainerType containerType) { FieldBridge bridge = bridgeProvider.provideFieldBridge(context); if (bridge == null) { return null; } populateReturnType(context.getReturnType(), bridge.getClass(), bridge); switch (containerType) { case SINGLE: return bridge; case ITERABLE: // Should we cache these per bridge instance? // would make sense at least for the known built-in bridges // but is that worth it? return new BuiltinIterableBridge(bridge); case ARRAY: return new BuiltinArrayBridge(bridge); case MAP: return new BuiltinMapBridge(bridge); default: throw new AssertionFailure("Unknown ContainerType " + containerType); } }