public static TextNode TryGetImportOrNoImport()

in src/StructuredLogger/Analyzers/ImportTreeAnalyzer.cs [7:106]


        public static TextNode TryGetImportOrNoImport(ProjectImportedEventArgs args, StringCache stringTable)
        {
            var message = (string)Reflector.BuildEventArgs_message?.GetValue(args);

            var arguments = Reflector.LazyFormattedBuildEventArgs_arguments?.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;
        }