Skip to content

Commit df165fb

Browse files
committed
Optimize internal dependencies report
1 parent 6b7b9ea commit df165fb

9 files changed

+351
-68
lines changed

cypher/Candidates_for_Interface_Segregation.cypher

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
MATCH (type:Type)-[:DECLARES]->(method:Method)-[:INVOKES]->(dependentMethod:Method)
44
MATCH (dependentMethod)<-[:DECLARES]-(dependentType:Type)
5-
MATCH (dependentType)-[:IMPLEMENTS*]->(superType:Type)-[:DECLARES]->(inheritedMethod:Method)
5+
MATCH (dependentType)-[:IMPLEMENTS*1..9]->(superType:Type)-[:DECLARES]->(inheritedMethod:Method)
66
WHERE type.fqn <> dependentType.fqn
77
AND dependentMethod.name IS NOT NULL
88
AND inheritedMethod.name IS NOT NULL
@@ -15,6 +15,8 @@ WHERE type.fqn <> dependentType.fqn
1515
// Count the different signatures without the return type
1616
// of all declared methods including the inherited ones
1717
,count(DISTINCT split(method.signature, ' ')[1]) + count(DISTINCT split(inheritedMethod.signature, ' ')[1]) AS declaredMethods
18+
// Filter out types that declare only a few more methods than those that are actually used.
19+
// A good interface segregation candidate declares a lot of methods where only a few of them are used widely.
1820
WHERE declaredMethods > calledMethods + 2
1921
WITH fullDependentTypeName
2022
,declaredMethods
Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,35 @@
1-
// Cyclic Dependencies
2-
MATCH (package:Package)-[:CONTAINS]->(type:Type)-[:DEPENDS_ON]->(dependentType:Type)<-[:CONTAINS]-(dependentPackage:Package)
3-
MATCH (dependentPackage)-[:CONTAINS]->(cycleType:Type)-[:DEPENDS_ON]->(cycleDependentType:Type)<-[:CONTAINS]-(package)
4-
WHERE package <> dependentPackage
5-
RETURN package, dependentPackage
6-
,type, dependentType, cycleType, cycleDependentType
7-
LIMIT 100
1+
//Cyclic Dependencies as 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+
WHERE package.fqn <> dependentPackage.fqn
8+
WITH replace(last(split(artifact.fileName, '/')), '.jar', '') AS artifactName
9+
,package.fqn AS packageName
10+
,replace(last(split(dependentArtifact .fileName, '/')), '.jar', '') AS dependentArtifactName
11+
,dependentPackage.fqn AS dependentPackageName
12+
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
13+
,collect(DISTINCT backwardSource.name + '->' + backwardTarget.name) AS backwardDependencies
14+
WITH artifactName
15+
,packageName
16+
,dependentArtifactName
17+
,dependentPackageName
18+
,forwardDependencies
19+
,backwardDependencies
20+
,size(forwardDependencies) AS numberOfForwardDependencies
21+
,size(backwardDependencies) AS numberOfBackwardDependencies
22+
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
23+
WHERE (size(forwardDependencies) > size(backwardDependencies)
24+
OR (size(forwardDependencies) = size(backwardDependencies)
25+
AND size(packageName) >= size(dependentPackageName)))
26+
RETURN artifactName
27+
,packageName
28+
,dependentArtifactName
29+
,dependentPackageName
30+
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
31+
,numberOfForwardDependencies AS numberForward
32+
,numberOfBackwardDependencies AS numberBackward
33+
,forwardDependencies[0..9] AS someForwardDependencies
34+
,backwardDependencies
35+
ORDER BY forwardToBackwardBalance DESC, packageName ASC

cypher/Cyclic_Dependencies/Cyclic_Dependencies_as_unwinded_List.cypher renamed to cypher/Cyclic_Dependencies/Cyclic_Dependencies_Breakdown.cypher

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
1-
//Cyclic Dependencies as unwinded List
1+
//Cyclic Dependencies Breakdown
22

33
MATCH (package:Package)-[:CONTAINS]->(forwardSource:Type)-[:DEPENDS_ON]->(forwardTarget:Type)<-[:CONTAINS]-(dependentPackage:Package)
44
MATCH (dependentPackage)-[:CONTAINS]->(backwardSource:Type)-[:DEPENDS_ON]->(backwardTarget:Type)<-[:CONTAINS]-(package)
5-
WHERE package <> dependentPackage
6-
WITH package
7-
,dependentPackage
5+
MATCH (artifact:Artifact)-[:CONTAINS]->(package)
6+
MATCH (dependentArtifact:Artifact)-[:CONTAINS]->(dependentPackage)
7+
WHERE package.fqn <> dependentPackage.fqn
8+
WITH replace(last(split(artifact.fileName, '/')), '.jar', '') AS artifactName
9+
,package.fqn AS packageName
10+
,replace(last(split(dependentArtifact .fileName, '/')), '.jar', '') AS dependentArtifactName
11+
,dependentPackage.fqn AS dependentPackageName
812
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
913
,collect(DISTINCT backwardTarget.name + '<-' + backwardSource.name) AS backwardDependencies
10-
WITH package
11-
,dependentPackage
14+
WITH artifactName
15+
,packageName
16+
,dependentArtifactName
17+
,dependentPackageName
1218
,forwardDependencies
1319
,backwardDependencies
1420
,size(forwardDependencies) AS numberOfForwardDependencies
1521
,size(backwardDependencies) AS numberOfBackwardDependencies
1622
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
1723
WHERE (size(forwardDependencies) > size(backwardDependencies)
1824
OR (size(forwardDependencies) = size(backwardDependencies)
19-
AND size(package.fqn) >= size(dependentPackage.fqn)))
25+
AND size(packageName) >= size(dependentPackageName)))
2026
UNWIND (backwardDependencies + forwardDependencies) AS dependency
21-
RETURN package.fqn AS packageName
22-
,dependentPackage.fqn AS dependentPackageName
27+
RETURN artifactName
28+
,packageName
29+
,dependentArtifactName
30+
,dependentPackageName
2331
,dependency
2432
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
2533
,numberOfForwardDependencies AS numberForward
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
1-
//Cyclic Dependencies as List
1+
//Cyclic Dependencies Breakdown Backward Only
22

