Exemplo n.º 1
0
        public override SyntaxNode VisitPropertyDeclaration(PropertyDeclarationSyntax propertyDeclaration)
        {
            // Check each node until we find the property in question. When we have it, we'll replace it with an Auto Property
            if (propertyDeclaration == this._fullProperty)
            {
                // Create Empty getters and setters.
                var emptyGetter = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));
                var emptySetter = SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));

                if (propertyDeclaration.HasGetter())
                {
                    // Put the original Get modifier on the Auto property
                    emptyGetter = emptyGetter.WithModifiers(propertyDeclaration.GetGetter().Modifiers);
                }
                else
                {
                    // Full property didn't have a getter, but no get in a Auto property makes no sense... We'll keep a get, but make it private
                    emptyGetter = emptyGetter.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)));
                }

                if (propertyDeclaration.HasSetter())
                {
                    // Put the original Set modifier on the Auto property
                    emptySetter = emptySetter.WithModifiers(propertyDeclaration.GetSetter().Modifiers);
                }
                else
                {
                    // Full property didn't have a setter, but no set in an Auto property makes no sense... We'll keep a set, but make it private
                    emptySetter = emptySetter.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)));
                }

                // Create a new auto property (without a body)
                var newProperty = _fullProperty.WithAccessorList(
                    SyntaxFactory.AccessorList(
                        SyntaxFactory.List(new[] { emptyGetter, emptySetter })));

                return(newProperty);
            }

            return(base.VisitPropertyDeclaration(propertyDeclaration));
        }
Exemplo n.º 2
0
        public override void VisitPropertyDeclaration(PropertyDeclarationSyntax prop)
        {
            if (prop.HasGetter())
            {
                _allMembers.Add(
                    new SyntaxNodeWrapper
                {
                    Node       = prop,
                    MethodType = MethodType.PropertyGetter
                });
            }

            if (prop.HasSetter())
            {
                _allMembers.Add(
                    new SyntaxNodeWrapper
                {
                    Node       = prop,
                    MethodType = MethodType.PropertySetter
                });
            }

            base.VisitPropertyDeclaration(prop);
        }
Exemplo n.º 3
0
        public override SyntaxNode VisitPropertyDeclaration(PropertyDeclarationSyntax property)
        {
            // Check each node until we find the property in question. When we have it, we'll replace it with a Full Property
            if (property.IsEquivalentTo(this._crunchedProperty))
            {
                AccessorDeclarationSyntax getter = null;
                AccessorDeclarationSyntax setter = null;

                SyntaxTokenList getterModifiers = default(SyntaxTokenList);
                SyntaxTokenList setterModifiers = default(SyntaxTokenList);

                bool hasGetter = false;
                bool hasSetter = false;

                if (property.IsExpressionProperty())
                {
                    hasGetter = true;
                }
                else
                {
                    hasGetter = property.HasGetter();
                    hasSetter = property.HasSetter();

                    if (hasGetter)
                    {
                        getterModifiers = property.GetGetter().Modifiers;
                    }
                    if (hasSetter)
                    {
                        setterModifiers = property.GetSetter().Modifiers;
                    }
                }

                if (hasGetter) // Check if original Auto Property had a getter
                {
                    // Create a new Getter with a body, returning a private field
                    getter = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithBody(
                        SyntaxFactory.Block(
                            SyntaxFactory.ReturnStatement(SyntaxFactory.IdentifierName(this.PrivateFieldName))) // return field e.g. return _myProperty;
                        )
                             .WithModifiers(getterModifiers)                                                    // Keep original modifiers
                             .WithoutTrivia();
                }
                if (hasSetter) // Check if original Auto Property had a setter
                {
                    // Create a new Setter with a body, setter the private field
                    setter = SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithBody(
                        SyntaxFactory.Block(
                            SyntaxFactory.ExpressionStatement(
                                SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, SyntaxFactory.IdentifierName(this.PrivateFieldName), SyntaxFactory.IdentifierName("value")))) // Assignment e.g. _myProperty = value
                        )
                             .WithModifiers(setterModifiers)                                                                                                                                            // Keep original modifiers
                             .WithoutTrivia();
                }

                // Create a new property. Set the type and name
                var newProperty = SyntaxFactory.PropertyDeclaration(property.Type, property.Identifier.ValueText)
                                  .WithModifiers(property.Modifiers); // use the modifier(s) of the original property

                // Add getter and setter to accessor list
                var accessors = new List <AccessorDeclarationSyntax>();
                if (getter != null)
                {
                    accessors.Add(getter);
                }
                if (setter != null)
                {
                    accessors.Add(setter);
                }

                // Put together the property with our built up accessors list
                newProperty = newProperty.WithAccessorList(
                    SyntaxFactory.AccessorList(
                        SyntaxFactory.List(accessors)));

                return(newProperty); // Returning our new property "replaces" the original
            }

            return(base.VisitPropertyDeclaration(property));
        }