/// <summary> /// Renames all references of member variable in FileCodeModel. /// </summary> /// <param name="parentElement">Containing element.</param> /// <param name="elementType">Type of element.</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> /// <returns></returns> private bool RenameMemberVariableReferences(CodeElement parentElement, vsCMElement elementType, string oldName, string newName) { var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List <SimpleCodeElement>( navigator.WalkMembers <LuaCodeElement <Identifier>, LuaCodeVariable>()); codeElements.ForEach(identifier => { if (identifier.Name == oldName) { CodeElement parent = LuaCodeDomNavigator.GetParentElement(identifier as ICodeDomElement); if (parent != null && (parent is LuaCodeFunction || parent is LuaCodeClass)) { if (!parent.Children.OfType <LuaCodeVariable>().Any( variable => variable.Name == oldName)) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } } } }); return(true); }
/// <summary> /// Get global/local declaration of element, if exists. /// </summary> /// <param name="element">CodeElement.</param> /// <param name="parentElement">Parent of CodeElement.</param> /// <returns>Return null if global declaration not found else the specified Variable.</returns> private CodeElement GetDeclaration(CodeElement element, CodeElement parentElement) { var codeDomElement = element as ICodeDomElement; if (codeDomElement != null && codeDomElement.ParentElement is LuaCodeClass) { return(element); } var parent = LuaCodeDomNavigator.GetParentElement(element as ICodeDomElement); if (parent is LuaCodeFunction)//Check for local declaration { var navigator = new LuaCodeDomNavigator(parent); codeElements = new List <SimpleCodeElement>( navigator.WalkMembers <LuaCodeVariable>()); CodeElement declaration; if (codeElements.Count > 0) { declaration = codeElements.FirstOrDefault(child => child.Name == element.Name); if (declaration != null) { CheckLocalDeclaration(declaration as LuaCodeVariable); return(declaration); } } //Check for parameter declaration declaration = ((LuaCodeFunction)parent).Parameters.OfType <LuaCodeElement <Identifier> >() .FirstOrDefault(parameter => parameter.Name == element.Name); if (declaration != null) { IsLocalDeclaration = true; isFunctionParameter = true; return(declaration); } parent = LuaCodeDomNavigator.GetParentElement(parent as ICodeDomElement); } if (parent is LuaCodeClass)//Check for global declaration { var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List <SimpleCodeElement>(navigator.WalkTopLevelMembers <LuaCodeVariable>()); if (codeElements.Count > 0) { var declaration = codeElements.FirstOrDefault(child => child.Name == element.Name); CheckLocalDeclaration(declaration as LuaCodeVariable); return(declaration); } } return(null); }
/// <summary> /// Renames all references of member variable in FileCodeModel. /// </summary> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> /// <returns></returns> private bool RenameMemberVariableReferencesInScope(string oldName, string newName) { var navigator = new LuaCodeDomNavigator(variableParent); codeElements = new List <SimpleCodeElement>( navigator.WalkMembers <LuaCodeElement <Identifier>, LuaCodeVariable>()); codeElements.ForEach(identifier => { if (identifier.Name == oldName) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } }); return(true); }
/// <summary> /// Rename LuaCodeFunction in scope of parentElement. /// </summary> /// <param name="parentElement">Containing element. (LuaCodeClass)</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> private bool RenameFunctionCalls(CodeElement parentElement, string oldName, string newName) { bool result = true; var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List <SimpleCodeElement>(navigator.WalkMembers <LuaCodeElement <FunctionCall> >()); codeElements.ForEach(funcCallElement => { if (funcCallElement.Children != null) { LuaCodeElement <Identifier> identifier = funcCallElement.Children.OfType <LuaCodeElement <Identifier> >() .FirstOrDefault(); if (identifier.Name == oldName) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } } funcCallElement.Name = newName; }); return(result); }
/// <summary> /// Renames all references of member variable in FileCodeModel. /// </summary> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> /// <returns></returns> private bool RenameMemberVariableReferencesInScope(string oldName, string newName) { var navigator = new LuaCodeDomNavigator(variableParent); codeElements = new List<SimpleCodeElement>( navigator.WalkMembers<LuaCodeElement<Identifier>, LuaCodeVariable>()); codeElements.ForEach(identifier => { if (identifier.Name == oldName) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } }); return true; }
/// <summary> /// Renames all references of member variable in FileCodeModel. /// </summary> /// <param name="parentElement">Containing element.</param> /// <param name="elementType">Type of element.</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> /// <returns></returns> private bool RenameMemberVariableReferences(CodeElement parentElement, vsCMElement elementType, string oldName, string newName) { var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List<SimpleCodeElement>( navigator.WalkMembers<LuaCodeElement<Identifier>, LuaCodeVariable>()); codeElements.ForEach(identifier => { if (identifier.Name == oldName) { CodeElement parent = LuaCodeDomNavigator.GetParentElement(identifier as ICodeDomElement); if (parent != null && (parent is LuaCodeFunction || parent is LuaCodeClass)) { if (!parent.Children.OfType<LuaCodeVariable>().Any( variable => variable.Name == oldName)) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } } } }); return true; }
/// <summary> /// Get global/local declaration of element, if exists. /// </summary> /// <param name="element">CodeElement.</param> /// <param name="parentElement">Parent of CodeElement.</param> /// <returns>Return null if global declaration not found else the specified Variable.</returns> private CodeElement GetDeclaration(CodeElement element, CodeElement parentElement) { var codeDomElement = element as ICodeDomElement; if (codeDomElement != null && codeDomElement.ParentElement is LuaCodeClass) { return element; } var parent = LuaCodeDomNavigator.GetParentElement(element as ICodeDomElement); if (parent is LuaCodeFunction)//Check for local declaration { var navigator = new LuaCodeDomNavigator(parent); codeElements = new List<SimpleCodeElement>( navigator.WalkMembers<LuaCodeVariable>()); CodeElement declaration; if (codeElements.Count > 0) { declaration = codeElements.FirstOrDefault(child => child.Name == element.Name); if (declaration != null) { CheckLocalDeclaration(declaration as LuaCodeVariable); return declaration; } } //Check for parameter declaration declaration = ((LuaCodeFunction) parent).Parameters.OfType<LuaCodeElement<Identifier>>() .FirstOrDefault(parameter => parameter.Name == element.Name); if (declaration != null) { IsLocalDeclaration = true; isFunctionParameter = true; return declaration; } parent = LuaCodeDomNavigator.GetParentElement(parent as ICodeDomElement); } if (parent is LuaCodeClass)//Check for global declaration { var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List<SimpleCodeElement>(navigator.WalkTopLevelMembers<LuaCodeVariable>()); if (codeElements.Count > 0) { var declaration = codeElements.FirstOrDefault(child => child.Name == element.Name); CheckLocalDeclaration(declaration as LuaCodeVariable); return declaration; } } return null; }
/// <summary> /// Rename LuaCodeFunction in scope of parentElement. /// </summary> /// <param name="parentElement">Containing element. (LuaCodeClass)</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> private bool RenameFunctionCalls(CodeElement parentElement, string oldName, string newName) { bool result = true; var navigator = new LuaCodeDomNavigator(parentElement); codeElements = new List<SimpleCodeElement>(navigator.WalkMembers<LuaCodeElement<FunctionCall>>()); codeElements.ForEach(funcCallElement => { if (funcCallElement.Children != null) { LuaCodeElement<Identifier> identifier = funcCallElement.Children.OfType<LuaCodeElement<Identifier>>() .FirstOrDefault(); if (identifier.Name == oldName) { identifier.RenameSymbol(newName); changedCodeElements.Add(identifier); } } funcCallElement.Name = newName; }); return result; }