예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <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;
 }
예제 #6
0
 /// <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;
 }
예제 #7
0
        /// <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;
        }
예제 #8
0
        /// <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;
        }