internal static void ParsePropertyPathParameters(XamlParserContext parserContext, ITextLocation lineInformation, IXmlNamespaceResolver xmlNamespaceResolver, string path, out string propertyPath, out IList <IProperty> pathParameters) { pathParameters = (IList <IProperty>) new List <IProperty>(); StringBuilder stringBuilder = new StringBuilder(); int startIndex; int num1; int num2; for (startIndex = 0; (num1 = path.IndexOf('(', startIndex)) >= 0; startIndex = num2 + 1) { num2 = path.IndexOf(')', num1 + 1); if (num2 < 0) { parserContext.ReportError(XamlParseErrors.InvalidPropertyPathSyntax(lineInformation, path)); startIndex = path.Length; break; } string prefixAndTypeName = path.Substring(num1 + 1, num2 - num1 - 1); if (prefixAndTypeName.IndexOf('.') >= 0) { stringBuilder.Append(path.Substring(startIndex, num1 - startIndex)); stringBuilder.Append('('); stringBuilder.Append(pathParameters.Count); stringBuilder.Append(')'); IProperty property = (IProperty)null; XmlnsPrefix prefix; string typeName; if (XamlTypeHelper.SplitTypeName(parserContext, lineInformation, prefixAndTypeName, out prefix, out typeName)) { XmlNamespace xmlNamespace = parserContext.GetXmlNamespace(lineInformation, xmlNamespaceResolver, prefix); MemberType memberTypes = MemberType.Property | MemberType.Field; if (parserContext.TypeResolver.IsCapabilitySet(PlatformCapability.IncompleteAttachedPropertiesInMarkupExtensions)) { memberTypes |= MemberType.IncompleteAttachedProperty; } IMember member = (IMember)XamlTypeHelper.GetPropertyKey(parserContext, lineInformation, xmlNamespace, typeName, (XmlNamespace)null, (IType)null, memberTypes, MemberType.AttachedProperty, false); if (member != null) { property = MarkupExtensionParser.VerifyMemberIsDependencyProperty(parserContext, lineInformation, member); } } pathParameters.Add(property); } else { stringBuilder.Append(path.Substring(startIndex, num2 - startIndex + 1)); } } stringBuilder.Append(path.Substring(startIndex)); propertyPath = stringBuilder.ToString(); }
internal static IType GetTypeId(XamlParserContext parserContext, ITextLocation lineInformation, IXmlNamespaceResolver xmlNamespaceResolver, string fullTypeName, bool inMarkupExtension) { XmlnsPrefix prefix; string typeName; if (XamlTypeHelper.SplitTypeName(parserContext, lineInformation, fullTypeName, out prefix, out typeName)) { XmlNamespace xmlNamespace = parserContext.GetXmlNamespace(lineInformation, xmlNamespaceResolver, prefix); if (xmlNamespace != null) { return(XamlTypeHelper.GetTypeId(parserContext, lineInformation, xmlNamespace, typeName, inMarkupExtension)); } } return((IType)null); }
internal static IProperty GetPropertyKey(XamlParserContext parserContext, ITextLocation lineInformation, IXmlNamespaceResolver xmlElementReference, string fullPropertyName, XmlNamespace targetTypeNamespace, IType targetTypeId, MemberType memberTypes, MemberType defaultType, bool allowProtectedPropertiesOnTargetType) { XmlnsPrefix prefix; string typeName; if (!XamlTypeHelper.SplitTypeName(parserContext, lineInformation, fullPropertyName, out prefix, out typeName)) { return((IProperty)null); } XmlNamespace xmlNamespace = (XmlNamespace)null; if (prefix != XmlnsPrefix.EmptyPrefix || typeName.IndexOf('.') >= 0) { xmlNamespace = parserContext.GetXmlNamespace(lineInformation, xmlElementReference, prefix); if (xmlNamespace == null) { return((IProperty)null); } } return(XamlTypeHelper.GetPropertyKey(parserContext, lineInformation, xmlNamespace, typeName, targetTypeNamespace, targetTypeId, memberTypes, defaultType, allowProtectedPropertiesOnTargetType)); }
public static bool GetTypeAndMemberName(XamlParserContext parserContext, ITextLocation lineInformation, IXmlNamespaceResolver xmlNamespaceResolver, string fullMemberName, IType targetTypeId, out IType typeId, out string memberName) { typeId = (IType)null; memberName = (string)null; XmlnsPrefix prefix; string typeName1; if (XamlTypeHelper.SplitTypeName(parserContext, lineInformation, fullMemberName, out prefix, out typeName1)) { XmlNamespace xmlNamespace = parserContext.GetXmlNamespace(lineInformation, xmlNamespaceResolver, prefix); string typeName2; if (XamlTypeHelper.SplitMemberName(parserContext, lineInformation, typeName1, out typeName2, out memberName)) { typeId = typeName2 == null ? targetTypeId : XamlTypeHelper.GetTypeId(parserContext, lineInformation, xmlNamespace, typeName2); if (typeId != null) { return(true); } parserContext.ReportError(XamlParseErrors.CannotDetermineMemberTargetType(lineInformation, memberName)); } } return(false); }