/// <summary>
        /// Executes the specified options.
        /// </summary>
        /// <param name="options">The options.</param>
        /// <param name="file">The file.</param>
        public void Execute(ValueAnalysisOptions options, ICSharpFile file)
        {
            foreach (var namespaceDeclaration in file.NamespaceDeclarations)
              {
            this.ProcessCSharpTypeDeclarations(options, namespaceDeclaration.TypeDeclarations);
              }

              this.ProcessCSharpTypeDeclarations(options, file.TypeDeclarations);
        }
        /// <summary>Processes the nested type declarations.</summary>
        /// <param name="options">The options.</param>
        /// <param name="typeDeclarations">The type declarations.</param>
        private void ProcessNestedTypeDeclarations(ValueAnalysisOptions options, IEnumerable<ITypeDeclaration> typeDeclarations)
        {
            foreach (var typeDeclaration in typeDeclarations)
              {
            foreach (var memberDeclaration in typeDeclaration.MemberDeclarations)
            {
              this.Annotate(memberDeclaration, options);
            }

            this.ProcessNestedTypeDeclarations(options, typeDeclaration.NestedTypeDeclarations);
              }
        }
        /// <summary>Checks the declaration documentation.</summary>
        /// <param name="declaration">The declaration.</param>
        /// <param name="options">The options.</param>
        private void Annotate(IDeclaration declaration, ValueAnalysisOptions options)
        {
            if (!options.AnnotateWithValueAnalysisAttributes && !options.InsertAssertStatements)
              {
            return;
              }

              var typeMemberDeclaration = declaration as ITypeMemberDeclaration;
              if (typeMemberDeclaration == null)
              {
            return;
              }

              var refactoring = new ValueAnalysisRefactoring(typeMemberDeclaration);

              refactoring.AnnotateWithValueAnalysisAttributes = options.AnnotateWithValueAnalysisAttributes;
              refactoring.InsertAssertStatements = options.InsertAssertStatements;
              refactoring.TreatAllMembersAsNonPublic = options.TreatAllMembersAsNonPublic;

              refactoring.Execute();
        }