Example #1
0
        private CodeReferenceConfiguration CreateCodeReferenceConfiguration()
        {
            _codeReferences = GetValue(default(CodeReferenceConfiguration)) ?? CodeReferenceConfiguration.Default;
            _codeReferences.ItemPropertyChanged += (_, __) => _codeReferencesChangeThrottle.Tick();

            return(_codeReferences);
        }
Example #2
0
        protected virtual void OnReload()
        {
            _codeReferences             = null;
            _sourceFileExclusionFilters = null;

            // ReSharper disable once PossibleNullReferenceException
            GetType().GetProperties().ForEach(p => OnPropertyChanged(p.Name));
        }
Example #3
0
            public Engine([NotNull] CodeReferenceConfiguration configuration, [NotNull][ItemNotNull] ICollection <ProjectFile> sourceFiles, [NotNull][ItemNotNull] ICollection <ResourceTableEntry> resourceTableEntries, [NotNull] ITracer tracer)
            {
                _backgroundThread = new Thread(() => FindCodeReferences(configuration, sourceFiles, resourceTableEntries, tracer))
                {
                    IsBackground = true,
                    Priority     = ThreadPriority.Lowest
                };

                _backgroundThread.Start();
            }
Example #4
0
        public void BeginFind([NotNull] ResourceManager resourceManager, [NotNull] CodeReferenceConfiguration configuration, [ItemNotNull][NotNull] IEnumerable <ProjectFile> allSourceFiles, [NotNull] ITracer tracer)
        {
            var sourceFiles = allSourceFiles.Where(item => !item.IsResourceFile() && !item.IsDesignerFile()).ToArray();

            var resourceTableEntries = resourceManager.ResourceEntities
                                       .Where(entity => !entity.IsWinFormsDesignerResource)
                                       .SelectMany(entity => entity.Entries).ToArray();

            Interlocked.Exchange(ref _engine, new Engine(configuration, sourceFiles, resourceTableEntries, tracer))?.Dispose();
        }
Example #5
0
        private CodeReferenceConfiguration LoadCodeReferenceConfiguration()
        {
            Contract.Ensures(Contract.Result <CodeReferenceConfiguration>() != null);

            // ReSharper disable once ExplicitCallerInfoArgument
            _codeReferences = GetValue(default(CodeReferenceConfiguration), nameof(CodeReferences)) ?? CodeReferenceConfiguration.Default;
            _codeReferences.ItemPropertyChanged += (_, __) => _codeReferencesChangeThrottle.Tick();

            return(_codeReferences);
        }
Example #6
0
            private void FindCodeReferences([NotNull] CodeReferenceConfiguration configuration, [NotNull, ItemNotNull] ICollection <ProjectFile> projectFiles, [NotNull, ItemNotNull] ICollection <ResourceTableEntry> resourceTableEntries, [NotNull] ITracer tracer)
            {
                var stopwatch = Stopwatch.StartNew();

                try
                {
                    _total = resourceTableEntries.Count + projectFiles.Count;

                    resourceTableEntries.ForEach(entry => entry.CodeReferences = null);

                    var keys = new HashSet <string>(resourceTableEntries.Select(entry => entry.Key));

                    var sourceFiles = projectFiles.AsParallel()
                                      .Select(file => new FileInfo(file, configuration.Items, keys, ref _visited))
                                      .Where(file => file.HasConfigurations)
                                      .ToArray();

                    var keyFilesLookup = sourceFiles.Aggregate(new Dictionary <string, HashSet <FileInfo> >(),
                                                               (accumulator, file) =>
                    {
                        // ReSharper disable PossibleNullReferenceException
                        file.Keys.ForEach(key => accumulator.ForceValue(key, _ => new HashSet <FileInfo>()).Add(file));
                        // ReSharper restore PossibleNullReferenceException
                        return(accumulator);
                    });

                    resourceTableEntries.AsParallel().ForAll(entry =>
                    {
                        var key = entry.Key;

                        var files = keyFilesLookup.GetValueOrDefault(key);

                        var references = new List <CodeReference>();

                        files?.ForEach(file => file.FindCodeReferences(entry, references, tracer));

                        entry.CodeReferences = references.AsReadOnly();

                        Interlocked.Increment(ref _visited);
                    });

                    Debug.WriteLine(stopwatch.Elapsed);
                }
                catch (ThreadAbortException)
                {
                }
                finally
                {
                    stopwatch.Stop();
                }
            }