/// <summary> /// Translates Chunk node to LuaCodeClass. /// </summary> /// <param name="chunk">Instance of Chunk.</param> /// <param name="name">Class name.</param> /// <returns></returns> public LuaCodeClass Translate(Chunk chunk, string name) { rootElement = new LuaCodeClass(dte, parent, name, chunk); rootClass = CreateVirtualFunction(rootElement); AddElementToParent(rootElement, rootClass); try { if (chunk.Block != null) foreach (Block member in chunk.Block) { if (member.StatementList != null) foreach (Node node in member.StatementList) { RecurseNode(node); } } //TraceDump(rootElement); } catch (ThreadAbortException) { } catch (Exception ex) { Trace.WriteLine(ex); dte.StatusBar.Text = "An error has occured during parsing source."; dte.StatusBar.Highlight(true); } return rootElement; }
/// <summary> /// Rename function in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public override IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { renameResult = new RenameResult(oldName, newName); changedCodeElements = new List <CodeElement>(); //Function without parent element could not be renamed if (element is LuaCodeFunction && parentElement == null) { var ex = new InvalidCodeElementException(Resources.InvalidFunctionParentMessage, parentElement); Trace.WriteLine(ex); throw ex; } //Rename function, function calls or null element by its name if (element is LuaCodeFunction || element is LuaCodeElement <FunctionCall> || element == null) { renameResult = Rename(element, parentElement, oldName, newName); } else { throw new InvalidCodeElementException( Resources.InvalidFunctionElementMessage, parentElement); } //Set RenameReferences flag to indicates that rename is local or not renameResult.RenameReferences = !IsLocalDeclaration; renameResult.ChangedElements = changedCodeElements; renameResult.Success = true; return(renameResult); }
/// <summary> /// Rename function in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public override IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { renameResult = new RenameResult(oldName, newName); changedCodeElements = new List<CodeElement>(); //Function without parent element could not be renamed if (element is LuaCodeFunction && parentElement == null) { var ex = new InvalidCodeElementException(Resources.InvalidFunctionParentMessage, parentElement); Trace.WriteLine(ex); throw ex; } //Rename function, function calls or null element by its name if (element is LuaCodeFunction || element is LuaCodeElement<FunctionCall> || element == null) { renameResult = Rename(element, parentElement, oldName, newName); } else { throw new InvalidCodeElementException( Resources.InvalidFunctionElementMessage, parentElement); } //Set RenameReferences flag to indicates that rename is local or not renameResult.RenameReferences = !IsLocalDeclaration; renameResult.ChangedElements = changedCodeElements; renameResult.Success = true; return renameResult; }
/// <summary> /// Translates Chunk node to LuaCodeClass. /// </summary> /// <param name="chunk">Instance of Chunk.</param> /// <param name="name">Class name.</param> /// <returns></returns> public LuaCodeClass Translate(Chunk chunk, string name) { rootElement = new LuaCodeClass(dte, parent, name, chunk); rootClass = CreateVirtualFunction(rootElement); AddElementToParent(rootElement, rootClass); try { if (chunk.Block != null) { foreach (Block member in chunk.Block) { if (member.StatementList != null) { foreach (Node node in member.StatementList) { RecurseNode(node); } } } } //TraceDump(rootElement); } catch (ThreadAbortException) { } catch (Exception ex) { Trace.WriteLine(ex); dte.StatusBar.Text = "An error has occured during parsing source."; dte.StatusBar.Highlight(true); } return(rootElement); }
/// <summary> /// Rename element in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { if (CodeElementRename == null) { throw new InvalidStrategyException(CodeElementRename); } return CodeElementRename.RenameSymbols(element, parentElement, elementType, oldName, newName); }
/// <summary> /// Rename element in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { if (CodeElementRename == null) { throw new InvalidStrategyException(CodeElementRename); } return(CodeElementRename.RenameSymbols(element, parentElement, elementType, oldName, newName)); }
/// <summary> /// Rename LuaCodeFunction in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <param name="parentElement">Containing element. (LuaCodeClass)</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> private IRenameResult Rename(CodeElement element, LuaCodeClass parentElement, string oldName, string newName) { if (element == null) { //If function is null rename by its name. RenameOldFunctionOrCall(element, parentElement, oldName, newName); renameResult.Success = RenameFunctionCalls(parentElement, oldName, newName); } else { //Rename function/functionCall element if (RenameOldFunctionOrCall(element, parentElement, oldName, newName)) { if (element is LuaCodeElement <FunctionCall> ) { CodeElement function = RenameFunctionDeclaration(element, parentElement, oldName, newName); renameResult.Success = function != null; if (renameResult.Success) { //Call Rename recursively for rename function declaration. Rename(function, (LuaCodeClass)((ICodeDomElement)function).ParentElement, oldName, newName); } } else { renameResult.Success = RenameFunctionCalls(parentElement, oldName, newName); } } else { throw new InvalidCodeElementException( String.Format(Resources.OldFunctionNotFoundMessage, oldName), parentElement); } } return(renameResult); }
/// <summary> /// Rename LuaCodeFunction in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <param name="parentElement">Containing element. (LuaCodeClass)</param> /// <param name="oldName">Old name of element.</param> /// <param name="newName">New name of element.</param> private IRenameResult Rename(CodeElement element, LuaCodeClass parentElement, string oldName, string newName) { if (element == null) { //If function is null rename by its name. RenameOldFunctionOrCall(element, parentElement, oldName, newName); renameResult.Success = RenameFunctionCalls(parentElement, oldName, newName); } else { //Rename function/functionCall element if (RenameOldFunctionOrCall(element, parentElement, oldName, newName)) { if (element is LuaCodeElement<FunctionCall>) { CodeElement function = RenameFunctionDeclaration(element, parentElement, oldName, newName); renameResult.Success = function != null; if (renameResult.Success) { //Call Rename recursively for rename function declaration. Rename(function, (LuaCodeClass)((ICodeDomElement)function).ParentElement, oldName, newName); } } else { renameResult.Success = RenameFunctionCalls(parentElement, oldName, newName); } } else { throw new InvalidCodeElementException( String.Format(Resources.OldFunctionNotFoundMessage, oldName), parentElement); } } return renameResult; }
/// <summary> /// Rename element in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public override IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { CodeElement declaration; renameResult = new RenameResult(oldName, newName); changedCodeElements = new List <CodeElement>(); isFunctionParameter = false; if (element == null) //Declaration is in other lua file or not recognized by caller. { //Get declaration of the Variable. declaration = GetDeclaration(oldName, parentElement); if (declaration != null && !IsLocalDeclaration) { RenameVariableDeclaration(declaration, oldName, newName); } //If declaration is global then rename elements in all referenced files if (!IsLocalDeclaration) { //Rename all references in scope of class renameResult.Success = RenameMemberVariableReferences(parentElement, elementType, oldName, newName); } renameResult.Success = true; } else { //Get declaration of the Variable. declaration = GetDeclaration(element, parentElement); //Get parent of the Variable declaration. if (declaration != null) { variableParent = ((ICodeDomElement)declaration).ParentElement; if (!(variableParent is LuaCodeFunction) || (variableParent is LuaCodeClass)) { variableParent = LuaCodeDomNavigator.GetParentElement((ICodeDomElement)declaration); } } else { variableParent = ((ICodeDomElement)element).ParentElement; } //Rename CodeElements and all references. if (variableParent is LuaCodeClass) //CodeElement is global declared variable. { //Rename member variable if (RenameVariableDeclaration(declaration, oldName, newName)) { //Rename all references in scope of current class. renameResult.Success = RenameMemberVariableReferences(parentElement, oldName, newName); } } else if (variableParent is LuaCodeFunction)//CodeElement is local declared variable. { //Rename local variable. if (RenameVariableDeclaration(declaration, oldName, newName)) { if (IsLocalDeclaration) { //Rename all references in scope of Function renameResult.Success = RenameMemberVariableReferencesInScope(oldName, newName); } else { //Rename all references in scope of Class. renameResult.Success = RenameMemberVariableReferences(parentElement, oldName, newName); } } } else if (variableParent == null) { throw new InvalidCodeElementException( Resources.InvalidElementParentMessage, parentElement); } else { Trace.WriteLine("Trace:Unrecognized variable..."); RenameSymbols(null, parentElement, elementType, oldName, newName); } } renameResult.ChangedElements = changedCodeElements; renameResult.RenameReferences = !IsLocalDeclaration; renameResult.Success = true; return(renameResult); }
/// <summary> /// Rename element in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public override IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName) { CodeElement declaration; renameResult = new RenameResult(oldName, newName); changedCodeElements = new List<CodeElement>(); isFunctionParameter = false; if (element == null) //Declaration is in other lua file or not recognized by caller. { //Get declaration of the Variable. declaration = GetDeclaration(oldName, parentElement); if (declaration != null && !IsLocalDeclaration) { RenameVariableDeclaration(declaration, oldName, newName); } //If declaration is global then rename elements in all referenced files if (!IsLocalDeclaration) { //Rename all references in scope of class renameResult.Success = RenameMemberVariableReferences(parentElement, elementType, oldName, newName); } renameResult.Success = true; } else { //Get declaration of the Variable. declaration = GetDeclaration(element, parentElement); //Get parent of the Variable declaration. if (declaration != null) { variableParent = ((ICodeDomElement) declaration).ParentElement; if (!(variableParent is LuaCodeFunction) || (variableParent is LuaCodeClass)) { variableParent = LuaCodeDomNavigator.GetParentElement((ICodeDomElement) declaration); } } else { variableParent = ((ICodeDomElement) element).ParentElement; } //Rename CodeElements and all references. if (variableParent is LuaCodeClass) //CodeElement is global declared variable. { //Rename member variable if (RenameVariableDeclaration(declaration, oldName, newName)) { //Rename all references in scope of current class. renameResult.Success = RenameMemberVariableReferences(parentElement, oldName, newName); } } else if (variableParent is LuaCodeFunction)//CodeElement is local declared variable. { //Rename local variable. if (RenameVariableDeclaration(declaration, oldName, newName)) { if (IsLocalDeclaration) { //Rename all references in scope of Function renameResult.Success = RenameMemberVariableReferencesInScope(oldName, newName); } else { //Rename all references in scope of Class. renameResult.Success = RenameMemberVariableReferences(parentElement, oldName, newName); } } } else if (variableParent == null) { throw new InvalidCodeElementException( Resources.InvalidElementParentMessage, parentElement); } else { Trace.WriteLine("Trace:Unrecognized variable..."); RenameSymbols(null, parentElement, elementType, oldName, newName); } } renameResult.ChangedElements = changedCodeElements; renameResult.RenameReferences = !IsLocalDeclaration; renameResult.Success = true; return renameResult; }
/// <summary> /// Rename function in scope of parentElement. /// </summary> /// <param name="element">Element to rename.</param> /// <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> public abstract IRenameResult RenameSymbols(CodeElement element, LuaCodeClass parentElement, vsCMElement elementType, string oldName, string newName);