/Mono.Cecil/MemberReference.cs

http://github.com/jbevain/cecil · C# · 107 lines · 74 code · 24 blank · 9 comment · 11 complexity · 56d1cfe534fe0eca7b11b94ab6b7f879 MD5 · raw file

  1. //
  2. // Author:
  3. // Jb Evain (jbevain@gmail.com)
  4. //
  5. // Copyright (c) 2008 - 2015 Jb Evain
  6. // Copyright (c) 2008 - 2011 Novell, Inc.
  7. //
  8. // Licensed under the MIT/X11 license.
  9. //
  10. using System;
  11. namespace Mono.Cecil {
  12. public abstract class MemberReference : IMetadataTokenProvider {
  13. string name;
  14. TypeReference declaring_type;
  15. internal MetadataToken token;
  16. internal object projection;
  17. public virtual string Name {
  18. get { return name; }
  19. set {
  20. if (IsWindowsRuntimeProjection && value != name)
  21. throw new InvalidOperationException ();
  22. name = value;
  23. }
  24. }
  25. public abstract string FullName {
  26. get;
  27. }
  28. public virtual TypeReference DeclaringType {
  29. get { return declaring_type; }
  30. set { declaring_type = value; }
  31. }
  32. public MetadataToken MetadataToken {
  33. get { return token; }
  34. set { token = value; }
  35. }
  36. public bool IsWindowsRuntimeProjection {
  37. get { return projection != null; }
  38. }
  39. internal MemberReferenceProjection WindowsRuntimeProjection {
  40. get { return (MemberReferenceProjection) projection; }
  41. set { projection = value; }
  42. }
  43. internal bool HasImage {
  44. get {
  45. var module = Module;
  46. if (module == null)
  47. return false;
  48. return module.HasImage;
  49. }
  50. }
  51. public virtual ModuleDefinition Module {
  52. get { return declaring_type != null ? declaring_type.Module : null; }
  53. }
  54. public virtual bool IsDefinition {
  55. get { return false; }
  56. }
  57. public virtual bool ContainsGenericParameter {
  58. get { return declaring_type != null && declaring_type.ContainsGenericParameter; }
  59. }
  60. internal MemberReference ()
  61. {
  62. }
  63. internal MemberReference (string name)
  64. {
  65. this.name = name ?? string.Empty;
  66. }
  67. internal string MemberFullName ()
  68. {
  69. if (declaring_type == null)
  70. return name;
  71. return declaring_type.FullName + "::" + name;
  72. }
  73. public IMemberDefinition Resolve ()
  74. {
  75. return ResolveDefinition ();
  76. }
  77. protected abstract IMemberDefinition ResolveDefinition ();
  78. public override string ToString ()
  79. {
  80. return FullName;
  81. }
  82. }
  83. }