internal ResolveResult ResolveElement(AXmlElement element, CancellationToken cancellationToken = default(CancellationToken)) { string namespaceName = element.Namespace; string name = element.LocalName; if (name.Contains(".")) { string propertyName = name.Substring(name.IndexOf('.') + 1); name = name.Substring(0, name.IndexOf('.')); ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, name); IType type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); IMember member = FindMember(type, propertyName); IMember underlying = null; if (member == null) { member = FindAttachedMember(type, propertyName, out underlying); } if (member == null) { return(new UnknownMemberResolveResult(type, propertyName, EmptyList <IType> .Instance)); } if (underlying != null) { return(new AttachedMemberResolveResult(new TypeResolveResult(type), underlying, member)); } return(new MemberResolveResult(new TypeResolveResult(type), member)); } else { ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, name); IType type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); return(new TypeResolveResult(type)); } }
internal ResolveResult ResolveAttribute(AXmlAttribute attribute, int offset = -1, CancellationToken cancellationToken = default(CancellationToken)) { IMember member = null, underlying = null; IType type = null; if (attribute.Namespace == XamlConst.XamlNamespace) { switch (attribute.LocalName) { case "Name": IUnresolvedTypeDefinition typeDefinition = parseInfo.UnresolvedFile.TypeDefinition; if (typeDefinition != null) { type = typeDefinition.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); IField field = type.GetFields(f => f.Name == attribute.Value).FirstOrDefault(); if (field != null) { return(new MemberResolveResult(null, field)); } } break; case "Class": type = compilation.FindType(new FullTypeName(attribute.Value)); return(new TypeResolveResult(type)); } } if (attribute.ParentElement == null) { return(ErrorResolveResult.UnknownError); } string propertyName = attribute.LocalName; if (propertyName.Contains(".")) { string namespaceName = string.IsNullOrEmpty(attribute.Namespace) ? attribute.ParentElement.LookupNamespace("") : attribute.Namespace; string name = propertyName.Substring(0, propertyName.IndexOf('.')); propertyName = propertyName.Substring(propertyName.IndexOf('.') + 1); ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, name); type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); member = FindMember(type, propertyName); if (member == null) { member = FindAttachedMember(type, propertyName, out underlying); } } else { ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(attribute.ParentElement.Namespace, attribute.ParentElement.LocalName); type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); member = FindMember(type, propertyName); } if (member == null) { return(new UnknownMemberResolveResult(type, propertyName, EmptyList <IType> .Instance)); } if (offset > -1 && attribute.ValueSegment.Contains(offset, 1)) { return(ResolveAttributeValue(member, attribute, cancellationToken)); } if (underlying != null) { return(new AttachedMemberResolveResult(new TypeResolveResult(underlying.DeclaringType), underlying, member)); } else { return(new MemberResolveResult(new TypeResolveResult(member.DeclaringType), member)); } }
public IType ResolveType(string @namespace, string type) { return(XamlUnresolvedFile.CreateTypeReference(@namespace, type).Resolve(resolveContext)); }