33
MATCH (package:Package)-[:CONTAINS]->(forwardSource:Type)-[:DEPENDS_ON]->(forwardTarget:Type)<-[:CONTAINS]-(dependentPackage:Package)
44
MATCH (dependentPackage)-[:CONTAINS]->(backwardSource:Type)-[:DEPENDS_ON]->(backwardTarget:Type)<-[:CONTAINS]-(package)
5-
WHERE package <> dependentPackage
6-
WITH package
7-
,dependentPackage
5+
MATCH (artifact:Artifact)-[:CONTAINS]->(package)
6+
MATCH (dependentArtifact:Artifact)-[:CONTAINS]->(dependentPackage)
7+
WHERE package.fqn <> dependentPackage.fqn
8+
WITH replace(last(split(artifact.fileName, '/')), '.jar', '') AS artifactName
9+
,package.fqn AS packageName
10+
,replace(last(split(dependentArtifact .fileName, '/')), '.jar', '') AS dependentArtifactName
11+
,dependentPackage.fqn AS dependentPackageName
812
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
9-
,collect(DISTINCT backwardSource.name + '->' + backwardTarget.name) AS backwardDependencies
10-
WITH package
11-
,dependentPackage
13+
,collect(DISTINCT backwardTarget.name + '<-' + backwardSource.name) AS backwardDependencies
14+
WITH artifactName
15+
,packageName
16+
,dependentArtifactName
17+
,dependentPackageName
1218
,forwardDependencies
1319
,backwardDependencies
1420
,size(forwardDependencies) AS numberOfForwardDependencies
1521
,size(backwardDependencies) AS numberOfBackwardDependencies
1622
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
1723
WHERE (size(forwardDependencies) > size(backwardDependencies)
1824
OR (size(forwardDependencies) = size(backwardDependencies)
19-
AND size(package.fqn) >= size(dependentPackage.fqn)))
20-
RETURN package.fqn AS packageName
21-
,dependentPackage.fqn AS dependentPackageName
25+
AND size(packageName) >= size(dependentPackageName)))
26+
UNWIND backwardDependencies AS dependency
27+
RETURN artifactName
28+
,packageName
29+
,dependentArtifactName
30+
,dependentPackageName
31+
,dependency
2232
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
2333
,numberOfForwardDependencies AS numberForward
2434
,numberOfBackwardDependencies AS numberBackward
25-
,forwardDependencies
26-
,backwardDependencies
2735
ORDER BY forwardToBackwardBalance DESC, packageName ASC
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Cyclic Dependencies
2+
MATCH (package:Package)-[:CONTAINS]->(type:Type)-[:DEPENDS_ON]->(dependentType:Type)<-[:CONTAINS]-(dependentPackage:Package)
3+
MATCH (dependentPackage)-[:CONTAINS]->(cycleType:Type)-[:DEPENDS_ON]->(cycleDependentType:Type)<-[:CONTAINS]-(package)
4+
WHERE package <> dependentPackage
5+
RETURN package, dependentPackage
6+
,type, dependentType, cycleType, cycleDependentType
7+
LIMIT 100

cypher/Internal_Dependencies/List_types_that_are_used_by_many_different_packages.cypher

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
MATCH (artifact:Artifact)-[:CONTAINS]->(package:Package)-[:CONTAINS]->(type:Type)-[:DEPENDS_ON]->(dependentType:Type)<-[:CONTAINS]-(dependentPackage:Package)<-[:CONTAINS]-(dependentArtifact:Artifact)
44
WHERE package <> dependentPackage
55
WITH dependentType
6-
,labels(dependentType) AS dependentTypeLabels
7-
,COUNT(DISTINCT package) AS numberOfUsingPackages
8-
RETURN dependentType.fqn
9-
,dependentType.name
6+
,labels(dependentType) AS dependentTypeLabels
7+
,COUNT(DISTINCT package.fqn) AS numberOfUsingPackages
8+
RETURN dependentType.fqn AS fullQualifiedDependentTypeName
9+
,dependentType.name AS dependentTypeName
1010
,dependentTypeLabels
1111
,numberOfUsingPackages
12-
ORDER BY numberOfUsingPackages DESC
12+
ORDER BY numberOfUsingPackages DESC, dependentTypeName ASC

cypher/List_all_existing_artifacts.cypher

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
MATCH (artifact:Artifact:Archive)-[:CONTAINS]->(package:Package)-[:CONTAINS]->(type:Type)
44
WITH last(split(artifact.fileName, '/')) AS artifactName
5-
,COUNT(DISTINCT package) AS packages
6-
,COUNT(DISTINCT type) AS types
7-
RETURN artifactName, packages, types
5+
,artifact.incomingDependencies AS incomingDependencies
6+
,artifact.outgoingDependencies AS outgoingDependencies
7+
,COUNT(DISTINCT package.fqn) AS packages
8+
,COUNT(DISTINCT type.fqn) AS types
9+
RETURN artifactName, packages, types, incomingDependencies, outgoingDependencies

0 commit comments

Comments
 (0)