public IFieldHandler SpecializeSaveForType(Type type)
{
if (_type == type) return this;
if (!IsCompatibleWith(type))
{
Debug.Fail("strange");
return this;
}
var wantedKeyType = type.GetGenericArguments()[0];
var wantedValueType = type.GetGenericArguments()[1];
var keySpecialized = _keysHandler.SpecializeSaveForType(wantedKeyType);
if (_typeConvertorGenerator.GenerateConversion(wantedKeyType, keySpecialized.HandledType()) == null)
{
Debug.Fail("even more strange key");
return this;
}
var valueSpecialized = _valuesHandler.SpecializeSaveForType(wantedValueType);
if (_typeConvertorGenerator.GenerateConversion(wantedValueType, valueSpecialized.HandledType()) == null)
{
Debug.Fail("even more strange value");
return this;
}
return new DictionaryFieldHandler(_fieldHandlerFactory, _typeConvertorGenerator, type, keySpecialized, valueSpecialized);
}