a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
85 lines
2.0 KiB
C#
85 lines
2.0 KiB
C#
using System;
|
|
using System.Reflection;
|
|
|
|
[assembly: AssemblyTitle ("Foo")]
|
|
[assembly: AssemblyVersion ("1.0.2")]
|
|
|
|
namespace N1 {
|
|
|
|
[AttributeUsage (AttributeTargets.All)]
|
|
public class MineAttribute : Attribute {
|
|
|
|
public string name;
|
|
|
|
public MineAttribute (string s)
|
|
{
|
|
name = s;
|
|
}
|
|
}
|
|
|
|
[AttributeUsage (AttributeTargets.ReturnValue)]
|
|
public class ReturnAttribute : Attribute {
|
|
|
|
public string name;
|
|
|
|
public ReturnAttribute (string s)
|
|
{
|
|
name = s;
|
|
}
|
|
}
|
|
|
|
public interface TestInterface {
|
|
void Hello ([Mine ("param")] int i);
|
|
}
|
|
|
|
public class Foo {
|
|
|
|
int i;
|
|
|
|
[Mine ("Foo")]
|
|
[return: Return ("Bar")]
|
|
public static int Main ()
|
|
{
|
|
Type t = typeof (Foo);
|
|
foreach (MemberInfo m in t.GetMembers ()){
|
|
if (m.Name == "Main"){
|
|
MethodInfo mb = (MethodInfo) m;
|
|
|
|
ICustomAttributeProvider p = mb.ReturnTypeCustomAttributes;
|
|
object [] ret_attrs = p.GetCustomAttributes (false);
|
|
|
|
if (ret_attrs.Length != 1){
|
|
Console.WriteLine ("Got more than one return attribute");
|
|
return 1;
|
|
}
|
|
if (!(ret_attrs [0] is ReturnAttribute)){
|
|
Console.WriteLine ("Dit not get a MineAttribute");
|
|
return 2;
|
|
}
|
|
|
|
ReturnAttribute ma = (ReturnAttribute) ret_attrs [0];
|
|
if (ma.name != "Bar"){
|
|
Console.WriteLine ("The return attribute is not Bar");
|
|
return 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
Type ifType = typeof (TestInterface);
|
|
|
|
MethodInfo method = ifType.GetMethod ("Hello",
|
|
BindingFlags.Public | BindingFlags.Instance);
|
|
|
|
ParameterInfo[] parameters = method.GetParameters();
|
|
ParameterInfo param = parameters [0];
|
|
|
|
object[] testAttrs = param.GetCustomAttributes (true);
|
|
|
|
if (testAttrs.Length != 1)
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
}
|