forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
//
 | 
						|
// Author:
 | 
						|
//   Jb Evain (jbevain@gmail.com)
 | 
						|
//
 | 
						|
// Copyright (c) 2008 - 2015 Jb Evain
 | 
						|
// Copyright (c) 2008 - 2011 Novell, Inc.
 | 
						|
//
 | 
						|
// Licensed under the MIT/X11 license.
 | 
						|
//
 | 
						|
 | 
						|
using System;
 | 
						|
 | 
						|
namespace MonoFN.Cecil {
 | 
						|
 | 
						|
	public abstract class MemberReference : IMetadataTokenProvider {
 | 
						|
 | 
						|
		string name;
 | 
						|
		TypeReference declaring_type;
 | 
						|
 | 
						|
		internal MetadataToken token;
 | 
						|
		internal object projection;
 | 
						|
 | 
						|
		public virtual string Name {
 | 
						|
			get { return name; }
 | 
						|
			set {
 | 
						|
				if (IsWindowsRuntimeProjection && value != name)
 | 
						|
					throw new InvalidOperationException ();
 | 
						|
 | 
						|
				name = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public abstract string FullName {
 | 
						|
			get;
 | 
						|
		}
 | 
						|
 | 
						|
		public virtual TypeReference DeclaringType {
 | 
						|
			get { return declaring_type; }
 | 
						|
			set { declaring_type = value; }
 | 
						|
		}
 | 
						|
 | 
						|
		public MetadataToken MetadataToken {
 | 
						|
			get { return token; }
 | 
						|
			set { token = value; }
 | 
						|
		}
 | 
						|
 | 
						|
		public bool IsWindowsRuntimeProjection {
 | 
						|
			get { return projection != null; }
 | 
						|
		}
 | 
						|
 | 
						|
		internal bool HasImage {
 | 
						|
			get {
 | 
						|
				var module = Module;
 | 
						|
				if (module == null)
 | 
						|
					return false;
 | 
						|
 | 
						|
				return module.HasImage;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public virtual ModuleDefinition Module {
 | 
						|
			get { return declaring_type != null ? declaring_type.Module : null; }
 | 
						|
		}
 | 
						|
 | 
						|
		public virtual bool IsDefinition {
 | 
						|
			get { return false; }
 | 
						|
		}
 | 
						|
 | 
						|
		public virtual bool ContainsGenericParameter {
 | 
						|
			get { return declaring_type != null && declaring_type.ContainsGenericParameter; }
 | 
						|
		}
 | 
						|
 | 
						|
		internal MemberReference ()
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		internal MemberReference (string name)
 | 
						|
		{
 | 
						|
			this.name = name ?? string.Empty;
 | 
						|
		}
 | 
						|
 | 
						|
		internal string MemberFullName ()
 | 
						|
		{
 | 
						|
			if (declaring_type == null)
 | 
						|
				return name;
 | 
						|
 | 
						|
			return declaring_type.FullName + "::" + name;
 | 
						|
		}
 | 
						|
 | 
						|
		public IMemberDefinition Resolve ()
 | 
						|
		{
 | 
						|
			return ResolveDefinition ();
 | 
						|
		}
 | 
						|
 | 
						|
		protected abstract IMemberDefinition ResolveDefinition ();
 | 
						|
 | 
						|
		public override string ToString ()
 | 
						|
		{
 | 
						|
			return FullName;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |