Details
Description
a) Whenever an artifact changes, all its inputs are re-scanned recursively, with no regards to whether they have actually changed themselves. Thus we have many more potentially expensive file system operations than we would actually need.
b) Every artifact keeps a full (i.e. recursive) list of all its dependencies, which takes a lot of memory.
I believe that both of these problems can be solved by attaching more information to the FileDependency class (namely: Which dependencies were introduced at what time with which scanner and configuration).