protected override CakeMethodAliasGenerator CreateGenerator() { var typeEmitter = new TypeEmitter(); var parameterEmitter = new ParameterEmitter(typeEmitter); return(new CakeMethodAliasGenerator(typeEmitter, parameterEmitter)); }
public CakeScriptGenerator( IBufferedFileSystem fileSystem, ICakeEnvironment environment, IGlobber globber, ICakeConfiguration configuration, IScriptProcessor processor, IScriptAliasFinder aliasFinder, ICakeLog log, IEnumerable <ILoadDirectiveProvider> loadDirectiveProviders = null) { _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); _environment = environment ?? throw new ArgumentNullException(nameof(environment)); _globber = globber ?? throw new ArgumentNullException(nameof(globber)); _log = log ?? throw new ArgumentNullException(nameof(log)); _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _processor = processor ?? throw new ArgumentNullException(nameof(processor)); _aliasFinder = aliasFinder ?? throw new ArgumentNullException(nameof(fileSystem)); _analyzer = new ScriptAnalyzer(_fileSystem, _environment, _log, loadDirectiveProviders); var typeEmitter = new TypeEmitter(); var parameterEmitter = new ParameterEmitter(typeEmitter); _methodGenerator = new CakeMethodAliasGenerator(typeEmitter, parameterEmitter); _propertyGenerator = new CakePropertyAliasGenerator(typeEmitter); }
public CakeAliasGenerator() { var typeEmitter = new TypeEmitter(); var parameterEmitter = new ParameterEmitter(typeEmitter); _methodGenerator = new CakeMethodAliasGenerator(typeEmitter, parameterEmitter); _propertyGenerator = new CakePropertyAliasGenerator(typeEmitter); }
public void Should_Return_Correct_Generated_Code_For_Method_Parameters(string methodName, string expected) { // Given var method = typeof(ParameterFixture).GetMethod(methodName, BindingFlags.Static | BindingFlags.Public); var parameter = method.GetParameters().FirstOrDefault(); // When var result = ParameterEmitter.Emit(parameter, true); // Then Assert.Equal(expected, result); }
public CakeMethodAliasGenerator(TypeEmitter typeEmitter, ParameterEmitter parameterEmitter) { _typeEmitter = typeEmitter ?? throw new ArgumentNullException(nameof(typeEmitter)); _parameterEmitter = parameterEmitter ?? throw new ArgumentNullException(nameof(parameterEmitter)); }
private ServiceDescriptor ResolveIsClass() { string name = string.Concat(serviceType.Name, "Proxy"); var interfaces = implementationType.GetInterfaces(); var classEmitter = moduleEmitter.DefineType(name, TypeAttributes.Public | TypeAttributes.Class, implementationType, interfaces); foreach (var constructorInfo in implementationType.GetConstructors(BindingFlags.Public | BindingFlags.Instance)) { var constructorEmitter = classEmitter.DefineConstructor(constructorInfo.Attributes); var parameterInfos = constructorInfo.GetParameters(); var parameterEmiters = new ParameterEmitter[parameterInfos.Length]; for (int i = 0; i < parameterInfos.Length; i++) { parameterEmiters[i] = constructorEmitter.DefineParameter(parameterInfos[i]); } constructorEmitter.InvokeBaseConstructor(constructorInfo, parameterEmiters); } var interceptMethods = new Dictionary <MethodInfo, IList <CustomAttributeData> >(MethodInfoEqualityComparer.Instance); foreach (var type in interfaces) { bool flag = type.IsDefined(InterceptAttributeType, false); var attributes = flag ? type.GetCustomAttributesData() : new CustomAttributeData[0]; foreach (var methodInfo in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { var interceptAttributes = methodInfo.IsDefined(InterceptAttributeType, false) ? Merge(attributes, methodInfo.GetCustomAttributesData()) : attributes; if (interceptAttributes.Count == 0) { continue; } if (interceptMethods.TryGetValue(methodInfo, out var intercepts)) { interceptMethods[methodInfo] = Merge(intercepts, interceptAttributes); } else { interceptMethods.Add(methodInfo, interceptAttributes); } } } var iterationType = serviceType; do { if (iterationType.IsDefined(InterceptAttributeType, false)) { var intercepts = iterationType.GetCustomAttributesData(); foreach (var methodInfo in iterationType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { if (interceptMethods.TryGetValue(methodInfo, out var attributes)) { interceptMethods[methodInfo] = Merge(intercepts, attributes); } else { interceptMethods.Add(methodInfo, intercepts); } } } iterationType = iterationType.BaseType; } while (iterationType != null && iterationType != typeof(object)); foreach (var methodInfo in serviceType.GetMethods()) { if (interceptMethods.TryGetValue(methodInfo, out var interceptAttributes)) { InterceptCore.DefineMethodOverride(This, classEmitter, methodInfo, interceptAttributes); } } interceptMethods.Clear(); return(new ServiceDescriptor(serviceType, classEmitter.CreateType(), lifetime)); }