// Helper function to create a BamlRecord from a BamlRecordType private BamlRecord AllocateRecord(BamlRecordType recordType) { BamlRecord record; switch(recordType) { case BamlRecordType.DocumentStart: record = new BamlDocumentStartRecord(); break; case BamlRecordType.DocumentEnd: record = new BamlDocumentEndRecord(); break; case BamlRecordType.ConnectionId: record = new BamlConnectionIdRecord(); break; case BamlRecordType.ElementStart: record = new BamlElementStartRecord(); break; case BamlRecordType.ElementEnd: record = new BamlElementEndRecord(); break; case BamlRecordType.DeferableContentStart: record = new BamlDeferableContentStartRecord(); break; case BamlRecordType.DefAttributeKeyString: record = new BamlDefAttributeKeyStringRecord(); break; case BamlRecordType.DefAttributeKeyType: record = new BamlDefAttributeKeyTypeRecord(); break; case BamlRecordType.LiteralContent: record = new BamlLiteralContentRecord(); break; case BamlRecordType.Property: record = new BamlPropertyRecord(); break; case BamlRecordType.PropertyWithConverter: record = new BamlPropertyWithConverterRecord(); break; case BamlRecordType.PropertyStringReference: record = new BamlPropertyStringReferenceRecord(); break; case BamlRecordType.PropertyTypeReference: record = new BamlPropertyTypeReferenceRecord(); break; case BamlRecordType.PropertyWithExtension: record = new BamlPropertyWithExtensionRecord(); break; case BamlRecordType.PropertyCustom: record = new BamlPropertyCustomRecord(); break; case BamlRecordType.PropertyComplexStart: record = new BamlPropertyComplexStartRecord(); break; case BamlRecordType.PropertyComplexEnd: record = new BamlPropertyComplexEndRecord(); break; case BamlRecordType.RoutedEvent: record = new BamlRoutedEventRecord(); break; case BamlRecordType.PropertyArrayStart: record = new BamlPropertyArrayStartRecord(); break; case BamlRecordType.PropertyArrayEnd: record = new BamlPropertyArrayEndRecord(); break; case BamlRecordType.PropertyIListStart: record = new BamlPropertyIListStartRecord(); break; case BamlRecordType.PropertyIListEnd: record = new BamlPropertyIListEndRecord(); break; case BamlRecordType.PropertyIDictionaryStart: record = new BamlPropertyIDictionaryStartRecord(); break; case BamlRecordType.PropertyIDictionaryEnd: record = new BamlPropertyIDictionaryEndRecord(); break; case BamlRecordType.Text: record = new BamlTextRecord(); break; case BamlRecordType.TextWithConverter: record = new BamlTextWithConverterRecord(); break; case BamlRecordType.TextWithId: record = new BamlTextWithIdRecord(); break; case BamlRecordType.XmlnsProperty: record = new BamlXmlnsPropertyRecord(); break; case BamlRecordType.PIMapping: record = new BamlPIMappingRecord(); break; case BamlRecordType.DefAttribute: record = new BamlDefAttributeRecord(); break; case BamlRecordType.PresentationOptionsAttribute: record = new BamlPresentationOptionsAttributeRecord(); break; case BamlRecordType.KeyElementStart: record = new BamlKeyElementStartRecord(); break; case BamlRecordType.KeyElementEnd: record = new BamlKeyElementEndRecord(); break; case BamlRecordType.ConstructorParametersStart: record = new BamlConstructorParametersStartRecord(); break; case BamlRecordType.ConstructorParametersEnd: record = new BamlConstructorParametersEndRecord(); break; case BamlRecordType.ConstructorParameterType: record = new BamlConstructorParameterTypeRecord(); break; case BamlRecordType.ContentProperty: record = new BamlContentPropertyRecord(); break; case BamlRecordType.AssemblyInfo: case BamlRecordType.TypeInfo: case BamlRecordType.TypeSerializerInfo: case BamlRecordType.AttributeInfo: case BamlRecordType.StringInfo: Debug.Assert(false,"Assembly, Type and Attribute records are not cached, so don't ask for one."); record = null; break; case BamlRecordType.StaticResourceStart: record = new BamlStaticResourceStartRecord(); break; case BamlRecordType.StaticResourceEnd: record = new BamlStaticResourceEndRecord(); break; case BamlRecordType.StaticResourceId: record = new BamlStaticResourceIdRecord(); break; case BamlRecordType.LineNumberAndPosition: record = new BamlLineAndPositionRecord(); break; case BamlRecordType.LinePosition: record = new BamlLinePositionRecord(); break; case BamlRecordType.OptimizedStaticResource: record = new BamlOptimizedStaticResourceRecord(); break; case BamlRecordType.PropertyWithStaticResourceId: record = new BamlPropertyWithStaticResourceIdRecord(); break; default: Debug.Assert(false,"Unknown RecordType"); record = null; break; } return record; }
internal BamlRecord CloneRecord(BamlRecord record) { BamlRecord newRecord; switch (record.RecordType) { case BamlRecordType.ElementStart: if (record is BamlNamedElementStartRecord) { newRecord= new BamlNamedElementStartRecord(); } else { newRecord = new BamlElementStartRecord(); } break; case BamlRecordType.PropertyCustom: if (record is BamlPropertyCustomWriteInfoRecord) { newRecord = new BamlPropertyCustomWriteInfoRecord(); } else { newRecord = new BamlPropertyCustomRecord(); } break; default: newRecord = AllocateRecord(record.RecordType); break; } record.Copy(newRecord); return newRecord; }