Skip to content

Commit

Permalink
Fix build failure of portable library.
Browse files Browse the repository at this point in the history
  • Loading branch information
aaubry committed Dec 18, 2014
1 parent 564584f commit fe25cf4
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 56 deletions.
26 changes: 26 additions & 0 deletions YamlDotNet.Test/Serialization/CodeValidations.cs
@@ -0,0 +1,26 @@
using System;
using System.Linq;
using Xunit;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.Utilities;

namespace YamlDotNet.Test.Serialization
{
public class CodeValidations
{
[Fact]
public void AllBuiltInConvertersAreRegistered()
{
var interfaceType = typeof(IYamlTypeConverter);
var converterTypes = interfaceType.Assembly
.GetTypes()
.Where(t => !t.IsInterface && interfaceType.IsAssignableFrom(t));

var unregisteredTypes = converterTypes
.Where(t => !YamlTypeConverters.BuiltInConverters.Any(c => c.GetType() == t))
.ToArray();

Assert.Equal(new Type[0], unregisteredTypes);
}
}
}
1 change: 1 addition & 0 deletions YamlDotNet.Test/YamlDotNet.Test.csproj
Expand Up @@ -89,6 +89,7 @@
<Compile Include="Serialization\ObjectFactoryTests.cs" />
<Compile Include="Serialization\SerializationTestHelper.cs" />
<Compile Include="Serialization\SerializationTests.cs" />
<Compile Include="Serialization\CodeValidations.cs" />
<Compile Include="Yaml.cs" />
</ItemGroup>
<ItemGroup>
Expand Down
7 changes: 6 additions & 1 deletion YamlDotNet/Helpers/Portability.cs
Expand Up @@ -73,7 +73,12 @@ public static bool HasDefaultConstructor(this Type type)

public static bool IsAssignableFrom(this Type type, Type source)
{
return type.GetTypeInfo().IsAssignableFrom(source.GetTypeInfo());
return type.IsAssignableFrom(source.GetTypeInfo());
}

public static bool IsAssignableFrom(this Type type, TypeInfo source)
{
return type.GetTypeInfo().IsAssignableFrom(source);
}

public static TypeCode GetTypeCode(this Type type)
Expand Down
2 changes: 1 addition & 1 deletion YamlDotNet/Serialization/Deserializer.cs
Expand Up @@ -94,7 +94,7 @@ public IPropertyDescriptor GetProperty(Type type, object container, string name,
);

converters = new List<IYamlTypeConverter>();
foreach (IYamlTypeConverter yamlTypeConverter in YamlTypeConverters.ExistingConverters)
foreach (IYamlTypeConverter yamlTypeConverter in YamlTypeConverters.BuiltInConverters)
{
converters.Add(yamlTypeConverter);
}
Expand Down
2 changes: 1 addition & 1 deletion YamlDotNet/Serialization/Serializer.cs
Expand Up @@ -55,7 +55,7 @@ public Serializer(SerializationOptions options = SerializationOptions.None, INam
this.namingConvention = namingConvention ?? new NullNamingConvention();

Converters = new List<IYamlTypeConverter>();
foreach (IYamlTypeConverter yamlTypeConverter in Utilities.YamlTypeConverters.ExistingConverters)
foreach (IYamlTypeConverter yamlTypeConverter in Utilities.YamlTypeConverters.BuiltInConverters)
{
Converters.Add(yamlTypeConverter);
}
Expand Down
89 changes: 36 additions & 53 deletions YamlDotNet/Serialization/Utilities/YamlTypeConverters.cs
@@ -1,53 +1,36 @@
// This file is part of YamlDotNet - A .NET library for YAML.
// Copyright (c) Antoine Aubry and contributors

// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

namespace YamlDotNet.Serialization.Utilities
{
using System.Linq;

internal static class YamlTypeConverters
{
private static System.Collections.Generic.List<IYamlTypeConverter> _existingTypeConverters;

public static System.Collections.Generic.IEnumerable<IYamlTypeConverter> ExistingConverters
{
get
{
if (_existingTypeConverters == null)
{
System.Type interfaceType = typeof(IYamlTypeConverter);
System.Collections.Generic.IEnumerable<System.Type> converters = System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => !t.IsInterface && interfaceType.IsAssignableFrom(t));

_existingTypeConverters = new System.Collections.Generic.List<IYamlTypeConverter>();

foreach (System.Type converter in converters)
{
_existingTypeConverters.Add((IYamlTypeConverter) System.Activator.CreateInstance(converter));
}
}

return _existingTypeConverters;
}
}
}
}
// This file is part of YamlDotNet - A .NET library for YAML.
// Copyright (c) Antoine Aubry and contributors

// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
// of the Software, and to permit persons to whom the Software is furnished to do
// so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

using System.Collections.Generic;
using YamlDotNet.Serialization.Converters;

namespace YamlDotNet.Serialization.Utilities
{
internal static class YamlTypeConverters
{
private static readonly IEnumerable<IYamlTypeConverter> _builtInTypeConverters = new IYamlTypeConverter[]
{
new GuidConverter(),
};

public static IEnumerable<IYamlTypeConverter> BuiltInConverters { get { return _builtInTypeConverters; } }
}
}

0 comments on commit fe25cf4

Please sign in to comment.