Skip to content

Commit a43fa71

Browse files
committed
Make Configuration package trimming anf native AOT friendly.
1 parent 30126f6 commit a43fa71

File tree

5 files changed

+29
-22
lines changed

5 files changed

+29
-22
lines changed

Application.Avalonia.Tests/App.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
</Application.Resources>
88
<Application.Styles>
99
<FluentTheme/>
10+
<StyleInclude Source="avares://CarinaStudio.AppBase.Avalonia/Theme/Default.axaml"/>
1011
</Application.Styles>
1112
</Application>

Application.Avalonia.Tests/App.axaml.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using Microsoft.Extensions.Logging;
66
using System;
77
using System.Globalization;
8-
using Avalonia.Markup.Xaml.Styling;
98

109
namespace CarinaStudio
1110
{
@@ -31,16 +30,12 @@ public static void Main(string[] args)
3130
//Environment.SetEnvironmentVariable("AVALONIA_GLOBAL_SCALE_FACTOR", "2");
3231
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
3332
}
34-
33+
3534

3635
// Called when Avalonia initialized.
3736
public override void OnFrameworkInitializationCompleted()
3837
{
3938
base.OnFrameworkInitializationCompleted();
40-
this.Styles.Add(new StyleInclude(new Uri("avares://CarinaStudio.AppBase.Avalonia"))
41-
{
42-
Source = new("Theme/Default.axaml", UriKind.Relative),
43-
});
4439
(this.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.Let(it =>
4540
{
4641
//it.ShutdownMode = Avalonia.Controls.ShutdownMode.OnExplicitShutdown;

Configuration/JsonSettingsSerializer.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -241,24 +241,29 @@ protected object ReadJsonValue(JsonElement jsonValue, string typeName)
241241
_ => DateTime.FromBinary(jsonValue.GetInt64()),
242242
},
243243
StringType => this.ReadJsonValueAsString(jsonValue),
244-
_ => Type.GetType(typeName)?.Let((type) =>
244+
#pragma warning disable IL2057
245+
_ => Type.GetType(typeName)?.Let(type =>
245246
{
247+
#pragma warning restore IL2057
246248
if (type.IsEnum)
247249
{
248250
try
249251
{
250252
if (jsonValue.ValueKind == JsonValueKind.Array)
251253
{
252-
return Array.CreateInstance(type, jsonValue.GetArrayLength()).Also((array) =>
254+
#pragma warning disable IL3050
255+
return Array.CreateInstance(type, jsonValue.GetArrayLength()).Also(array =>
253256
{
254257
var index = 0;
255258
foreach (var e in jsonValue.EnumerateArray())
256259
array.SetValue(this.ReadJsonValue(e, typeName), index++);
257260
});
261+
#pragma warning restore IL3050
258262
}
259-
else if (Enum.TryParse(type, jsonValue.GetString(), out var enumValue))
263+
if (Enum.TryParse(type, jsonValue.GetString(), out var enumValue))
260264
return enumValue;
261265
}
266+
// ReSharper disable once EmptyGeneralCatchClause
262267
catch
263268
{ }
264269
}
@@ -366,10 +371,10 @@ protected virtual void WriteJsonValue(Utf8JsonWriter writer, string typeName, ob
366371
writer.WriteNumberValue((short)value);
367372
break;
368373
case Int32Type:
369-
if (value is int[] intArrar)
374+
if (value is int[] intArray)
370375
{
371376
writer.WriteStartArray();
372-
foreach (var i in intArrar)
377+
foreach (var i in intArray)
373378
this.WriteJsonValue(writer, typeName, i);
374379
writer.WriteEndArray();
375380
}

Configuration/PersistentSettings.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using CarinaStudio.Collections;
22
using System;
33
using System.Collections.Generic;
4+
using System.Diagnostics.CodeAnalysis;
45
using System.IO;
56
using System.Linq;
67
using System.Reflection;
@@ -18,8 +19,8 @@ public abstract class PersistentSettings : ISettings
1819
readonly object eventLock = new object();
1920
DateTime lastModifiedTime = DateTime.Now;
2021
readonly ISettingsSerializer serializer;
21-
volatile EventHandler<SettingChangedEventArgs>? settingChanged;
22-
volatile EventHandler<SettingChangingEventArgs>? settingChanging;
22+
EventHandler<SettingChangedEventArgs>? settingChanged;
23+
EventHandler<SettingChangingEventArgs>? settingChanging;
2324
readonly Dictionary<SettingKey, object> values = new Dictionary<SettingKey, object>();
2425

2526

@@ -70,7 +71,7 @@ protected PersistentSettings(ISettings template, ISettingsSerializer serializer)
7071
/// <summary>
7172
/// Get all setting keys.
7273
/// </summary>
73-
public IEnumerable<SettingKey> Keys { get => this.values.Lock((it) => it.Keys.ToArray()); }
74+
public IEnumerable<SettingKey> Keys => this.values.Lock((it) => it.Keys.ToArray());
7475

7576

7677
/// <summary>
@@ -223,6 +224,7 @@ public void Save(string fileName)
223224
if (File.Exists(fileName))
224225
File.Copy(fileName, fileName + ".backup", true);
225226
}
227+
// ReSharper disable once EmptyGeneralCatchClause
226228
catch
227229
{ }
228230

@@ -291,7 +293,7 @@ public void SetValue(SettingKey key, object value)
291293
// check value
292294
if (value == null)
293295
throw new ArgumentNullException(nameof(value));
294-
if (!key.ValueType.IsAssignableFrom(value.GetType()))
296+
if (!key.ValueType.IsInstanceOfType(value))
295297
throw new ArgumentException($"Value {value} is not {key.ValueType.Name}.");
296298

297299
// check previous value
@@ -426,7 +428,7 @@ public SettingKey(string name, Type valueType, object defaultValue)
426428
{
427429
if (defaultValue == null)
428430
throw new ArgumentNullException(nameof(defaultValue));
429-
if (!valueType.IsAssignableFrom(defaultValue.GetType()))
431+
if (!valueType.IsInstanceOfType(defaultValue))
430432
throw new ArgumentException($"Default value {defaultValue} is not {valueType.Name}.");
431433
this.DefaultValue = defaultValue;
432434
this.Name = name;
@@ -444,7 +446,7 @@ public SettingKey(string name, Type valueType, object defaultValue)
444446
/// Get all public <see cref="SettingKey"/> defined by given type.
445447
/// </summary>
446448
/// <returns>List of public <see cref="SettingKey"/>.</returns>
447-
public static IList<SettingKey> GetDefinedKeys<T>()
449+
public static IList<SettingKey> GetDefinedKeys<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>()
448450
{
449451
var keys = new List<SettingKey>();
450452
foreach (var fieldInfo in typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static))

Configuration/XmlSettingsSerializer.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,22 +305,26 @@ protected virtual object ReadXmlValue(XmlNode xmlValue, string typeName)
305305
return new List<DateTime>().Also((list) => this.ReadXmlValueArray(xmlValue, typeName, list)).ToArray();
306306
return DateTime.FromBinary(long.Parse(xmlValue.Value ?? ""));
307307
default:
308-
return Type.GetType(typeName)?.Let((type) =>
308+
#pragma warning disable IL2057
309+
return Type.GetType(typeName)?.Let(type =>
309310
{
311+
#pragma warning restore IL2057
310312
if (!type.IsEnum)
311313
return null;
312314
try
313315
{
314316
if (this.IsXmlValueArray(xmlValue))
315317
{
316-
return new ArrayList().Let((list) =>
318+
return new ArrayList().Let(list =>
317319
{
318320
this.ReadXmlValueArray(xmlValue, typeName, list);
319-
return Array.CreateInstance(type, list.Count).Also((array) =>
321+
#pragma warning disable IL3050
322+
return Array.CreateInstance(type, list.Count).Also(array =>
320323
{
321324
for (var i = array.Length - 1; i >= 0; --i)
322325
array.SetValue(list[i], i);
323326
});
327+
#pragma warning restore IL3050
324328
});
325329
}
326330
return Enum.Parse(type, xmlValue.Value ?? "");
@@ -391,7 +395,7 @@ public void Serialize(Stream stream, IDictionary<SettingKey, object> values, Set
391395
writer.WriteStartDocument();
392396
writer.WriteStartElement("Settings");
393397

394-
// versin
398+
// version
395399
writer.WriteStartElement("Version");
396400
writer.WriteValue(metadata.Version);
397401
writer.WriteEndElement();
@@ -444,7 +448,7 @@ protected virtual void WriteXmlValue(XmlWriter writer, object value)
444448
else if (value is Array array)
445449
{
446450
if (array.Rank != 1)
447-
throw new ArgumentException("Only 1-dinemsional array is supported.");
451+
throw new ArgumentException("Only 1-dimensional array is supported.");
448452
writer.WriteStartElement("Array");
449453
for (int i = 0, count = array.Length; i < count; ++i)
450454
{

0 commit comments

Comments
 (0)