コード例 #1
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected ISyntaxEmitter CreateMemberSyntaxEmitter(AbstractMember member)
        {
            if (member is FieldMember field)
            {
                return(new FieldSyntaxEmitter(field));
            }

            if (member is ConstructorMember constructor)
            {
                return(new ConstructorSyntaxEmitter(constructor));
            }

            if (member is MethodMember method)
            {
                return(new MethodSyntaxEmitter(method));
            }

            if (member is PropertyMember property)
            {
                return(new PropertySyntaxEmitter(property));
            }

            if (member is EventMember @event)
            {
                return(new EventSyntaxEmitter(@event));
            }

            if (member is TypeMember type)
            {
                return(TypeSyntaxEmitter.GetSyntaxEmitter(type));
            }

            throw new ArgumentException($"Syntax emitter is not supported for members of type {member.GetType().Name}");
        }
コード例 #2
0
        private static void AddVisibilitySyntax(AbstractMember member, List <SyntaxToken> syntax)
        {
            switch (member.Visibility)
            {
            case MemberVisibility.Public:
                syntax.Add(Token(SyntaxKind.PublicKeyword));
                break;

            case MemberVisibility.Private:
                syntax.Add(Token(SyntaxKind.PrivateKeyword));
                break;

            case MemberVisibility.Protected:
                syntax.Add(Token(SyntaxKind.ProtectedKeyword));
                break;

            case MemberVisibility.Internal:
                syntax.Add(Token(SyntaxKind.InternalKeyword));
                break;

            case MemberVisibility.InternalProtected:
                syntax.Add(Token(SyntaxKind.InternalKeyword));
                syntax.Add(Token(SyntaxKind.ProtectedKeyword));
                break;

            case MemberVisibility.PrivateProtected:
                syntax.Add(Token(SyntaxKind.PrivateKeyword));
                syntax.Add(Token(SyntaxKind.ProtectedKeyword));
                break;
            }
        }
