public Action GetPreprocessAction(string sourceFilePath)
        {
            var text = sourceFileResolver.GetSourceFileText(sourceFilePath);

            if (text == null)
            {
                return(null);
            }

            return(GetPreprocessAction(sourceFilePath, text));
        }
        public string GetPreprocessedText(string sourceFilePath, string projectEvaluationContext)
        {
            string preprocessedFileCacheKey = projectEvaluationContext + sourceFilePath;

            if (preprocessedFileCache.TryGetValue(preprocessedFileCacheKey, out var result))
            {
                return(result);
            }

            var sourceText = sourceFileResolver.GetSourceFileText(sourceFilePath);

            var importMap = GetImportMap(projectEvaluationContext);

            if (importMap == null)
            {
                return(string.Empty);
            }

            if (importMap.TryGetValue(sourceFilePath, out var imports) &&
                imports.Count > 0 &&
                !string.IsNullOrWhiteSpace(sourceText.Text))
            {
                result = GetPreprocessedTextCore(projectEvaluationContext, sourceText, imports);
            }
            else
            {
                result = sourceText.Text;
                if (sourceText.GetLineText(0).Contains("<?xml"))
                {
                    result = result.Substring(sourceText.Lines[0].Length);
                }
            }

            preprocessedFileCache[preprocessedFileCacheKey] = result;
            return(result);
        }
        public string GetPreprocessedText(string sourceFilePath, string projectEvaluationContext)
        {
            string preprocessedFileCacheKey = projectEvaluationContext + sourceFilePath;

            if (preprocessedFileCache.TryGetValue(preprocessedFileCacheKey, out var result))
            {
                return(result);
            }

            var sourceText = sourceFileResolver.GetSourceFileText(sourceFilePath);

            var importMap = GetImportMap(projectEvaluationContext);

            if (importMap == null)
            {
                return(string.Empty);
            }

            if (importMap.TryGetValue(sourceFilePath, out var imports) &&
                imports.Count > 0 &&
                !string.IsNullOrWhiteSpace(sourceText.Text))
            {
                var sb   = new StringBuilder();
                int line = 0;

                if (sourceText.GetLineText(line).Contains("<?xml"))
                {
                    line++;
                }

                foreach (var import in imports.OrderBy(i => i.Line).ToArray())
                {
                    var importEndLine = CorrectForMultilineImportElement(sourceText, import.Line);

                    for (; line <= importEndLine; line++)
                    {
                        sb.AppendLine(sourceText.GetLineText(line));
                    }

                    var importText = GetPreprocessedText(import.ProjectPath, projectEvaluationContext);
                    sb.AppendLine($"<!-- ======== {import.ProjectPath} ======= -->");
                    sb.AppendLine(importText);
                    sb.AppendLine($"<!-- ======== END OF {import.ProjectPath} ======= -->");
                }

                for (; line < sourceText.Lines.Count; line++)
                {
                    sb.AppendLine(sourceText.GetLineText(line));
                }

                result = sb.ToString();
            }
            else
            {
                result = sourceText.Text;
                if (sourceText.GetLineText(0).Contains("<?xml"))
                {
                    result = result.Substring(sourceText.Lines[0].Length);
                }
            }

            preprocessedFileCache[preprocessedFileCacheKey] = result;
            return(result);
        }