public static TextNode TryGetImportOrNoImport(string text, StringCache stringTable)
        {
            var match = Strings.ProjectImportedRegex.Match(text);

            if (match.Success && match.Groups.Count == 5)
            {
                var project         = match.Groups["File"].Value;
                var importedProject = match.Groups["ImportedProject"].Value;
                var line            = int.Parse(match.Groups["Line"].Value);
                var column          = int.Parse(match.Groups["Column"].Value);

                project         = stringTable.Intern(project);
                importedProject = stringTable.Intern(importedProject);

                var result = new Import(project, importedProject, line, column);
                return(result);
            }

            match = Strings.ProjectWasNotImportedRegex(text, out string reason);
            if (match.Success && match.Groups.Count > 4)
            {
                var project         = match.Groups["File"].Value;
                var importedProject = match.Groups["ImportedProject"].Value;
                var line            = int.Parse(match.Groups["Line"].Value);
                var column          = int.Parse(match.Groups["Column"].Value);

                project         = stringTable.Intern(project);
                importedProject = stringTable.Intern(importedProject);
                reason          = stringTable.Intern("Not imported due to " + reason);

                var noImport = new NoImport(project, importedProject, line, column, reason);
                return(noImport);
            }

            return(null);
        }
        public static TextNode TryGetImportOrNoImport(ProjectImportedEventArgs args, StringCache stringTable)
        {
            var message = (string)buildEventArgsFieldMessage.GetValue(args);

            var arguments = lazyFormattedBuildEventArgsFieldArguments.GetValue(args) as object[];

            if (arguments != null && arguments.Length > 0)
            {
                if (arguments.Length == 4)
                {
                    if (message == Strings.ProjectImported)
                    {
                        var importedProject   = stringTable.Intern((string)arguments[0]);
                        var containingProject = stringTable.Intern((string)arguments[1]);
                        var line   = ParseInt(arguments[2]);
                        var column = ParseInt(arguments[3]);
                        var import = new Import(
                            containingProject,
                            importedProject,
                            line,
                            column);
                        return(import);
                    }
                    else if (
                        message == Strings.ProjectImportSkippedExpressionEvaluatedToEmpty ||
                        message == Strings.ProjectImportSkippedNoMatches ||
                        message == Strings.ProjectImportSkippedMissingFile ||
                        message == Strings.ProjectImportSkippedInvalidFile)
                    {
                        var importedProject   = stringTable.Intern((string)arguments[0]);
                        var containingProject = stringTable.Intern((string)arguments[1]);
                        var line   = ParseInt(arguments[2]);
                        var column = ParseInt(arguments[3]);

                        string reason = "";
                        if (message == Strings.ProjectImportSkippedExpressionEvaluatedToEmpty)
                        {
                            reason = "empty expression";
                        }
                        else if (message == Strings.ProjectImportSkippedNoMatches)
                        {
                            reason = "no matches";
                        }
                        else if (message == Strings.ProjectImportSkippedMissingFile)
                        {
                            reason = "missing file";
                        }
                        else if (message == Strings.ProjectImportSkippedInvalidFile)
                        {
                            reason = "invalid file";
                        }

                        var noImport = new NoImport(
                            containingProject,
                            importedProject,
                            line,
                            column,
                            stringTable.Intern(reason));
                        return(noImport);
                    }
                }
                else if (arguments.Length == 6)
                {
                    if (message == Strings.ProjectImportSkippedFalseCondition)
                    {
                        var    project           = (string)arguments[0];
                        var    containingProject = (string)arguments[1];
                        var    line               = ParseInt(arguments[2]);
                        var    column             = ParseInt(arguments[3]);
                        var    condition          = (string)arguments[4];
                        var    evaluatedCondition = (string)arguments[5];
                        string reason             = $"false condition; ({condition} was evaluated as {evaluatedCondition}).";

                        var noImport = new NoImport(
                            stringTable.Intern(containingProject),
                            stringTable.Intern(project),
                            line,
                            column,
                            stringTable.Intern(reason));
                        return(noImport);
                    }
                }
                else if (arguments.Length == 1)
                {
                    if (message == Strings.CouldNotResolveSdk)
                    {
                        var sdk      = (string)arguments[0];
                        var noImport = new NoImport(
                            stringTable.Intern(args.ProjectFile),
                            stringTable.Intern(args.ImportedProjectFile),
                            args.LineNumber,
                            args.ColumnNumber,
                            stringTable.Intern(string.Format(message, sdk)));
                        return(noImport);
                    }
                }
            }

            var parsed = TryGetImportOrNoImport(args.Message, stringTable);

            return(parsed);
        }