Beispiel #1
0
 public XamlIlTypeExtensionNode(IXamlIlLineInfo lineInfo, IXamlIlAstTypeReference value,
                                IXamlIlType systemType) : base(lineInfo)
 {
     _systemType = systemType;
     Type        = new XamlIlAstClrTypeReference(this, systemType);
     Value       = value;
 }
Beispiel #2
0
 public XamlIlAstNamePropertyReference(IXamlIlLineInfo lineInfo,
                                       IXamlIlAstTypeReference declaringType, string name, IXamlIlAstTypeReference targetType) : base(lineInfo)
 {
     DeclaringType = declaringType;
     Name          = name;
     TargetType    = targetType;
 }
Beispiel #3
0
 public XamlIlAstNewClrObjectNode(IXamlIlLineInfo lineInfo,
                                  IXamlIlAstTypeReference type,
                                  List <IXamlIlAstValueNode> arguments) : base(lineInfo)
 {
     Type      = type;
     Arguments = arguments;
 }
Beispiel #4
0
 public static IXamlIlType GetClrType(this IXamlIlAstTypeReference r)
 {
     if (r is XamlIlAstClrTypeReference clr)
     {
         return(clr.Type);
     }
     throw new XamlIlParseException($"Unable to convert {r} to CLR type", r);
 }
Beispiel #5
0
        public XamlIlDeferredContentNode(IXamlIlAstValueNode value,
                                         XamlIlTransformerConfiguration config) : base(value)
        {
            Value = value;
            var funcType = config.TypeSystem.GetType("System.Func`2")
                           .MakeGenericType(config.TypeMappings.ServiceProvider, config.WellKnownTypes.Object);

            Type = new XamlIlAstClrTypeReference(value, funcType);
        }
Beispiel #6
0
        public static IXamlIlAvaloniaPropertyNode CreateNode(XamlIlAstTransformationContext context,
                                                             string propertyName, IXamlIlAstTypeReference selectorTypeReference, IXamlIlLineInfo lineInfo)
        {
            XamlIlAstNamePropertyReference forgedReference;

            var parser = new PropertyParser();

            var parsedPropertyName = parser.Parse(new CharacterReader(propertyName.AsSpan()));

            if (parsedPropertyName.owner == null)
            {
                forgedReference = new XamlIlAstNamePropertyReference(lineInfo, selectorTypeReference,
                                                                     propertyName, selectorTypeReference);
            }
            else
            {
                var xmlOwner = parsedPropertyName.ns;
                if (xmlOwner != null)
                {
                    xmlOwner += ":";
                }
                xmlOwner += parsedPropertyName.owner;

                var tref = XamlIlTypeReferenceResolver.ResolveType(context, xmlOwner, false, lineInfo, true);

                var propertyFieldName = parsedPropertyName.name + "Property";
                var found             = tref.Type.GetAllFields()
                                        .FirstOrDefault(f => f.IsStatic && f.IsPublic && f.Name == propertyFieldName);
                if (found == null)
                {
                    throw new XamlIlParseException(
                              $"Unable to find {propertyFieldName} field on type {tref.Type.GetFullName()}", lineInfo);
                }
                return(new XamlIlAvaloniaPropertyFieldNode(context.GetAvaloniaTypes(), lineInfo, found));
            }

            var clrProperty =
                ((XamlIlAstClrProperty) new XamlIlPropertyReferenceResolver().Transform(context,
                                                                                        forgedReference));

            return(new XamlIlAvaloniaPropertyNode(lineInfo,
                                                  context.Configuration.TypeSystem.GetType("Avalonia.AvaloniaProperty"),
                                                  clrProperty));
        }
Beispiel #7
0
        public static XamlIlAvaloniaPropertyNode CreateNode(XamlIlAstTransformationContext context,
                                                            string propertyName, IXamlIlAstTypeReference selectorTypeReference, IXamlIlLineInfo lineInfo)
        {
            XamlIlAstNamePropertyReference forgedReference;

            var parser = new PropertyParser();

            var parsedPropertyName = parser.Parse(new CharacterReader(propertyName.AsSpan()));

            if (parsedPropertyName.owner == null)
            {
                forgedReference = new XamlIlAstNamePropertyReference(lineInfo, selectorTypeReference,
                                                                     propertyName, selectorTypeReference);
            }
            else
            {
                var xmlOwner = parsedPropertyName.ns;
                if (xmlOwner != null)
                {
                    xmlOwner += ":";
                }
                xmlOwner += parsedPropertyName.owner;

                var tref = XamlIlTypeReferenceResolver.ResolveType(context, xmlOwner, false, lineInfo, true);
                forgedReference = new XamlIlAstNamePropertyReference(lineInfo,
                                                                     tref, parsedPropertyName.name, tref);
            }

            var clrProperty =
                ((XamlIlAstClrProperty) new XamlIlPropertyReferenceResolver().Transform(context,
                                                                                        forgedReference));

            return(new XamlIlAvaloniaPropertyNode(lineInfo,
                                                  context.Configuration.TypeSystem.GetType("Avalonia.AvaloniaProperty"),
                                                  clrProperty));
        }
Beispiel #8
0
 public override void VisitChildren(Visitor visitor)
 {
     Value = (IXamlIlAstValueNode)Value.Visit(visitor);
     Type  = (IXamlIlAstTypeReference)Type.Visit(visitor);
 }
Beispiel #9
0
 public XamlIlAstRuntimeCastNode(IXamlIlLineInfo lineInfo, IXamlIlAstValueNode value, IXamlIlAstTypeReference castTo) : base(lineInfo)
 {
     Value = value;
     Type  = castTo;
 }
Beispiel #10
0
 public bool Equals(IXamlIlAstTypeReference other) =>
 other is XamlIlAstXmlTypeReference xml &&
Beispiel #11
0
 public override void VisitChildren(Visitor visitor)
 {
     TargetType = (IXamlIlAstTypeReference)TargetType.Visit(visitor);
 }
Beispiel #12
0
 public XamlIlStaticExtensionNode(XamlIlAstObjectNode lineInfo, IXamlIlAstTypeReference targetType, string member) : base(lineInfo)
 {
     TargetType = targetType;
     Member     = member;
 }
Beispiel #13
0
 public override void VisitChildren(Visitor visitor)
 {
     Value = Value.Visit(visitor) as IXamlIlAstTypeReference;
 }
Beispiel #14
0
 public XamlIlAstObjectNode(IXamlIlLineInfo lineInfo, IXamlIlAstTypeReference type) : base(lineInfo)
 {
     Type = type;
 }
Beispiel #15
0
 public XamlIlToArrayNode(IXamlIlLineInfo lineInfo, IXamlIlAstTypeReference arrayType,
                          IXamlIlAstValueNode value) : base(lineInfo)
 {
     Type  = arrayType;
     Value = value;
 }
Beispiel #16
0
 public bool Equals(IXamlIlAstTypeReference other) =>
 other is XamlIlAstClrTypeReference clr && clr.Type.Equals(Type) &&