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); } }
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)); }
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")); }