コード例 #1
0
        /// <summary>
        /// Recursively explores given code element
        /// </summary>
        /// <param name="parentCommand"></param>
        /// <param name="currentElement">Element to explore</param>
        /// <param name="parentNamespace">Closest parent namespace of the element</param>
        /// <param name="exploreable"></param>
        /// <param name="isLocalizableFalse"></param>
        private void Explore(AbstractBatchCommand parentCommand, CodeElement2 currentElement, CodeElement2 parentNamespace, Predicate <CodeElement> exploreable, bool isLocalizableFalse)
        {
            if (currentElement == null)
            {
                throw new ArgumentNullException("currentElement");
            }

            bool isLocalizableFalseSetOnParent = currentElement.HasLocalizableFalseAttribute(); // is element decorated with [Localizable(false)] ?

            // continue exploring in case of namepsace, class, struct, module, function, variable or property
            foreach (CodeElement2 codeElement in currentElement.Children)
            {
                if (codeElement.Kind == vsCMElement.vsCMElementClass || codeElement.Kind == vsCMElement.vsCMElementModule || codeElement.Kind == vsCMElement.vsCMElementStruct)
                {
                    Explore(parentCommand, codeElement, currentElement.Kind == vsCMElement.vsCMElementNamespace ? currentElement : parentNamespace,
                            exploreable, isLocalizableFalse || isLocalizableFalseSetOnParent);
                }
                if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
                {
                    Explore(parentCommand, codeElement, currentElement, exploreable, isLocalizableFalse || isLocalizableFalseSetOnParent);
                }
                if (codeElement.Kind == vsCMElement.vsCMElementVariable)
                {
                    Explore(parentCommand, codeElement as CodeVariable2, (CodeNamespace)parentNamespace, currentElement,
                            exploreable, isLocalizableFalse || isLocalizableFalseSetOnParent);
                }
                if (codeElement.Kind == vsCMElement.vsCMElementFunction)
                {
                    Explore(parentCommand, codeElement as CodeFunction2, (CodeNamespace)parentNamespace, currentElement,
                            exploreable, isLocalizableFalse || isLocalizableFalseSetOnParent);
                }
                if (codeElement.Kind == vsCMElement.vsCMElementProperty)
                {
                    Explore(parentCommand, codeElement as CodeProperty, (CodeNamespace)parentNamespace, currentElement,
                            exploreable, isLocalizableFalse || isLocalizableFalseSetOnParent);
                }
            }
        }