void UpdateBindings(Stetic.Component obj, ITypeSymbol cls) { if (targetObject == null || cls == null) { return; } // Remove signals for which there isn't a handler in the class Stetic.SignalCollection objectSignals = obj.GetSignals(); if (objectSignals != null) { Stetic.Signal[] signals = new Stetic.Signal [objectSignals.Count]; objectSignals.CopyTo(signals, 0); foreach (Stetic.Signal signal in signals) { if (FindSignalHandler(cls, signal) == null) { obj.RemoveSignal(signal); } } } // Update children foreach (Stetic.Component ob in obj.GetChildren()) { UpdateBindings(ob, cls); } }
void AddSignalsRec(CodeTypeDeclaration type, Stetic.Component comp) { foreach (Stetic.Signal signal in comp.GetSignals()) { CodeMemberMethod met = new CodeMemberMethod(); met.Name = signal.Handler; met.Attributes = MemberAttributes.Family; met.ReturnType = new CodeTypeReference(signal.SignalDescriptor.HandlerReturnTypeName); foreach (Stetic.ParameterDescriptor pinfo in signal.SignalDescriptor.HandlerParameters) { met.Parameters.Add(new CodeParameterDeclarationExpression(pinfo.TypeName, pinfo.Name)); } type.Members.Add(met); } foreach (Stetic.Component cc in comp.GetChildren()) { AddSignalsRec(type, cc); } }