/// <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); } } }