in src/Microsoft.VisualStudio.Composition/Configuration/CachedCatalog.cs [292:349]
private void Write(IImportSatisfiabilityConstraint importConstraint)
{
using (this.Trace(nameof(IImportSatisfiabilityConstraint)))
{
ConstraintTypes type;
if (importConstraint is ImportMetadataViewConstraint)
{
type = ConstraintTypes.ImportMetadataViewConstraint;
}
else if (importConstraint is ExportTypeIdentityConstraint)
{
type = ConstraintTypes.ExportTypeIdentityConstraint;
}
else if (importConstraint is PartCreationPolicyConstraint)
{
type = ConstraintTypes.PartCreationPolicyConstraint;
}
else if (importConstraint is ExportMetadataValueImportConstraint)
{
type = ConstraintTypes.ExportMetadataValueImportConstraint;
}
else
{
throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, Strings.ImportConstraintTypeNotSupported, importConstraint.GetType().FullName));
}
this.writer!.Write((byte)type);
switch (type)
{
case ConstraintTypes.ImportMetadataViewConstraint:
var importMetadataViewConstraint = (ImportMetadataViewConstraint)importConstraint;
this.WriteCompressedUInt((uint)importMetadataViewConstraint.Requirements.Count);
foreach (var item in importMetadataViewConstraint.Requirements)
{
this.Write(item.Key);
this.Write(item.Value.MetadatumValueTypeRef);
this.writer.Write(item.Value.IsMetadataumValueRequired);
}
break;
case ConstraintTypes.ExportTypeIdentityConstraint:
var exportTypeIdentityConstraint = (ExportTypeIdentityConstraint)importConstraint;
this.Write(exportTypeIdentityConstraint.TypeIdentityName);
break;
case ConstraintTypes.PartCreationPolicyConstraint:
var partCreationPolicyConstraint = (PartCreationPolicyConstraint)importConstraint;
this.Write(partCreationPolicyConstraint.RequiredCreationPolicy);
break;
case ConstraintTypes.ExportMetadataValueImportConstraint:
var exportMetadataValueImportConstraint = (ExportMetadataValueImportConstraint)importConstraint;
this.Write(exportMetadataValueImportConstraint.Name);
this.WriteObject(exportMetadataValueImportConstraint.Value);
break;
default:
throw Assumes.NotReachable();
}
}
}