public override SyntaxNode GetEffectiveParentForAttribute(SyntaxNode node)
 {
     if (node.HasAncestor<BaseFieldDeclarationSyntax>())
     {
         return node.GetAncestor<BaseFieldDeclarationSyntax>().Declaration.Variables.FirstOrDefault();
     }
     else if (node.HasAncestor<ParameterSyntax>())
     {
         return node.GetAncestor<ParameterSyntax>();
     }
     else
     {
         return node.Parent;
     }
 }
        private EnvDTE.vsCMAccess GetDefaultAccessibility(SyntaxNode node)
        {
            if (node is EnumMemberDeclarationSyntax)
            {
                return EnvDTE.vsCMAccess.vsCMAccessPublic;
            }

            if (node is BaseFieldDeclarationSyntax ||
                node is BaseMethodDeclarationSyntax ||
                node is BasePropertyDeclarationSyntax)
            {
                // Members of interfaces and enums are public, while all other
                // members are private.
                if (node.HasAncestor<InterfaceDeclarationSyntax>() ||
                    node.HasAncestor<EnumDeclarationSyntax>())
                {
                    return EnvDTE.vsCMAccess.vsCMAccessPublic;
                }
                else
                {
                    return EnvDTE.vsCMAccess.vsCMAccessPrivate;
                }
            }

            if (node is BaseTypeDeclarationSyntax ||
                node is DelegateDeclarationSyntax)
            {
                // Types declared within types are private by default,
                // otherwise internal.
                if (node.HasAncestor<BaseTypeDeclarationSyntax>())
                {
                    return EnvDTE.vsCMAccess.vsCMAccessPrivate;
                }
                else
                {
                    return EnvDTE.vsCMAccess.vsCMAccessProject;
                }
            }

            if (node is AccessorDeclarationSyntax)
            {
                return GetAccess(node.FirstAncestorOrSelf<BasePropertyDeclarationSyntax>());
            }

            throw Exceptions.ThrowEFail();
        }