Exemplo n.º 1
0
        private void ResolveCustomAttributes(MosaUnit.MutatorBase unit, IHasCustomAttribute obj)
        {
            foreach (var attr in obj.CustomAttributes)
            {
                MosaType   type     = metadata.Loader.GetType(attr.AttributeType.ToTypeSig());
                MethodDef  ctor     = ((IMethodDefOrRef)attr.Constructor).ResolveMethod();
                MosaMethod mosaCtor = null;
                foreach (var method in type.Methods)
                {
                    var desc = method.GetUnderlyingObject <UnitDesc <MethodDef, MethodSig> >();
                    if (desc.Token.Token == ctor.MDToken)
                    {
                        mosaCtor = method;
                        break;
                    }
                }
                if (mosaCtor == null)
                {
                    throw new AssemblyLoadException();
                }

                var values = new MosaCustomAttribute.Argument[attr.ConstructorArguments.Count];
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = ToMosaCAArgument(attr.ConstructorArguments[i]);
                }

                var namedArgs = new MosaCustomAttribute.NamedArgument[attr.NamedArguments.Count];
                for (int i = 0; i < namedArgs.Length; i++)
                {
                    var namedArg = attr.NamedArguments[i];
                    namedArgs[i] = new MosaCustomAttribute.NamedArgument(namedArg.Name, namedArg.IsField, ToMosaCAArgument(namedArg.Argument));
                }

                unit.CustomAttributes.Add(new MosaCustomAttribute(mosaCtor, values, namedArgs));
            }
        }
Exemplo n.º 2
0
        private void ResolveCustomAttributes(MosaUnit.MutatorBase unit, IHasCustomAttribute obj)
        {
            foreach (var attr in obj.CustomAttributes)
            {
                MosaType type = metadata.Loader.GetType(attr.AttributeType.ToTypeSig());
                MethodDef ctor = ((IMethodDefOrRef)attr.Constructor).ResolveMethod();
                MosaMethod mosaCtor = null;
                foreach (var method in type.Methods)
                {
                    var desc = method.GetUnderlyingObject<UnitDesc<MethodDef, MethodSig>>();
                    if (desc.Token.Token == ctor.MDToken)
                    {
                        mosaCtor = method;
                        break;
                    }
                }
                if (mosaCtor == null)
                    throw new AssemblyLoadException();

                var values = new MosaCustomAttribute.Argument[attr.ConstructorArguments.Count];
                for (int i = 0; i < values.Length; i++)
                    values[i] = ToMosaCAArgument(attr.ConstructorArguments[i]);

                var namedArgs = new MosaCustomAttribute.NamedArgument[attr.NamedArguments.Count];
                for (int i = 0; i < namedArgs.Length; i++)
                {
                    var namedArg = attr.NamedArguments[i];
                    namedArgs[i] = new MosaCustomAttribute.NamedArgument(namedArg.Name, namedArg.IsField, ToMosaCAArgument(namedArg.Argument));
                }

                unit.CustomAttributes.Add(new MosaCustomAttribute(mosaCtor, values, namedArgs));
            }
        }