Commit dc0aeaa9 authored by detlevschwabe's avatar detlevschwabe Committed by Jon Skeet

Adding conditional compiler symbol to support .NET 3.5 (#1713)

* Adding condition compiler symbol to support .NET 3.5
parent 7b5648ca
......@@ -67,7 +67,7 @@ namespace Google.Protobuf.Compatibility
{
Assert.AreEqual(expected, TypeExtensions.IsValueType(type));
}
#if !DOTNET35
[Test]
[TestCase(typeof(object), typeof(string), true)]
[TestCase(typeof(object), typeof(int), true)]
......@@ -129,5 +129,6 @@ namespace Google.Protobuf.Compatibility
{
Assert.Throws<AmbiguousMatchException>(() => TypeExtensions.GetMethod(type, name));
}
#endif
}
}
......@@ -47,7 +47,11 @@ namespace Google.Protobuf.Compatibility
/// </summary>
internal static MethodInfo GetGetMethod(this PropertyInfo target)
{
#if DOTNET35
var method = target.GetGetMethod();
#else
var method = target.GetMethod;
#endif
return method != null && method.IsPublic ? method : null;
}
......@@ -57,7 +61,11 @@ namespace Google.Protobuf.Compatibility
/// </summary>
internal static MethodInfo GetSetMethod(this PropertyInfo target)
{
#if DOTNET35
var method = target.GetSetMethod();
#else
var method = target.SetMethod;
#endif
return method != null && method.IsPublic ? method : null;
}
}
......
......@@ -49,6 +49,11 @@ namespace Google.Protobuf.Compatibility
/// Returns true if the target type is a value type, including a nullable value type or an enum, or false
/// if it's a reference type (class, delegate, interface - including System.ValueType and System.Enum).
/// </summary>
#if DOTNET35
internal static bool IsValueType(this Type target) {
return target.IsValueType;
}
#else
internal static bool IsValueType(this Type target)
{
return target.GetTypeInfo().IsValueType;
......@@ -109,5 +114,6 @@ namespace Google.Protobuf.Compatibility
}
return null;
}
#endif
}
}
......@@ -885,6 +885,16 @@ namespace Google.Protobuf
return originalName;
}
#if DOTNET35
// TODO: Consider adding functionality to TypeExtensions to avoid this difference.
private static Dictionary<object, string> GetNameMapping(System.Type enumType) =>
enumType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)
.ToDictionary(f => f.GetValue(null),
f => (f.GetCustomAttributes(typeof(OriginalNameAttribute), false)
.FirstOrDefault() as OriginalNameAttribute)
// If the attribute hasn't been applied, fall back to the name of the field.
?.Name ?? f.Name);
#else
private static Dictionary<object, string> GetNameMapping(System.Type enumType) =>
enumType.GetTypeInfo().DeclaredFields
.Where(f => f.IsStatic)
......@@ -893,6 +903,7 @@ namespace Google.Protobuf
.FirstOrDefault()
// If the attribute hasn't been applied, fall back to the name of the field.
?.Name ?? f.Name);
#endif
}
}
}
......@@ -34,6 +34,10 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
#if DOTNET35
// Needed for ReadOnlyDictionary, which does not exist in .NET 3.5
using Google.Protobuf.Collections;
#endif
namespace Google.Protobuf.Reflection
{
......
......@@ -59,7 +59,12 @@ namespace Google.Protobuf.WellKnownTypes
if (firstInvalid == null)
{
var writer = new StringWriter();
#if DOTNET35
var query = paths.Select(JsonFormatter.ToCamelCase);
JsonFormatter.WriteString(writer, string.Join(",", query.ToArray()));
#else
JsonFormatter.WriteString(writer, string.Join(",", paths.Select(JsonFormatter.ToCamelCase)));
#endif
return writer.ToString();
}
else
......
......@@ -31,10 +31,6 @@
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Google.Protobuf.WellKnownTypes
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment