Handle removals of classes transitively After further cleaning up our class change detection logic, I noticed that we were handling additions and removals very differently. This has been corrected and we now detect transitive removals too. This doesn't happen often in practice, as one needs to deliberately exclude a task to trigger the bug that was fixed. Nevertheless, it's good to have symmetric logic.
Detect changes to transitive dependencies on incremental compilation The incremental compiler was completely ignoring changes in transitive dependencies, except for changes to supertypes, which seems like a really weird decision. It has been fixed to instead take all possible transitive references into account. As a result the code is also simpler.