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

* Adding condition compiler symbol to support .NET 3.5
pull/1704/head
detlevschwabe 9 years ago committed by Jon Skeet
parent 7b5648ca98
commit dc0aeaa903
  1. 3
      csharp/src/Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs
  2. 8
      csharp/src/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs
  3. 6
      csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs
  4. 11
      csharp/src/Google.Protobuf/JsonFormatter.cs
  5. 4
      csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
  6. 5
      csharp/src/Google.Protobuf/WellKnownTypes/FieldMaskPartial.cs
  7. 4
      csharp/src/Google.Protobuf/WellKnownTypes/TimeExtensions.cs

@ -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
{

Loading…
Cancel
Save