async Task IDependencyTargetExportChanged.OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { NIType type = await envoy.GetTypeDiagramSignatureAsync(); if (ShouldUpdateDataTypeFromChange(data)) { UpdateStructType(type); } }
/// <inheritdoc /> public Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { // This is called when something about the "exported" attributes of the item we are linked to changes. if (!(Rooted && envoy.Rooted)) { return(AsyncHelpers.CompletedTask); } this.TransactUpdateFromDependency(envoy, data, "Update From Dependency", () => { if (!(Rooted && envoy.Rooted)) { return; } IMethodCallTarget target = envoy?.QueryService <IMethodCallTarget>().FirstOrDefault(); if (target != null) { var name = target.Name; var icon = target.GetIcon(ViewElementTemplate.Icon); bool envoyChanged = data.Reason == ExportsChangeReason.Resolve || data.Reason == ExportsChangeReason.Unresolve; bool propertyChanged = data.Reason == ExportsChangeReason.PropertyChange; if (envoyChanged || (propertyChanged && data.ChangedProperties.Any(n => n == "Icon"))) { // Notify that the icon changed TransactionRecruiter.EnlistPropertyChanged(this, "Icon"); } if (envoyChanged || (propertyChanged && data.ChangedProperties.Any(n => n == "CacheSignature"))) { TransactionRecruiter.EnlistPropertyChanged(this, "Signature"); // You can look at the signature to gather connector pane information var signature = target.Signature; var allParameters = signature.GetParameters(); foreach (var parameter in allParameters) { var terminalName = parameter.GetAttributeValue("NI.UserDefinedName").Value ?? "Unknown"; var index = parameter.GetName(); var usage = parameter.GetParameterTerminalUsage(); var input = parameter.GetInputParameterPassingRule() != NIParameterPassingRule.NotAllowed; var output = parameter.GetOutputParameterPassingRule() != NIParameterPassingRule.NotAllowed; Log.WriteLine($"Parameter: {terminalName}, Type: {parameter.GetDataType()}"); } } } }); return(AsyncHelpers.CompletedTask); }
public async Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { if (ShouldUpdateDataTypeFromChange(data)) { NIType oldType = Type; NIType type = await envoy.GetTypeDiagramSignatureAsync(); if (type.IsUnset() || type == oldType) { return; } this.TransactUpdateFromDependency(envoy, data, TransactionManager, "Set variant type", () => { Type = type; TransactionRecruiter.EnlistPropertyItem(this, nameof(Type), oldType, type, (t, __) => { Type = t; }, TransactionHints.Semantic); UpdateCasesFromDataType(type); }); } }
public async Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { if (ShouldUpdateDataTypeFromChange(data)) { NIType oldType = Type; NIType type = await envoy.GetTypeDiagramSignatureAsync(); if (type.IsUnset() || type == oldType) { return; } using (var transaction = TransactionManager.BeginTransactionIfNecessary("Set type", TransactionPurpose.NonUser)) { Type = type; TransactionRecruiter.EnlistPropertyItem(this, nameof(Type), oldType, type, (t, __) => { Type = t; }, TransactionHints.Semantic); UpdateTerminalsFromDataType(type); transaction?.Commit(); } } }
private static bool ShouldUpdateDataTypeFromChange(ExportsChangedData data) { return(data.IsForResolve || (data.IsForPropertyChange && data.HasChangedProperty(TypeDiagramCache.DataTypePropertyName))); }
/// <inheritdoc/> Task IDependencyTargetExportChanged.OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { return(AsyncHelpers.CompletedTask); }
public Task OnExportsChangedAsync(Envoy envoy, ExportsChangedData data) { // TODO return(AsyncHelpers.CompletedTask); }