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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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));
        }