Ejemplo n.º 1
0
        private void ImplementEventAddMethod(CustomEventEmitter eventEmitter)
        {
            FieldReference field;

            if (eventEmitter.EventKind == EventKind.Static)
            {
                field = _classEmitter.CreateStaticField("AddCalled", typeof(bool));
            }
            else
            {
                field = _classEmitter.CreateField("AddCalled", typeof(bool));
            }

            eventEmitter.AddMethod.AddStatement(new AssignStatement(field, new ConstReference(true).ToExpression()));
            eventEmitter.AddMethod.ImplementByReturningVoid();
        }
        public DynamicMixinTypeGenerator(ModuleScope scope, Type targetType, IEnumerable <MethodInfo> methodsToOverride, MethodInvocationHandler invocationHandler)
        {
            ArgumentUtility.CheckNotNull("scope", scope);
            ArgumentUtility.CheckNotNull("targetType", targetType);
            ArgumentUtility.CheckNotNull("methodsToOverride", methodsToOverride);
            ArgumentUtility.CheckNotNull("invocationHandler", invocationHandler);

            if (targetType.ContainsGenericParameters)
            {
                throw new NotSupportedException("Open generic target types are not supported by this type generator.");
            }

            _methodsToOverride = methodsToOverride;
            _invocationHandler = invocationHandler;

            string className = "DynamicMixinFor_" + targetType.Name;

            _baseCallInterface = BaseRequirements.BuildBaseRequirements(_methodsToOverride, className + "_BaseRequirements", scope);

            Type mixinBase = typeof(Mixin <,>).MakeGenericType(typeof(object), _baseCallInterface.RequirementsType);

            _emitter = new CustomClassEmitter(scope, className, mixinBase);

            _invocationHandlerField = _emitter.CreateStaticField("InvocationHandler", typeof(MethodInvocationHandler));

            foreach (MethodInfo method in _methodsToOverride)
            {
                AddOverrider(method, _invocationHandlerField);
            }
        }
Ejemplo n.º 3
0
        public void CreateStaticField_WithAttributes()
        {
            var classEmitter = new CustomClassEmitter(Scope, "CreateStaticField_WithAttributes", typeof(object));

            classEmitter.CreateStaticField("_test", typeof(string), FieldAttributes.Private);

            Type t = classEmitter.BuildType();

            Assert.That(t.GetField("_test", BindingFlags.NonPublic | BindingFlags.Static).Attributes, Is.EqualTo(FieldAttributes.Static | FieldAttributes.Private));
        }
Ejemplo n.º 4
0
        public void CreateTypeConstructorCreateStaticField()
        {
            var            classEmitter = new CustomClassEmitter(Scope, "CreateTypeConstructorCreateStaticField", typeof(object));
            FieldReference field        = classEmitter.CreateStaticField("s_test", typeof(string));

            classEmitter.CreateTypeConstructor().CodeBuilder
            .AddStatement(new AssignStatement(field, (new ConstReference("Yay").ToExpression())))
            .AddStatement(new ReturnStatement());
            Type t = classEmitter.BuildType();

            Assert.That(t.GetField("s_test").GetValue(null), Is.EqualTo("Yay"));
        }