コード例 #1
0
		public static ProductException CreateError (int code, Exception innerException, Mono.Cecil.TypeReference location, string message, params object[] args)
		{
			var e = new ProductException (code, true, innerException, message, args);
			if (location != null) {
				var td = location.Resolve ();

				if (td.HasMethods) {
					foreach (var method in td.Methods) {
						if (!method.IsConstructor)
							continue;
						SetLocation (e, method);
						if (e.FileName != null)
							break;
					}
				}
			}
			return e;
		}
コード例 #2
0
		protected static bool IsEqualOrSubclass (Mono.Linker.AssemblyResolver resolver, MC.TypeReference inspect, MC.TypeReference baseClass)
		{
			MC.TypeDefinition currentType = resolver.Resolve (inspect);
			
			while (true) {
				if (baseClass.FullName == currentType.FullName)
					return true;
				if (currentType.BaseType.FullName == "System.Object")
					return false;
				currentType = resolver.Resolve (currentType.BaseType);
			}
		}
コード例 #3
0
		protected static bool ImplementsInterface (Mono.Linker.AssemblyResolver resolver, MC.TypeReference inspect, MC.TypeReference interf)
		{
			MC.TypeDefinition currentType = resolver.Resolve (inspect);
			foreach (MC.TypeReference child in currentType.Interfaces) {
				if (child.FullName == interf.FullName)
					return true;
				if (ImplementsInterface (resolver, child, interf))
					return true;
			}
			if (ImplementsInterface (resolver, currentType.BaseType, interf))
				return true;
			return false;
		}
コード例 #4
0
		protected static IEnumerable<MC.CustomAttribute> AllCustomAttributes (Mono.Linker.AssemblyResolver resolver, MC.TypeDefinition typedef)
		{
			MC.TypeDefinition currentType = typedef;
			while (true) {
				foreach (MC.CustomAttribute attr in currentType.CustomAttributes)
					yield return attr;
				if (currentType.BaseType.FullName == "System.Object")
					yield break;
				currentType = resolver.Resolve (currentType.BaseType);
			}
		}