Hi All,

During my work on lazy loading of modules I stumbled upon the following 
possible dependency graph that I would like to handle:

     Y1                  X2

     ^                   ^
     |                   |
(non-transitive)    (non-transitive)
     |                   |
     |                   |

     X1                  Y2

     ^                   ^
     |                   |
     \                   /
      \                 /
       \               /
        \             /
         \           /
          \         /
               Z



Where An means module named A version n.

In other words there is a cycle in dependency _names_ (but not actual 
ResolvedModules)

Because Configuration uses DFS to find modules in parent configurations it is 
impossible to create Configuration that would represent such a graph of 
ResolvedModules.

1. I am trying to understand the reasoning behind DFS selection. While the 
above situation is not very common (but not that uncommon in environments with 
multiple modules developed separately) - BFS would handle the need to 
“override” some dependencies with proper layering.

2. Is there a way to handle it today?
(Ab)using transitive dependencies might work - I could introduce artificial 
module M ---(transitive)-->Y2 and make Z require M (so that resolution would 
replace Y1 found by DFS with Y2 required transitively by M).
Am I missing something?

Thanks,
Michal

Reply via email to