// Token: 0x060021BA RID: 8634 RVA: 0x000A8248 File Offset: 0x000A6448 internal void CompileAttribute(ArrayList xamlNodes, AttributeData data) { string fullName = data.DeclaringType.Assembly.FullName; string fullName2 = data.DeclaringType.FullName; Type propertyType; bool propertyCanWrite; XamlTypeMapper.GetPropertyType(data.Info, out propertyType, out propertyCanWrite); XamlNode value; XamlNode value2; switch (BamlRecordManager.GetPropertyStartRecordType(propertyType, propertyCanWrite)) { case BamlRecordType.PropertyArrayStart: value = new XamlPropertyArrayStartNode(data.LineNumber, data.LinePosition, data.Depth, data.Info, fullName, fullName2, data.PropertyName); value2 = new XamlPropertyArrayEndNode(data.LineNumber, data.LinePosition, data.Depth); goto IL_164; case BamlRecordType.PropertyIListStart: value = new XamlPropertyIListStartNode(data.LineNumber, data.LinePosition, data.Depth, data.Info, fullName, fullName2, data.PropertyName); value2 = new XamlPropertyIListEndNode(data.LineNumber, data.LinePosition, data.Depth); goto IL_164; case BamlRecordType.PropertyIDictionaryStart: value = new XamlPropertyIDictionaryStartNode(data.LineNumber, data.LinePosition, data.Depth, data.Info, fullName, fullName2, data.PropertyName); value2 = new XamlPropertyIDictionaryEndNode(data.LineNumber, data.LinePosition, data.Depth); goto IL_164; } value = new XamlPropertyComplexStartNode(data.LineNumber, data.LinePosition, data.Depth, data.Info, fullName, fullName2, data.PropertyName); value2 = new XamlPropertyComplexEndNode(data.LineNumber, data.LinePosition, data.Depth); IL_164: xamlNodes.Add(value); this.CompileAttributeCore(xamlNodes, data); xamlNodes.Add(value2); }
// Token: 0x06001EC8 RID: 7880 RVA: 0x00093B7C File Offset: 0x00091D7C internal static BamlRecordType GetPropertyStartRecordType(Type propertyType, bool propertyCanWrite) { BamlRecordType result; if (propertyType.IsArray) { result = BamlRecordType.PropertyArrayStart; } else if (typeof(IDictionary).IsAssignableFrom(propertyType)) { result = BamlRecordType.PropertyIDictionaryStart; } else if (typeof(IList).IsAssignableFrom(propertyType) || BamlRecordManager.TreatAsIAddChild(propertyType) || (typeof(IEnumerable).IsAssignableFrom(propertyType) && !propertyCanWrite)) { result = BamlRecordType.PropertyIListStart; } else { result = BamlRecordType.PropertyComplexStart; } return(result); }
// Token: 0x060020F0 RID: 8432 RVA: 0x000975CC File Offset: 0x000957CC public void WriteStartComplexProperty(string assemblyName, string ownerTypeFullName, string propName) { this.VerifyWriteState(); this._parserContext.PushScope(); this.ProcessMarkupExtensionNodes(); Type type = null; bool propertyCanWrite = true; object obj; Type type2; this.GetDpOrPi(assemblyName, ownerTypeFullName, propName, out obj, out type2); if (obj == null) { MethodInfo mi = this.GetMi(assemblyName, ownerTypeFullName, propName, out type2); if (mi != null) { XamlTypeMapper.GetPropertyType(mi, out type, out propertyCanWrite); } } else { type = XamlTypeMapper.GetPropertyType(obj); PropertyInfo propertyInfo = obj as PropertyInfo; if (propertyInfo != null) { propertyCanWrite = propertyInfo.CanWrite; } else { DependencyProperty dependencyProperty = obj as DependencyProperty; if (dependencyProperty != null) { propertyCanWrite = !dependencyProperty.ReadOnly; } } } int depth; if (type == null) { this.Push(BamlRecordType.PropertyComplexStart); int lineNumber = 0; int linePosition = 0; depth = this._depth; this._depth = depth + 1; XamlPropertyComplexStartNode xamlComplexPropertyNode = new XamlPropertyComplexStartNode(lineNumber, linePosition, depth, null, assemblyName, ownerTypeFullName, propName); this._bamlRecordWriter.WritePropertyComplexStart(xamlComplexPropertyNode); return; } BamlRecordType propertyStartRecordType = BamlRecordManager.GetPropertyStartRecordType(type, propertyCanWrite); this.Push(propertyStartRecordType); switch (propertyStartRecordType) { case BamlRecordType.PropertyArrayStart: { int lineNumber2 = 0; int linePosition2 = 0; depth = this._depth; this._depth = depth + 1; XamlPropertyArrayStartNode xamlPropertyArrayStartNode = new XamlPropertyArrayStartNode(lineNumber2, linePosition2, depth, obj, assemblyName, ownerTypeFullName, propName); this._bamlRecordWriter.WritePropertyArrayStart(xamlPropertyArrayStartNode); return; } case BamlRecordType.PropertyIListStart: { int lineNumber3 = 0; int linePosition3 = 0; depth = this._depth; this._depth = depth + 1; XamlPropertyIListStartNode xamlPropertyIListStart = new XamlPropertyIListStartNode(lineNumber3, linePosition3, depth, obj, assemblyName, ownerTypeFullName, propName); this._bamlRecordWriter.WritePropertyIListStart(xamlPropertyIListStart); return; } case BamlRecordType.PropertyIDictionaryStart: { int lineNumber4 = 0; int linePosition4 = 0; depth = this._depth; this._depth = depth + 1; XamlPropertyIDictionaryStartNode xamlPropertyIDictionaryStartNode = new XamlPropertyIDictionaryStartNode(lineNumber4, linePosition4, depth, obj, assemblyName, ownerTypeFullName, propName); this._bamlRecordWriter.WritePropertyIDictionaryStart(xamlPropertyIDictionaryStartNode); return; } } int lineNumber5 = 0; int linePosition5 = 0; depth = this._depth; this._depth = depth + 1; XamlPropertyComplexStartNode xamlComplexPropertyNode2 = new XamlPropertyComplexStartNode(lineNumber5, linePosition5, depth, obj, assemblyName, ownerTypeFullName, propName); this._bamlRecordWriter.WritePropertyComplexStart(xamlComplexPropertyNode2); }