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