Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
CecilSerializerDependency.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using Mono.Cecil;
7 
8 namespace SiliconStudio.AssemblyProcessor
9 {
10  /// <summary>
11  /// Enumerates required subtypes the given serializer will use internally.
12  /// </summary>
14  {
15  string genericSerializerTypeFullName;
16  TypeReference genericSerializableType;
17 
18  /// <summary>
19  /// Initializes a new instance of the <see cref="CecilSerializerDependency" /> class.
20  /// It will enumerates T1, T2 from genericSerializerType{T1, T2}.
21  /// </summary>
22  /// <param name="genericSerializerType">Type of the generic serializer.</param>
23  public CecilSerializerDependency(string genericSerializerTypeFullName)
24  {
25  if (genericSerializerTypeFullName == null)
26  throw new ArgumentNullException("genericSerializerTypeFullName");
27 
28  this.genericSerializerTypeFullName = genericSerializerTypeFullName;
29  }
30 
31  /// <summary>
32  /// Initializes a new instance of the <see cref="CecilSerializerDependency" /> class.
33  /// It will enumerates genericSerializableType{T1, T2} from genericSerializerType{T1, T2}.
34  /// </summary>
35  /// <param name="genericSerializerType">Type of the generic serializer.</param>
36  /// <param name="genericSerializableType">Type of the generic serializable.</param>
37  public CecilSerializerDependency(string genericSerializerTypeFullName, TypeReference genericSerializableType)
38  {
39  if (genericSerializerTypeFullName == null)
40  throw new ArgumentNullException("genericSerializerTypeFullName");
41  if (genericSerializableType == null)
42  throw new ArgumentNullException("genericSerializableType");
43 
44  this.genericSerializerTypeFullName = genericSerializerTypeFullName;
45  this.genericSerializableType = genericSerializableType;
46  }
47 
48  public IEnumerable<TypeReference> EnumerateSubTypesFromSerializer(TypeReference serializerType)
49  {
50  // Check if serializer type name matches
51  if (serializerType.IsGenericInstance && serializerType.GetElementType().FullName == genericSerializerTypeFullName)
52  {
53  if (genericSerializableType != null)
54  // Transforms genericSerializerType{T1, T2} into genericSerializableType{T1, T2}
55  return Enumerable.Repeat(genericSerializableType.MakeGenericType(((GenericInstanceType)serializerType).GenericArguments.ToArray()), 1);
56  else
57  // Transforms genericSerializerType{T1, T2} into T1, T2
58  return ((GenericInstanceType)serializerType).GenericArguments;
59  }
60 
61  return null;
62  }
63  }
64 }
Enumerates required subtypes the given serializer will use internally. This is useful for generation ...
Enumerates required subtypes the given serializer will use internally.
CecilSerializerDependency(string genericSerializerTypeFullName)
Initializes a new instance of the CecilSerializerDependency class. It will enumerates T1...
The generic arguments of the serialized type will be passed as a generic arguments of the serializer...
CecilSerializerDependency(string genericSerializerTypeFullName, TypeReference genericSerializableType)
Initializes a new instance of the CecilSerializerDependency class. It will enumerates genericSerializ...
IEnumerable< TypeReference > EnumerateSubTypesFromSerializer(TypeReference serializerType)
Enumerates the types this serializer requires.