private void CreateOrUpdateData([NotNull] IT4File t4File) { IPsiSourceFile sourceFile = t4File.GetSourceFile(); if (sourceFile == null || !sourceFile.LanguageType.Is<T4ProjectFileType>()) return; var newData = new T4FileData(t4File, _directiveInfoManager); T4FileData existingData; lock (_fileDataBySourceFile) { _fileDataBySourceFile.TryGetValue(sourceFile, out existingData); _fileDataBySourceFile[sourceFile] = newData; } T4FileDataDiff diff = newData.DiffWith(existingData); if (diff != null) _fileDataChanged.Fire(Pair.Of(sourceFile, diff)); }
public T4FileDataDiff DiffWith([CanBeNull] T4FileData oldData) { if (oldData == null) { if (_referencedAssemblies.Count == 0 && _macros.Count == 0) { return(null); } return(new T4FileDataDiff(_referencedAssemblies, EmptyList <string> .InstanceList, _macros)); } string[] addedMacros = _macros.Except(oldData._macros).ToArray(); oldData._referencedAssemblies.Compare(_referencedAssemblies, out JetHashSet <string> addedAssemblies, out JetHashSet <string> removedAssemblies); if (addedMacros.Length == 0 && addedAssemblies.Count == 0 && removedAssemblies.Count == 0) { return(null); } return(new T4FileDataDiff(addedAssemblies, removedAssemblies, addedMacros)); }
private void CreateOrUpdateData([NotNull] IT4File t4File) { IPsiSourceFile sourceFile = t4File.GetSourceFile(); if (sourceFile == null || !sourceFile.LanguageType.Is <T4ProjectFileType>()) { return; } var newData = new T4FileData(t4File, _directiveInfoManager); T4FileData existingData; lock (_fileDataBySourceFile) { _fileDataBySourceFile.TryGetValue(sourceFile, out existingData); _fileDataBySourceFile[sourceFile] = newData; } T4FileDataDiff diff = newData.DiffWith(existingData); if (diff != null) { _fileDataChanged.Fire(Pair.Of(sourceFile, diff)); } }