public Invocation[] GetEntityNames(string line) { var entities = new Queue<Invocation>(); var stringWalker = new StringWalker(); var startIndex = 0; line = line.Trim(); foreach (var currentPosition in stringWalker.Iterate(line)) { if (currentPosition.Character == ' ' && !stringWalker.StateIs(StringWalkerState.InsideString) && !stringWalker.StateIs(StringWalkerState.InsideParentheses)) { stringWalker.Abort(); return GetEntityNames(line.Substring(currentPosition.Index)); } if (currentPosition.Character == '.' && stringWalker.HasNoState) { Enqueue(entities, line.Substring(startIndex, currentPosition.Index - startIndex)); startIndex = currentPosition.Index + 1; } } Enqueue(entities, line.Substring(startIndex)); return entities.ToArray(); }