/// <summary> /// Append <see cref="StringLocalizerParameter"/>. /// </summary> /// <param name="appender"></param> /// <param name="previous"></param> /// <param name="parameterName"></param> /// <param name="parameterValue"></param> /// <param name="result"></param> /// <returns></returns> public virtual bool TryCreate(ILineFactory appender, ILine previous, string parameterName, string parameterValue, out ILineParameter result) { // Try resolve ILineArgument args; ILine resolved; if (Resolver.TryResolveParameter(previous, parameterName, parameterValue, out args) && this.TryCreate(previous, args, out resolved) && resolved is ILineParameter castedResolved) { // Return as parameter and as resolved instance result = castedResolved; return(true); } IParameterInfo pi; if (ParameterInfos.TryGetValue(parameterName, out pi)) { if (pi.InterfaceType == typeof(ILineHint)) { result = new StringLocalizerHint(appender, previous, parameterName, parameterValue); return(true); } if (pi.InterfaceType == typeof(ILineCanonicalKey)) { result = new StringLocalizerCanonicalKey(appender, previous, parameterName, parameterValue); return(true); } if (pi.InterfaceType == typeof(ILineNonCanonicalKey)) { result = new StringLocalizerNonCanonicalKey(appender, previous, parameterName, parameterValue); return(true); } } // Return as parameter result = new StringLocalizerParameter(appender, previous, parameterName, parameterValue); return(true); }
public bool TryMatchParameters(object[] parameterValues, out object[] result) { if (parameterValues == null || ParameterInfos == null) { // TODO: throw } result = new object[parameterValues.Length]; if (parameterValues.Length != ParameterInfos.Length) { return(false); } for (var i = 0; i < parameterValues.Length; i++) { var parameterInfo = ParameterInfos.FirstOrDefault(x => x.Index == i); if (parameterInfo == null) { return(false); } object o; if (parameterValues[i].Convertible(parameterInfo.TypeDefinition.Info as Type, out o)) { result[i] = o; } else { return(false); } } return(true); }
public override void SetUpParameter(PropertyInfo property, SynthParameter param) { var catName = param.Category ?? "Default"; if (!(Categories.Contains(catName))) { Categories.Add(new VstParameterCategory() { Name = catName }); } var category = Categories[catName]; var paramInfo = new VstParameterInfo(); paramInfo.Category = category; paramInfo.CanBeAutomated = true; paramInfo.Name = param.Name; paramInfo.Label = property.Name; paramInfo.ShortLabel = param.ShortLabel; paramInfo.MinInteger = param.Lo; paramInfo.MaxInteger = param.Hi; paramInfo.DefaultValue = param.DefaultValue; VstParameterNormalizationInfo.AttachTo(paramInfo); var manager = new VstParameterManager(paramInfo); _managers.Add(manager); if (property.PropertyType == typeof(float) || property.PropertyType == typeof(double)) { manager.PropertyChanged += (object sender, PropertyChangedEventArgs e) => { if (e.PropertyName == "CurrentValue") { VstParameterManager paramMgr = (VstParameterManager)sender; property.SetValue(this, paramMgr.CurrentValue); OnPropertyChanged(property.Name); } } } ; else if (property.PropertyType == typeof(int)) { manager.PropertyChanged += (object sender, PropertyChangedEventArgs e) => { if (e.PropertyName == "CurrentValue") { VstParameterManager paramMgr = (VstParameterManager)sender; property.SetValue(this, (int)(paramMgr.CurrentValue + 0.5f)); OnPropertyChanged(property.Name); } } } ; else { throw new InvalidOperationException($"Parameter type {property.PropertyType} is not supported (yet?)"); } ParameterInfos.Add(paramInfo); }
private Collection <HttpParameterDescriptor> InitializeParameterDescriptors() { Contract.Assert(_methodInfo != null); List <HttpParameterDescriptor> parameterInfos = ParameterInfos.Select( (item) => new ReflectedHttpParameterDescriptor(this, item)).ToList <HttpParameterDescriptor>(); return(new Collection <HttpParameterDescriptor>(parameterInfos)); }
/// <summary> /// Создает коллекцию программ. /// </summary> /// <returns></returns> protected override VstProgramCollection CreateProgramCollection() { VstProgramCollection programs = new VstProgramCollection(); VstProgram defaultProgram = new VstProgram(ParameterCategories); defaultProgram.Parameters.AddRange(ParameterInfos.Select(x => new VstParameter(x))); defaultProgram.Name = "Default"; programs.Add(defaultProgram); return(programs); }
public string GetSignature(bool isInterfaceDeclaration) { var sb = new System.Text.StringBuilder(); sb.Append($"fn {NativeName}("); var paramDecl = ParameterInfos.Select((rpi) => { return($"{rpi.NativeName}: {rpi.NativeTypeName}"); }).ToList(); if (!isInterfaceDeclaration) { paramDecl.Insert(0, "&self"); } sb.Append(string.Join(", ", paramDecl)); sb.Append($") -> {NativeReturnTypeName}"); return(sb.ToString()); }
private object CreateInstance() { var instance = Activator.CreateInstance(TypeDefinition.Info as Type, ParameterInfos == null ? new object[0] : ParameterInfos.OrderBy(x => x.Index).Select(x => x.ParameterValue).ToArray()); if (PropertyInfos != null && PropertyInfos.Length > 0) { foreach (var propertyInfo in PropertyInfos) { (propertyInfo.PropertyDefinition.Info as PropertyInfo).SetValue(instance, propertyInfo.PropertyValue); } } return(instance); }
public override void OnException(MethodExecutionArgs args) { Console.WriteLine( $"Exception: {args.Method.DeclaringType?.Name}.{args.Method.Name}({ParameterInfos.Select((x, i) => $"{x.Name} = {args.Arguments[i]}").Aggregate((x, y) => x + ", " + y)})"); args.FlowBehavior = FlowBehavior.ThrowException; }
public override void OnEntry(MethodExecutionArgs args) { Console.WriteLine( $"Entering {args.Method.DeclaringType?.Name}.{args.Method.Name}({ParameterInfos.Select((x, i) => $"{x.Name} = {args.Arguments[i]}").Aggregate((x, y) => x + ", " + y)})"); }