예제 #1
0
        public void BuildFile(IFile file, AttributedTypesTrieCollection collection)
        {
            file.GetPsiServices();
            var service = myLanguages.TryGetService <IAttributedTypesCacheBuilder>(file.Language);

            if (service != null)
            {
                service.BuildFile(file, collection);
            }
        }
예제 #2
0
        public bool Merge(AttributedTypesTrieCollection part, OneToSetMap <IPsiSourceFile, AttributedTypesTrieNode> sourceFileToNodes)
        {
            bool ret = false;

            foreach (var pair in part.Roots)
            {
                var node = EnsureNode(pair.Key);
                ret = node.Merge(pair.Value, sourceFileToNodes) || ret;
            }
            return(ret);
        }
예제 #3
0
        public static AttributedTypesTrieCollection Build(IPsiSourceFile sourceFile, AttributedTypesCacheBuilder builder)
        {
            var roots = new AttributedTypesTrieCollection();

            foreach (var file in sourceFile.EnumerateDominantPsiFiles())
            {
                builder.BuildFile(file, roots);
            }

            return(roots);
        }
예제 #4
0
        public void MergeLoaded(object data)
        {
            var node = (Pair <AttributedTypesTrieCollection, JetHashSet <IPsiSourceFile> >)data;

            if (node.First == null || node.Second == null)
            {
                return;
            }

            myLocks.AssertWriteAccessAllowed();

            //optimization here: replace roots because it constains no data yet.
            myRoot = node.First;
            myFilesWithoutAnnotations = node.Second;

            // add new nodes to file -> node index.
            UpdateIndexAfterLoad(myRoot.Roots);

            myPsiFiles.PsiChanged(null, PsiChangedElementType.ContentsChanged);
        }
예제 #5
0
        private Pair <AttributedTypesTrieCollection, JetHashSet <IPsiSourceFile> > LoadTrie(BinaryReader reader, IProgressIndicator progress)
        {
            var otherFilesCount = reader.ReadInt32();
            var otherFiles      = new JetHashSet <IPsiSourceFile>();

            for (int i = 0; i < otherFilesCount; i++)
            {
                int persistentId = reader.ReadInt32();
                var timestamp    = reader.ReadInt64();
                var file         = myPersistentIndexManager.GetSourceFileById(persistentId);
                if (file != null && file.IsValid() && file.LastWriteTimeUtc.Ticks == timestamp)
                {
                    otherFiles.Add(file);
                }
            }

            var map = new AttributedTypesTrieCollection();

            map.Read(reader, myPersistentIndexManager);
            return(Pair.Of(map, otherFiles));
        }
예제 #6
0
 public void BuildFile(IFile file, AttributedTypesTrieCollection trieRoot)
 {
 }
 public MyProcessor(CSharpAttributedTypesCacheBuilder builder, AttributedTypesTrieCollection trieRoot)
 {
     myBuilder  = builder;
     myTrieRoot = trieRoot;
 }
 public void BuildFile(IFile file, AttributedTypesTrieCollection trieRoot)
 {
     file.ProcessDescendants(new MyProcessor(this, trieRoot));
 }
예제 #9
0
 private AttributedTypesTrieCollection Build(IPsiSourceFile sourceFile)
 {
     return(AttributedTypesTrieCollection.Build(sourceFile, Builder));
 }