Skip to content

Commit 1c6bcf9

Browse files
committed
Throw clear exception when converter is null.
1 parent 8bba989 commit 1c6bcf9

4 files changed

Lines changed: 40 additions & 20 deletions

File tree

src/UnityMvvmToolkit.Core/Internal/ObjectHandlers/ObjectWrapperHandler.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,9 @@ public ObjectWrapperHandler(ValueConverterHandler valueConverterHandler)
3030

3131
public void CreateValueConverterInstances<T>(int capacity, WarmupType warmupType) where T : IValueConverter
3232
{
33-
var valueConverter = _valueConverterHandler.GetValueConverterByType(typeof(T));
34-
35-
if (valueConverter == default)
33+
if (_valueConverterHandler.TryGetValueConverterByType(typeof(T), out var valueConverter) == false)
3634
{
37-
throw new NullReferenceException($"Converter '{typeof(T)}' not found.");
35+
throw new NullReferenceException($"Converter '{typeof(T)}' not found");
3836
}
3937

4038
switch (valueConverter)
@@ -79,7 +77,13 @@ public TProperty GetProperty<TProperty, TValueType>(IBindingContext context, Bin
7977
_wrappersByConverter.Add(converterId, new Queue<IObjectWrapper>());
8078
}
8179

82-
var args = new object[] { _valueConverterHandler.GetValueConverterById(converterId) };
80+
if (_valueConverterHandler.TryGetValueConverterById(converterId, out var valueConverter) == false)
81+
{
82+
throw new NullReferenceException(
83+
$"Property value converter from '{sourceType}' to '{targetType}' not found.");
84+
}
85+
86+
var args = new object[] { valueConverter };
8387
var wrapperType = typeof(PropertyWrapper<,>).MakeGenericType(targetType, sourceType);
8488

8589
return (TProperty) ObjectWrapperHelper.CreatePropertyWrapper(wrapperType, args, converterId,
@@ -129,7 +133,13 @@ public ICommandWrapper GetCommandWrapper(IBindingContext context, CommandBinding
129133
_wrappersByConverter.Add(converterId, new Queue<IObjectWrapper>());
130134
}
131135

132-
var args = new object[] { _valueConverterHandler.GetValueConverterById(converterId) };
136+
if (_valueConverterHandler.TryGetValueConverterById(converterId, out var valueConverter) == false)
137+
{
138+
throw new NullReferenceException(
139+
$"Parameter value converter to '{commandValueType}' not found.");
140+
}
141+
142+
var args = new object[] { valueConverter };
133143
var wrapperType = typeof(CommandWrapper<>).MakeGenericType(commandValueType);
134144
var command = propertyInfo.GetValue(context);
135145

src/UnityMvvmToolkit.Core/Internal/ObjectHandlers/ValueConverterHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ public ValueConverterHandler(IValueConverter[] valueConverters)
1818
RegisterValueConverters(valueConverters);
1919
}
2020

21-
public IValueConverter GetValueConverterById(int converterId)
21+
public bool TryGetValueConverterById(int converterId, out IValueConverter valueConverter)
2222
{
23-
return _valueConvertersByHash[converterId]; // TODO: throw clear exception.
23+
return _valueConvertersByHash.TryGetValue(converterId, out valueConverter);
2424
}
2525

26-
public IValueConverter GetValueConverterByType(Type converterType)
26+
public bool TryGetValueConverterByType(Type converterType, out IValueConverter valueConverter)
2727
{
28-
return _valueConvertersByHash[converterType.GetHashCode()]; // TODO: throw clear exception.
28+
return _valueConvertersByHash.TryGetValue(converterType.GetHashCode(), out valueConverter);
2929
}
3030

3131
public void Dispose()

src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/ObjectHandlers/ObjectWrapperHandler.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,9 @@ public ObjectWrapperHandler(ValueConverterHandler valueConverterHandler)
3030

3131
public void CreateValueConverterInstances<T>(int capacity, WarmupType warmupType) where T : IValueConverter
3232
{
33-
var valueConverter = _valueConverterHandler.GetValueConverterByType(typeof(T));
34-
35-
if (valueConverter == default)
33+
if (_valueConverterHandler.TryGetValueConverterByType(typeof(T), out var valueConverter) == false)
3634
{
37-
throw new NullReferenceException($"Converter '{typeof(T)}' not found.");
35+
throw new NullReferenceException($"Converter '{typeof(T)}' not found");
3836
}
3937

4038
switch (valueConverter)
@@ -79,7 +77,13 @@ public TProperty GetProperty<TProperty, TValueType>(IBindingContext context, Bin
7977
_wrappersByConverter.Add(converterId, new Queue<IObjectWrapper>());
8078
}
8179

82-
var args = new object[] { _valueConverterHandler.GetValueConverterById(converterId) };
80+
if (_valueConverterHandler.TryGetValueConverterById(converterId, out var valueConverter) == false)
81+
{
82+
throw new NullReferenceException(
83+
$"Property value converter from '{sourceType}' to '{targetType}' not found.");
84+
}
85+
86+
var args = new object[] { valueConverter };
8387
var wrapperType = typeof(PropertyWrapper<,>).MakeGenericType(targetType, sourceType);
8488

8589
return (TProperty) ObjectWrapperHelper.CreatePropertyWrapper(wrapperType, args, converterId,
@@ -129,7 +133,13 @@ public ICommandWrapper GetCommandWrapper(IBindingContext context, CommandBinding
129133
_wrappersByConverter.Add(converterId, new Queue<IObjectWrapper>());
130134
}
131135

132-
var args = new object[] { _valueConverterHandler.GetValueConverterById(converterId) };
136+
if (_valueConverterHandler.TryGetValueConverterById(converterId, out var valueConverter) == false)
137+
{
138+
throw new NullReferenceException(
139+
$"Parameter value converter to '{commandValueType}' not found.");
140+
}
141+
142+
var args = new object[] { valueConverter };
133143
var wrapperType = typeof(CommandWrapper<>).MakeGenericType(commandValueType);
134144
var command = propertyInfo.GetValue(context);
135145

src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/ObjectHandlers/ValueConverterHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ public ValueConverterHandler(IValueConverter[] valueConverters)
1818
RegisterValueConverters(valueConverters);
1919
}
2020

21-
public IValueConverter GetValueConverterById(int converterId)
21+
public bool TryGetValueConverterById(int converterId, out IValueConverter valueConverter)
2222
{
23-
return _valueConvertersByHash[converterId]; // TODO: throw clear exception.
23+
return _valueConvertersByHash.TryGetValue(converterId, out valueConverter);
2424
}
2525

26-
public IValueConverter GetValueConverterByType(Type converterType)
26+
public bool TryGetValueConverterByType(Type converterType, out IValueConverter valueConverter)
2727
{
28-
return _valueConvertersByHash[converterType.GetHashCode()]; // TODO: throw clear exception.
28+
return _valueConvertersByHash.TryGetValue(converterType.GetHashCode(), out valueConverter);
2929
}
3030

3131
public void Dispose()

0 commit comments

Comments
 (0)