1+ //Cyclic Dependencies between Artifacts as unwinded List
2+
3+ MATCH (package :Package )- [ : CONTAINS ] -> (forwardSource :Type )- [ : DEPENDS_ON ] -> (forwardTarget :Type )<- [ : CONTAINS ] - (dependentPackage :Package )
4+ MATCH (dependentPackage )- [ : CONTAINS ] -> (backwardSource :Type )- [ : DEPENDS_ON ] -> (backwardTarget :Type )<- [ : CONTAINS ] - (package )
5+ MATCH (artifact :Artifact )- [ : CONTAINS ] -> (package )
6+ MATCH (dependentArtifact :Artifact )- [ : CONTAINS ] -> (dependentPackage )
7+ WITH artifact
8+ ,dependentArtifact
9+ ,package
10+ ,dependentPackage
11+ ,collect (DISTINCT forwardSource .name + '->' + forwardTarget .name ) AS forwardDependencies
12+ ,collect (DISTINCT backwardTarget .name + '<-' + backwardSource .name ) AS backwardDependencies
13+ WITH artifact
14+ ,dependentArtifact
15+ ,package
16+ ,dependentPackage
17+ ,forwardDependencies
18+ ,backwardDependencies
19+ ,size (forwardDependencies ) AS numberOfForwardDependencies
20+ ,size (backwardDependencies ) AS numberOfBackwardDependencies
21+ ,size (forwardDependencies ) + size (backwardDependencies ) AS numberOfAllCyclicDependencies
22+ WHERE artifact <> dependentArtifact
23+ AND package <> dependentPackage
24+ AND (size (forwardDependencies ) > size (backwardDependencies )
25+ OR (size (forwardDependencies ) = size (backwardDependencies )
26+ AND size (package .fqn ) >= size (dependentPackage .fqn )))
27+ UNWIND (backwardDependencies + forwardDependencies ) AS dependency
28+ RETURN artifact .fileName AS artifactName
29+ ,dependentArtifact .fileName AS dependentArtifactName
30+ ,package .fqn AS packageName
31+ ,dependentPackage .fqn AS dependentPackageName
32+ ,dependency
33+ ,toFloat (ABS (numberOfForwardDependencies - numberOfBackwardDependencies )) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
34+ ,numberOfForwardDependencies AS numberForward
35+ ,numberOfBackwardDependencies AS numberBackward
36+ ORDER BY forwardToBackwardBalance DESC , packageName ASC
0 commit comments