Example #1
0
        /// <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);
        }
Example #3
0
        /// <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;
        }
Example #4
0
        /// <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);
        }
Example #5
0
 /// <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);
 }
Example #8
0
 /// <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;
 }
Example #9
0
        /// <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);
        }
Example #10
0
        /// <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;
        }
Example #11
0
 /// <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);
Example #12
0
 /// <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);