private IEnumerable GetIncludes()

in Backend/Core/ForTea.Core/Psi/Cache/Impl/T4FileDependencyCache.cs [101:154]


    private IEnumerable<IPsiSourceFile> GetIncludes([NotNull] IPsiSourceFile sourceFile) => Map
      .TryGetValue(sourceFile)
      ?.Includes
      .Select(path => PsiFileSelector.FindMostSuitableFile(path, sourceFile));

    public override void Merge(IPsiSourceFile sourceFile, object builtPart)
    {
      if (builtPart == null)
      {
        // Indirect dependency invalidation
        RemoveFromDirty(sourceFile);
        // Merge can happen when a current file is an indirect dependency
        // of a file that was moved between PSI modules.
        // In that case we need to set set up includers for all the includes
        var includes = new JetHashSet<IPsiSourceFile>(GetIncludes(sourceFile) ?? EmptyList<IPsiSourceFile>.Instance);
        if (UpdateIncluders(ReversedMap, sourceFile, includes, JetHashSet<IPsiSourceFile>.Empty))
        {
          // This means that the file was updated because its indirect dependency
          // was moved from one PSI module to another.
          // This means that that dependency should now be updated.
          // We'll update all of them just in case.
          var invalidationData = new T4FileInvalidationData(
            includes.Except(sourceFile),
            sourceFile
          );
          OnFilesIndirectlyAffected.Fire(invalidationData);
        }

        return;
      }

      var data = (T4IncludeData)builtPart.NotNull();

      var oldTransitiveIncludes = FindIndirectIncludesTransitiveClosure(sourceFile);
      var oldIncludes = new JetHashSet<IPsiSourceFile>(
        GetIncludes(sourceFile) ?? EmptyList<IPsiSourceFile>.Instance
      );

      base.Merge(sourceFile, new T4FileDependencyData(data.Includes));

      var newTransitiveIncludes = FindIndirectIncludesTransitiveClosure(sourceFile);
      var newIncludes = new JetHashSet<IPsiSourceFile>(
        GetIncludes(sourceFile) ?? EmptyList<IPsiSourceFile>.Instance
      );

      var fileInvalidationData = new T4FileInvalidationData(
        oldTransitiveIncludes.Union(newTransitiveIncludes).Except(sourceFile),
        sourceFile
      );
      OnFilesIndirectlyAffected.Fire(fileInvalidationData);

      oldIncludes.Compare(newIncludes, out var addedItems, out var removedItems);
      UpdateIncluders(ReversedMap, sourceFile, addedItems, removedItems);
    }