-
Notifications
You must be signed in to change notification settings - Fork 389
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This rewrite brings the dependencies tree in line with the current best practices for modelling project data. Specifically: - Using standard dataflow blocks for merging data across configurations (replacing the previous `AggregateCrossTargetProjectContext` and related types). - Using "slices" to simplify data handling and correctly support switching the active configuration. - Making a snapshot of dependencies available at various levels, simplifying certain behaviours (previously we'd only have deltas, so components needed to track their own state independently). The dependencies tree now populates much sooner, and no longer shows yellow triangles during project load for projects that are already restored, which greatly improves perceived performance. Fewer tree updates also improve actual performance. A simpler representation of dependencies is now made. Instead of `IDependencyModel` which had many properties, we now have `IDependency` with only a few. If a dependency exposes a browse object, it may also implement `IDependencyWithBrowseObject` which adds a few extra properties. If we expose additional capabilities in future, we can add more interfaces to support that, which providers may opt in to. The rewrite introduces the distinction between "configured" and "unconfigured" dependencies. For example, all dependencies coming from MSBuild are configured, while for a TypeScript/JavaScript project NPM packages are unconfigured (they have no concept of MSBuild configurations). Unconfigured dependencies are displayed at the top level, while configured dependencies are displayed beneath a node reflecting their configuration (when multi-targeting). We also introduce an abstraction for MSBuild properties that come from project/joint rule sources. There is no common representation for dependencies in MSBuild, so a "factory" abstraction is introduced to take care of mapping between items and their metadata to a common representation. A new `DependencyGroupType` type was added to model information common to all dependencies of a given type. Other miscellaneous changes in this rewrite: - Remove all explicit handling of target frameworks from the code. Everything is now performed in terms of "slices" which include target frameworks and potentially other implicit configuration dimensions. - Tree building now occurs directly on `IDependency`, removing the need for the additional `IDependencyViewModel` object and the copying associated with that. - Improve tree update logic to avoid collapsing expanded nodes during updates. - Move all "legacy" extensibility code into its own folder, and implement in terms of the new APIs in `LegacyDependencySubscriber`. - Added static class `KnownProjectImageMonikers` which caches `ProjectImageMoniker` instances, avoiding the locking and work done within `ToProjectSystemType()` on each use of an image moniker at run time. - Consolidation of namespaces. Originally the dependencies tree was in the VS layer. In 16.x much of the code was moved to the host agnostic layer, however namespaces could not be updated. This rewrite moves us towards addressing that, where possible, by replacing the previous.
- Loading branch information
1 parent
ac586f4
commit efdbada
Showing
136 changed files
with
5,456 additions
and
9,099 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 0 additions & 14 deletions
14
...t.VisualStudio.ProjectSystem.Managed/ProjectSystem/Frameworks/ITargetFrameworkProvider.cs
This file was deleted.
Oops, something went wrong.
68 changes: 0 additions & 68 deletions
68
src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/Frameworks/TargetFramework.cs
This file was deleted.
Oops, something went wrong.
34 changes: 0 additions & 34 deletions
34
...ft.VisualStudio.ProjectSystem.Managed/ProjectSystem/Frameworks/TargetFrameworkProvider.cs
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.