Introduce `@ToBeImplemented` (#2643) The `@ToBeImplemented` annotation replaces Groovy's `@NotYetImplemented`.
The problem with `NotYetImplemented` is that tests marked with it succeed no matter what causes the test to fail. Marked tests can pass because the expected failure is still present (which is the purpose of the test), or if the expected failure is replaced by some other failure.
It's better to write a test that explicitly tests for the expected failure, so when it fails for some other reason, it becomes noticeable. The purpose of the `@ToBeImplemented` annotation is to keep such tests easy to find in the code.
Use Path instead of ProjectIdentifier for project registry The use of `ProjectIdentifier` was problematic, in that we were hanging onto all `DefaultProjectDescriptor` references for the life of the build. In addition, ProjectIdentifier is not particularly useful as an 'identifier' type.
The registry now contains the identity path for every project in a build, and can provide a `ProjectComponentIdentifier` instance for each of these paths.