public static IProperty GetProperty(string name, IPlatformMetadata platformMetadata) { XamlProcessingAttributes.Initialize(platformMetadata); IPropertyId propertyId; if (!XamlProcessingAttributes.properties.TryGetValue(name, out propertyId)) { return((IProperty)null); } return(platformMetadata.ResolveProperty(propertyId)); }
public static bool IsProcessingAttribute(IProperty propertyKey) { XamlProcessingAttributes.Initialize(propertyKey.DeclaringType.PlatformMetadata); foreach (IPropertyId propertyId in XamlProcessingAttributes.properties.Values) { if (propertyId == propertyKey || propertyId.Equals((object)propertyKey)) { return(true); } } return(false); }
private static void Initialize(IPlatformMetadata platformMetadata) { if (XamlProcessingAttributes.isInitialized) { return; } XamlProcessingAttributes.isInitialized = true; XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeXName); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DictionaryEntryKey); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeShared); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeUid); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeClass); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeSubclass); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeClassModifier); XamlProcessingAttributes.AddProperty(platformMetadata.KnownProperties.DesignTimeFieldModifier); }
internal static IProperty GetPropertyKey(XamlParserContext parserContext, ITextLocation lineInformation, XmlNamespace xmlNamespace, string typeAndPropertyName, XmlNamespace targetTypeNamespace, IType targetTypeId, MemberType memberTypes, MemberType defaultType, bool allowProtectedPropertiesOnTargetType) { string typeName; string memberName; if (XamlTypeHelper.SplitMemberName(parserContext, lineInformation, typeAndPropertyName, out typeName, out memberName)) { if (string.IsNullOrEmpty(memberName)) { parserContext.ReportError(XamlParseErrors.MissingArgumentName(lineInformation)); return((IProperty)null); } if (xmlNamespace == XmlNamespace.DesignTimeXmlNamespace) { return(parserContext.PlatformMetadata.GetDesignTimeProperty(memberName, targetTypeId)); } if (xmlNamespace != null && typeName == null) { if (xmlNamespace == XmlNamespace.XamlXmlNamespace) { IProperty property = XamlProcessingAttributes.GetProperty(memberName, parserContext.TypeResolver.PlatformMetadata); if (property != null) { return(property); } parserContext.ReportError(XamlParseErrors.UnrecognizedAttribute(lineInformation, xmlNamespace, memberName)); return((IProperty)null); } if (xmlNamespace == XmlNamespace.PresentationOptionsXmlNamespace) { if (memberName == parserContext.PlatformMetadata.KnownProperties.DesignTimeFreeze.Name) { return(parserContext.TypeResolver.ResolveProperty(parserContext.PlatformMetadata.KnownProperties.DesignTimeFreeze)); } parserContext.ReportError(XamlParseErrors.UnrecognizedAttribute(lineInformation, xmlNamespace, memberName)); return((IProperty)null); } if (targetTypeNamespace == null || !xmlNamespace.Equals((object)targetTypeNamespace)) { parserContext.ReportError(XamlParseErrors.UnrecognizedAttribute(lineInformation, xmlNamespace, memberName)); return((IProperty)null); } } MemberAccessTypes access = MemberAccessTypes.None; if (typeName != null) { if (xmlNamespace != null) { targetTypeId = XamlTypeHelper.GetTypeId(parserContext, lineInformation, xmlNamespace, typeName); if (parserContext.PlatformMetadata.IsNullType((ITypeId)targetTypeId)) { return((IProperty)null); } access = TypeHelper.GetAllowableMemberAccess(parserContext.TypeResolver, targetTypeId); } } else if (!parserContext.PlatformMetadata.IsNullType((ITypeId)targetTypeId)) { access = TypeHelper.GetAllowableMemberAccess(parserContext.TypeResolver, targetTypeId); if (allowProtectedPropertiesOnTargetType) { access |= MemberAccessTypes.Protected; } } if (!parserContext.PlatformMetadata.IsNullType((ITypeId)targetTypeId)) { IProperty property1 = (IProperty)targetTypeId.GetMember(defaultType, memberName, access); if (property1 == null) { MemberType memberTypes1 = memberTypes & ~defaultType; if (memberTypes1 != MemberType.None) { property1 = (IProperty)targetTypeId.GetMember(memberTypes1, memberName, access); } } if (property1 == null && targetTypeId.PlatformMetadata.GetProxyProperties(parserContext.TypeResolver) != null) { foreach (IProperty property2 in targetTypeId.PlatformMetadata.GetProxyProperties(parserContext.TypeResolver)) { if (memberName == property2.Name && property2.DeclaringType.IsAssignableFrom((ITypeId)targetTypeId) && TypeHelper.IsSet(memberTypes, property2.MemberType)) { property1 = property2; break; } } } if (property1 == null) { property1 = (IProperty)XamlTypeHelper.AddMemberIfPossible(parserContext.PlatformMetadata, targetTypeId, defaultType, memberName); } if (property1 == null) { parserContext.ReportError(XamlParseErrors.UnrecognizedOrInaccessibleMember(lineInformation, memberName)); } return(property1); } parserContext.ReportError(XamlParseErrors.CannotDetermineMemberTargetType(lineInformation, memberName)); } return((IProperty)null); }