コード例 #3
0
        public static void WriteMember(CodeTextBuilder code, AbstractMember member)
        {
            WriteExportModifiers(code, member);

            if (member is TypeMember type && type.TypeKind == TypeMemberKind.Class)
            {
                JavaScriptClassWriter.WriteClass(code, type);
            }
コード例 #4
0
 public static MemberExpression Create(AbstractExpression target, AbstractMember member)
 {
     return(BlockContext.GetBlockOrThrow().PushExpression(new MemberExpression {
         Type = target.Type,
         Target = target,
         Member = member
     }));
 }
コード例 #5
0
        void TestMember(string className, string memberName)
        {
            IClass c = mscorlib.GetClassByReflectionName(className, false);

            Assert.IsNotNull(c);
            AbstractMember m = (AbstractMember)DefaultProjectContent.GetMemberByReflectionName(c, memberName);

            Assert.AreEqual(className + "." + memberName, m.DocumentationTag.Substring(2));
        }
コード例 #6
0
        public static MemberDeclarationSyntax GetSyntax(AbstractMember member)
        {
            if (member is TypeMember type)
            {
                return(GetTypeSyntax(type));
            }

            throw new NotImplementedException();
        }
コード例 #7
0
			static void AddExplicitInterfaces (AbstractMember member, IEnumerable<ICSharpCode.NRefactory.Ast.InterfaceImplementation> interfaceImplementations)
			{
				if (interfaceImplementations == null)
					return;

				foreach (ICSharpCode.NRefactory.Ast.InterfaceImplementation impl in interfaceImplementations) {
					member.AddExplicitInterface (ConvertReturnType (impl.InterfaceType));
				}
			}
コード例 #8
0
        public static SyntaxTokenList GetModifierSyntax(AbstractMember member)
        {
            var syntaxList = new List <SyntaxToken>();

            AddVisibilitySyntax(member, syntaxList);
            AddModifierSyntax(member, syntaxList);

            return(TokenList(syntaxList));
        }
コード例 #9
0
 void AddInterfaceImplementations(AbstractMember member, AST.MemberNode memberNode)
 {
     member.InterfaceImplementations.AddRange(
         memberNode.InterfaceImplementations
         .Select(x => new ExplicitInterfaceImplementation(CreateReturnType(x.InterfaceType), x.MemberName))
         );
     if (!IsVisualBasic && member.InterfaceImplementations.Any())
     {
         member.Modifiers = ConvertModifier(memberNode.Modifier, ModifierEnum.None);
     }
 }
コード例 #10
0
 public static SyntaxList <AttributeListSyntax> GetAttributeListSyntax(AbstractMember member)
 {
     return(List(
                member.Attributes.Select(attr =>
                                         AttributeList(
                                             SingletonSeparatedList(
                                                 GetAttributeSyntax(attr)
                                                 )
                                             )
                                         )
                ));
 }
コード例 #11
0
        public bool?BuildUI()
        {
            Type type = Instance.GetType();

            Grid grid = BuildGrid();

            Window window = BuildWindow();

            window.Content = (grid);

            foreach (var member in type.GetMembers())
            {
                AbstractMember abstractMember = null;
                if (member.MemberType == MemberTypes.Property)
                {
                    abstractMember = new PropertyMember((PropertyInfo)member);
                }
                else if (member.MemberType == MemberTypes.Field)
                {
                    abstractMember = new FieldMember((FieldInfo)member);
                }
                if (abstractMember != null)
                {
                    BuildControl(grid, abstractMember, Instance);
                }
            }

            PopulateControls(Instance);

            StackPanel panel = BuildButtonPanel(window);

            grid.RowDefinitions.Add(new RowDefinition()
            {
                Height = new GridLength(40)
            });
            Grid.SetRow(panel, grid.RowDefinitions.Count - 1);
            Grid.SetColumn(panel, 2);

            grid.Children.Add(panel);

            grid.Height   = grid.RowDefinitions.Sum(o => o.Height.Value);
            grid.Width    = grid.ColumnDefinitions.Sum(o => o.Width.Value);
            window.Height = grid.Height + 60;
            window.Width  = grid.Width + 40;

            window.Owner = System.Windows.Application.Current.MainWindow;
            return(window.ShowDialog());
        }
コード例 #12
0
			static void AddAttributes (AbstractMember member, IEnumerable<ICSharpCode.NRefactory.Ast.AttributeSection> attributes)
			{
				CodeDomVisitor domVisitor = new CodeDomVisitor ();
				foreach (ICSharpCode.NRefactory.Ast.AttributeSection attributeSection in attributes) {
					foreach (ICSharpCode.NRefactory.Ast.Attribute attribute in attributeSection.Attributes) {
						DomAttribute domAttribute = new DomAttribute ();
						domAttribute.Name = attribute.Name;
						domAttribute.Region = ConvertRegion (attribute.StartLocation, attribute.EndLocation);
						domAttribute.AttributeType = new DomReturnType (attribute.Name);
						member.Add (domAttribute);
						foreach (ICSharpCode.NRefactory.Ast.Expression exp in attribute.PositionalArguments)
							domAttribute.AddPositionalArgument ((CodeExpression)exp.AcceptVisitor (domVisitor, null));
						foreach (ICSharpCode.NRefactory.Ast.NamedArgumentExpression nexp in attribute.NamedArguments)
							domAttribute.AddNamedArgument (nexp.Name, (CodeExpression)nexp.Expression.AcceptVisitor (domVisitor, null));
					}
				}
			}
コード例 #13
0
        public virtual AttributedNode GetOverridingMethod(IMember baseMember, ClassFinder targetContext)
        {
            AbstractMember newMember = (AbstractMember)baseMember.Clone();

            newMember.Modifiers &= ~(ModifierEnum.Virtual | ModifierEnum.Abstract);
            newMember.Modifiers |= ModifierEnum.Override;
            // set modifiers be before calling convert so that a body is generated
            AttributedNode node = ConvertMember(newMember, targetContext);

            node.Attributes.Clear();             // don't copy over attributes

            if (!baseMember.IsAbstract)
            {
                // replace the method/property body with a call to the base method/property
                MethodDeclaration method = node as MethodDeclaration;
                if (method != null)
                {
                    method.Body.Children.Clear();
                    if (method.TypeReference.Type == "System.Void")
                    {
                        method.Body.AddChild(new ExpressionStatement(CreateForwardingMethodCall(method)));
                    }
                    else
                    {
                        method.Body.AddChild(new ReturnStatement(CreateForwardingMethodCall(method)));
                    }
                }
                PropertyDeclaration property = node as PropertyDeclaration;
                if (property != null)
                {
                    Expression field = new BaseReferenceExpression().Member(property.Name);
                    if (!property.GetRegion.Block.IsNull)
                    {
                        property.GetRegion.Block.Children.Clear();
                        property.GetRegion.Block.Return(field);
                    }
                    if (!property.SetRegion.Block.IsNull)
                    {
                        property.SetRegion.Block.Children.Clear();
                        property.SetRegion.Block.Assign(field, new IdentifierExpression("value"));
                    }
                }
            }
            return(node);
        }
コード例 #14
0
        private static void AddModifierSyntax(AbstractMember member, List <SyntaxToken> syntax)
        {
            switch (member.Modifier)
            {
            case MemberModifier.Abstract:
                syntax.Add(Token(SyntaxKind.PublicKeyword));
                break;

            case MemberModifier.Override:
                syntax.Add(Token(SyntaxKind.OverrideKeyword));
                break;

            case MemberModifier.Static:
                syntax.Add(Token(SyntaxKind.StaticKeyword));
                break;

            case MemberModifier.Virtual:
                syntax.Add(Token(SyntaxKind.VirtualKeyword));
                break;
            }
        }
コード例 #15
0
 public static AbstractExpression DOT(this LocalVariable target, AbstractMember member) => null;
コード例 #16
0
 public static AbstractExpression DOT(this AbstractExpression target, AbstractMember member) => null;
コード例 #17
0
        static void ReadMemberInformation(BinaryReader reader, INameDecoder nameTable, AbstractMember member)
        {
            member.Name          = ReadString(reader, nameTable);
            member.Documentation = ReadString(reader, nameTable);
            member.Modifiers     = (Modifiers)reader.ReadUInt32();
            member.Location      = ReadLocation(reader, nameTable);

            uint count = ReadUInt(reader, 1000);

            while (count-- > 0)
            {
                member.Add(ReadAttribute(reader, nameTable));
            }
        }
コード例 #18
0
 private string GetSymbolName(AbstractMember member)
 {
     return(member.Bindings.OfType <ISymbol>().Single().Name);
 }
コード例 #19
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        protected Exception NewValidationException(TypeMember type, AbstractMember member, string message, Exception inner = null)
        {
            throw new NotImplementedException();
        }
コード例 #20
0
 public static AbstractExpression DOT(this AbstractExpression target, AbstractMember member)
 => PushExpression(new MemberExpression {
     Target = PopExpression(target),
     Member = member
 });
コード例 #21
0
 public static AbstractExpression DOT(this LocalVariable target, AbstractMember member)
 => PushExpression(new MemberExpression {
     Type   = target.Type,
     Target = PopExpression(target.AsExpression()),
     Member = member
 });
コード例 #22
0
 public static AbstractExpression DOT(this MethodParameter target, AbstractMember member) => null;
コード例 #23
0
 public static AbstractExpression DOT(this MethodParameter target, AbstractMember member)
 => PushExpression(new MemberExpression {
     Type   = target.Type,
     Target = PopExpression(target.AsExpression()),
     Member = member
 });
コード例 #24
0
        //public void BindMember<TBinding>(MemberRef<AbstractMember> member, TBinding binding)
        //    where TBinding : class
        //{
        //    member.Bindings.Add(binding);
        //    _memberByBinding[binding] = member;
        //}

        public void RegisterMember(AbstractMember member, bool isTopLevel)
        {
            _codeModel.Add(member, isTopLevel);
        }
コード例 #25
0
 public static AbstractExpression ASSIGN(this AbstractMember target, AbstractExpression value) => null;
コード例 #26
0
 protected internal virtual void VisitAbstractMember(AbstractMember member)
 {
 }
コード例 #27
0
        void BuildControl(Grid grid, AbstractMember member, PluginConfigurationOptions pluginConfigurationOptions)
        {
            Control control = null;

            object[] attributes = member.GetAttributes();

            if (attributes == null || attributes.Length == 0)
            {
                return;
            }

            LabelAttribute labelAttribute = attributes.Select(x => x as LabelAttribute).Where(i => i != null).First();

            bool isBool   = member.Type == typeof(bool);
            bool isString = member.Type == typeof(string);
            bool isChoice = attributes.FirstOrDefault(x => x is ItemsAttribute) != null;

            if (isBool)
            {
                control = new CheckBox()
                {
                    VerticalAlignment = VerticalAlignment.Center, IsChecked = (bool)member.Read(pluginConfigurationOptions), Name = member.Name
                };
                (control as CheckBox).Checked   += new RoutedEventHandler(PluginConfigureView_Checked);
                (control as CheckBox).Unchecked += new RoutedEventHandler(PluginConfigureView_Checked);
            }
            else if (isChoice)
            {
                control = new ComboBox()
                {
                    Margin = new Thickness(0, 2, 0, 2), Name = member.Name, Width = 200
                };
                (control as ComboBox).SelectionChanged += new SelectionChangedEventHandler(PluginConfigureView_SelectionChanged);
                ItemsAttribute itemsAttribute = attributes.Select(x => x as ItemsAttribute).Where(i => i != null).First();
                foreach (var item in itemsAttribute.Items.Split(','))
                {
                    (control as ComboBox).Items.Add(item);
                }
                (control as ComboBox).Text = (string)member.Read(pluginConfigurationOptions);
            }
            else if (isString)
            {
                control = new TextBox()
                {
                    Margin = new Thickness(0, 2, 0, 2), Text = (string)member.Read(pluginConfigurationOptions), Name = member.Name, Width = 200
                };
                (control as TextBox).TextChanged += new TextChangedEventHandler(PluginConfigureView_TextChanged);
            }
            else
            {
                return;
            }

            grid.RowDefinitions.Add(new RowDefinition()
            {
                Height = new GridLength(30)
            });
            Label label = new Label()
            {
                Margin = new Thickness(0, 0, 10, 0), HorizontalAlignment = HorizontalAlignment.Right, Content = labelAttribute.Label
            };

            grid.Children.Add(label);
            Grid.SetColumn(label, 0);
            Grid.SetRow(label, grid.RowDefinitions.Count - 1);
            grid.Children.Add(control);
            Grid.SetColumn(control, 1);
            Grid.SetRow(control, grid.RowDefinitions.Count - 1);
            _controlBindings.Add(control, member);
        }
コード例 #28
0
 public static bool HasAttribute <TAttribute>(this AbstractMember member)
     where TAttribute : System.Attribute
 {
     return(TryGetAttribute <TAttribute>(member) != null);
 }
コード例 #29
0
		static void ReadMemberInformation (BinaryReader reader, INameDecoder nameTable, IDomObjectTable objectTable, AbstractMember member)
		{
			member.Name          = ReadString (reader, nameTable);
			member.Documentation = ReadString (reader, nameTable);
			member.Modifiers     = (Modifiers)reader.ReadUInt32();
			member.Location      = ReadLocation (reader, nameTable);
			
			uint count = ReadUInt (reader, 1000);
			while (count-- > 0)
				member.Add (ReadAttribute (reader, nameTable, objectTable));
		}
コード例 #30
0
            //-------------------------------------------------------------------------------------------------------------------------------------------------

            internal protected override void VisitAbstractMember(AbstractMember member)
            {
                base.VisitAbstractMember(member);
                _visitLog.Add(new Visit(nameof(VisitAbstractMember), member));
            }
コード例 #31
0
		void AddInterfaceImplementations(AbstractMember member, AST.MemberNode memberNode)
		{
			member.InterfaceImplementations.AddRange(
				memberNode.InterfaceImplementations
				.Select(x => new ExplicitInterfaceImplementation(CreateReturnType(x.InterfaceType), x.MemberName))
			);
			if (!IsVisualBasic && member.InterfaceImplementations.Any()) {
				member.Modifiers = ConvertModifier(memberNode.Modifier, ModifierEnum.None);
			}
		}
コード例 #32
0
 public static AttributeDescription TryGetAttribute(this AbstractMember member, string namespaceQualifiedTypeName)
 {
     return(member.Attributes.FirstOrDefault(attr => attr.AttributeType.FullName == namespaceQualifiedTypeName));
 }