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)); } } }
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)); } } }