using System;
using System.Runtime.InteropServices;

namespace ICSharpCode.Decompiler.Tests.TestCases.Correctness
{
	public class ComInterop
	{
		public static void Main()
		{
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetMethod("MyMethod1")));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty1").GetMethod));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetMethod("MyMethod2")));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty2").GetMethod));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty2").SetMethod));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetEvent("MyEvent1").AddMethod));
			Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetEvent("MyEvent1").RemoveMethod));
		}


		[Guid("761618B8-3994-449A-A96B-F1FF2795EA85")]
		[ComImport]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IMixedPropsAndMethods
		{
			int MyMethod1();

			int MyProperty1 { get; }
			int MyOverload();

			int MyMethod2();

			int MyProperty2 { get; set; }

			int MyOverload(int x);

			event EventHandler MyEvent1;

			int MyMethod3();

		}
	}
}