private void CollectVariableParameters(IRuleBracketParameters ruleBracketParameters)
    {
      var sibling = ruleBracketParameters.FirstChild;
      IList<ITreeNode> parameters = new List<ITreeNode>();
      while (sibling != null)
      {
        if ((sibling is VariableName) || (sibling.GetTokenType() == PsiTokenType.NULL_KEYWORD))
        {
          parameters.Add(sibling);
        }
        sibling = sibling.NextSibling;
      }

      foreach (var parameter in parameters)
      {
        if (parameter is VariableName)
        {
          var variableName = parameter as VariableName;
          var declaredElement = variableName.Resolve().DeclaredElement;
          if (declaredElement != null)
          {
            var variableDeclaration = declaredElement as IVariableDeclaration;
            string typeName = UndefinedRuleName;
            if(variableDeclaration.Parent is SharpExpression)
            {
              sibling = variableDeclaration.NextSibling;
              while(sibling != null)
              {
                if(sibling is IRuleName)
                {
                  typeName = sibling.GetText();
                  break;
                }
                sibling = sibling.NextSibling;
              }
            }

            if(variableDeclaration.Parent is RuleBracketTypedParameters)
            {
              sibling = variableDeclaration.PrevSibling;
              while(sibling != null)
              {
                if(! sibling.IsWhitespaceToken())
                {
                  if(! (sibling is IRuleName))
                  {
                    break;
                  } else
                  {
                    typeName = sibling.GetText();
                    break;
                  }
                }
                sibling = sibling.PrevSibling;
              }
            }

            myVariableParameters.Add(new Pair<string, string>(variableName.GetText(), typeName));
          }
          else
          {
            myVariableParameters.Add(new Pair<string, string>(variableName.GetText(), UndefinedRuleName));
          }
        }
        if (parameter.GetTokenType() == PsiTokenType.NULL_KEYWORD)
        {
          myVariableParameters.Add(new Pair<string, string>(UndefinedParameterName, UndefinedRuleName));
        }
      }
    }
Beispiel #2
0
        private void CollectVariableParameters(IRuleBracketParameters ruleBracketParameters)
        {
            var sibling = ruleBracketParameters.FirstChild;
            IList <ITreeNode> parameters = new List <ITreeNode>();

            while (sibling != null)
            {
                if ((sibling is VariableName) || (sibling.GetTokenType() == PsiTokenType.NULL_KEYWORD))
                {
                    parameters.Add(sibling);
                }
                sibling = sibling.NextSibling;
            }

            foreach (var parameter in parameters)
            {
                if (parameter is VariableName)
                {
                    var variableName    = parameter as VariableName;
                    var declaredElement = variableName.Resolve().DeclaredElement;
                    if (declaredElement != null)
                    {
                        var    variableDeclaration = declaredElement as IVariableDeclaration;
                        string typeName            = UndefinedRuleName;
                        if (variableDeclaration.Parent is SharpExpression)
                        {
                            sibling = variableDeclaration.NextSibling;
                            while (sibling != null)
                            {
                                if (sibling is IRuleName)
                                {
                                    typeName = sibling.GetText();
                                    break;
                                }
                                sibling = sibling.NextSibling;
                            }
                        }

                        if (variableDeclaration.Parent is RuleBracketTypedParameters)
                        {
                            sibling = variableDeclaration.PrevSibling;
                            while (sibling != null)
                            {
                                if (!sibling.IsWhitespaceToken())
                                {
                                    if (!(sibling is IRuleName))
                                    {
                                        break;
                                    }
                                    else
                                    {
                                        typeName = sibling.GetText();
                                        break;
                                    }
                                }
                                sibling = sibling.PrevSibling;
                            }
                        }

                        myVariableParameters.Add(new Pair <string, string>(variableName.GetText(), typeName));
                    }
                    else
                    {
                        myVariableParameters.Add(new Pair <string, string>(variableName.GetText(), UndefinedRuleName));
                    }
                }
                if (parameter.GetTokenType() == PsiTokenType.NULL_KEYWORD)
                {
                    myVariableParameters.Add(new Pair <string, string>(UndefinedParameterName, UndefinedRuleName));
                }
            }
        }