in Backend/Core/ForTea.Core/Psi/T4ModuleReferencer.cs [24:67]
private bool CanReferenceModule([CanBeNull] IPsiModule module, [CanBeNull] IPsiModule moduleToReference)
=> module is T4FilePsiModule t4PsiModule
&& t4PsiModule.IsValid()
&& moduleToReference != null
&& moduleToReference.ContainingProjectModule is IAssembly assembly
&& _environment.TargetFrameworkId.IsReferenceAllowed(assembly.TargetFrameworkId);
public bool CanReferenceModule(IPsiModule module, IPsiModule moduleToReference, UserDataHolder userDataHolder)
=> CanReferenceModule(module, moduleToReference);
public bool ReferenceModule(IPsiModule module, IPsiModule moduleToReference)
=> ReferenceModuleImpl(module, moduleToReference, null);
public bool ReferenceModuleWithType(IPsiModule module, ITypeElement typeToReference)
=> ReferenceModuleImpl(module, typeToReference.Module, typeToReference.GetContainingNamespace().QualifiedName);
private bool ReferenceModuleImpl([NotNull] IPsiModule module, [NotNull] IPsiModule moduleToReference,
[CanBeNull] string ns)
{
if (!CanReferenceModule(module, moduleToReference))
return false;
var t4PsiModule = (IT4FilePsiModule)module;
var assembly = (IAssembly)moduleToReference.ContainingProjectModule;
Assertion.AssertNotNull(assembly, "assembly != null");
if (!(t4PsiModule.SourceFile.GetTheOnlyPsiFile(T4Language.Instance) is IT4File t4File))
return false;
Action action = () =>
{
// add assembly directive
t4File.AddDirective(T4DirectiveInfoManager.Assembly.CreateDirective(assembly.FullAssemblyName));
// add import directive if necessary
if (!String.IsNullOrEmpty(ns)
&& !t4File.GetDirectives(T4DirectiveInfoManager.Import).Any(d => String.Equals(ns,
d.GetAttributeValueByName(T4DirectiveInfoManager.Import.NamespaceAttribute.Name),
StringComparison.Ordinal)))
t4File.AddDirective(T4DirectiveInfoManager.Import.CreateDirective(ns));
};
return ExecuteTransaction(module, action);
}