in Backend/Core/ForTea.Core/TemplateProcessing/CodeCollecting/T4CSharpCodeGenerationInfoCollectorBase.cs [62:91]
public void ProcessBeforeInterior(ITreeNode element)
{
AppendRemainingMessage(element);
if (!(element is IT4IncludeDirective include)) return;
var file = (IT4File)element.GetContainingFile().NotNull();
Results.Push(new T4CSharpCodeGenerationIntermediateResult(file, Interrupter));
var sourceFile = IncludeResolver.Resolve(include.ResolvedPath);
if (sourceFile == null)
{
var target = include.GetFirstAttribute(T4DirectiveInfoManager.Include.FileAttribute)?.Value ?? element;
var data = T4FailureRawData.FromElement(target, $"Unresolved include: {target.GetText()}");
Interrupter.InterruptAfterProblem(data);
Guard.StartProcessing(file.LogicalPsiSourceFile.GetLocation());
return;
}
if (include.Once && Guard.HasSeenFile(sourceFile.GetLocation())) return;
if (!Guard.CanProcess(sourceFile.GetLocation()))
{
var target = include.GetFirstAttribute(T4DirectiveInfoManager.Include.FileAttribute)?.Value ?? element;
var data = T4FailureRawData.FromElement(target, "Recursion in includes");
Interrupter.InterruptAfterProblem(data);
Guard.StartProcessing(sourceFile.GetLocation());
return;
}
var resolved = include.IncludedFile;
Guard.StartProcessing(sourceFile.GetLocation());
resolved?.ProcessDescendants(this);
}