public void EnsureKeywordTokenSet() { var keywords = new JetHashSet <object>(typeof(ShaderLabTokenType).GetFields().Where(f => f.Name.EndsWith("_KEYWORD")) .Select(f => f.GetValue(null))); var missingKeywords = keywords.Except(ShaderLabTokenType.KEYWORDS); CollectionAssert.IsEmpty(missingKeywords); }
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); }
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)); }