private CodeReferenceConfiguration CreateCodeReferenceConfiguration() { _codeReferences = GetValue(default(CodeReferenceConfiguration)) ?? CodeReferenceConfiguration.Default; _codeReferences.ItemPropertyChanged += (_, __) => _codeReferencesChangeThrottle.Tick(); return(_codeReferences); }
protected virtual void OnReload() { _codeReferences = null; _sourceFileExclusionFilters = null; // ReSharper disable once PossibleNullReferenceException GetType().GetProperties().ForEach(p => OnPropertyChanged(p.Name)); }
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(); }
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(); }
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); }
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(); } }