private IPsiSourceFile TryFindFileInSolution()

in Backend/Core/ForTea.Core/Psi/Cache/Impl/T4PsiFileSelector.cs [41:73]


    private IPsiSourceFile TryFindFileInSolution([NotNull] VirtualFileSystemPath path,
      [NotNull] IPsiSourceFile requester)
    {
      if (path.IsEmpty) return null;
      var potentialProjectFiles = Solution
        .FindProjectItemsByLocation(path)
        .OfType<IProjectFile>()
        .AsList();
      var requesterPsiModule = requester.PsiModule;
      var targetFrameworkId = requesterPsiModule.GetT4TargetFrameworkId();
      IProjectFile correctBuildActionItem;
      if (targetFrameworkId == null)
      {
        correctBuildActionItem = null;
        Logger.Warn(
          "Requester has no target framework! Requester: {0}, requester module: {1}",
          requester.GetType(),
          requesterPsiModule.GetType()
        );
      }
      else
      {
        correctBuildActionItem = potentialProjectFiles
          .FirstOrDefault(file => file.Properties.GetBuildAction(targetFrameworkId) == BuildAction.NONE);
      }

      var projectFile = correctBuildActionItem ?? potentialProjectFiles.FirstOrDefault();
      if (projectFile == null) return null;
      var sourceFiles = projectFile.ToSourceFiles();
      var correctTargetFrameworkItem = sourceFiles
        .FirstOrDefault<object>(null, (_, file) => file.PsiModule.GetT4TargetFrameworkId() == targetFrameworkId);
      return correctTargetFrameworkItem ?? sourceFiles.FirstOrDefault();
    }