Skip to content

Commit 7ed8f36

Browse files
committed
Consider abstract classes to have 70% abstractness.
They usually also contain some implementations and are ideally weighted for calculating the abstractness.
1 parent 27c82e6 commit 7ed8f36

4 files changed

Lines changed: 26 additions & 11 deletions

cypher/Metrics/Calculate_and_set_Abstractness_for_Java.cypher

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,20 @@ MATCH (artifact:Artifact)-[:CONTAINS]->(package)
99
,count{(package)-[:CONTAINS]->(:Annotation)} AS numberAnnotations
1010
,count{(package)-[:CONTAINS]->(:Interface)} AS numberInterfaces
1111
WITH *
12-
,numberInterfaces + numberAnnotations + numberAbstractClasses AS numberAbstractTypes
12+
,numberInterfaces + numberAnnotations + numberAbstractClasses AS numberAbstractTypes
13+
,numberInterfaces + numberAnnotations + (numberAbstractClasses * 0.7) AS weightedAbstractTypes
1314
WITH *
14-
,toFloat(numberAbstractTypes) / (numberTypes + 1E-38) AS abstractness
15-
SET package.abstractness = abstractness
16-
,package.numberOfAbstractTypes = numberAbstractTypes
17-
,package.numberOfTypes = numberTypes
15+
,toFloat(weightedAbstractTypes) / (numberTypes + 1E-38) AS abstractness
16+
SET package.abstractness = abstractness
17+
,package.numberOfAbstractTypes = numberAbstractTypes
18+
,package.numberOfAbstractClasses = numberAbstractClasses
19+
,package.numberOfTypes = numberTypes
1820
RETURN artifactName
1921
,package.fqn AS fullQualifiedPackageName
2022
,package.name AS packageName
2123
,abstractness
2224
,numberAbstractTypes
2325
,numberTypes
26+
,numberAbstractClasses
27+
,weightedAbstractTypes
2428
ORDER BY abstractness ASC, numberTypes DESC

cypher/Metrics/Calculate_and_set_Abstractness_for_Java_including_Subpackages.cypher

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ MATCH (artifact:Artifact)-[:CONTAINS]->(package)
1313
,package
1414
,sum(subpackage.numberOfTypes) AS numberTypes
1515
,sum(subpackage.numberOfAbstractTypes) AS numberAbstractTypes
16+
,sum(subpackage.numberOfAbstractClasses) AS numberAbstractClasses
1617
,count(path) - 1 AS numberOfIncludedSubPackages
1718
,max(length(path)) AS maxSubpackageDepth
1819
WITH *
19-
,toFloat(numberAbstractTypes) / (numberTypes + 1E-38) AS abstractness
20+
// Calculate abstract classes out of abstract types and then add 70% of them back in (weighted)
21+
,numberAbstractTypes - (numberAbstractClasses * 0.3) AS weightedAbstractTypes
22+
WITH *
23+
,toFloat(weightedAbstractTypes) / (numberTypes + 1E-38) AS abstractness
2024
SET package.abstractnessIncludingSubpackages = abstractness
2125
,package.numberOfAbstractTypesIncludingSubpackages = numberAbstractTypes
2226
,package.numberOfTypesIncludingSubpackages = numberTypes
@@ -26,6 +30,8 @@ RETURN artifactName
2630
,abstractness
2731
,numberAbstractTypes
2832
,numberTypes
33+
,numberAbstractClasses
34+
,weightedAbstractTypes
2935
,numberOfIncludedSubPackages
3036
,maxSubpackageDepth
3137
ORDER BY abstractness ASC, maxSubpackageDepth DESC, numberTypes DESC

cypher/Metrics/Calculate_and_set_Abstractness_for_Typescript.cypher

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,20 @@ OPTIONAL MATCH (projectdir:Directory)<-[:HAS_ROOT]-(project:TS:Project)-[:CONTAI
1010
,count{(module)-[:EXPORTS]->(:TypeAlias)} AS numberTypeAliases
1111
,count{(module)-[:EXPORTS]->(:Interface)} AS numberInterfaces
1212
WITH *
13-
,numberInterfaces + numberTypeAliases + numberAbstractClasses AS numberAbstractTypes
13+
,numberInterfaces + numberTypeAliases + numberAbstractClasses AS numberAbstractTypes
14+
,numberInterfaces + numberTypeAliases + (numberAbstractClasses * 0.7) AS weightedAbstractTypes
1415
WITH *
15-
,toFloat(numberAbstractTypes) / (numberTypes + 1E-38) AS abstractness
16-
SET module.abstractness = abstractness
17-
,module.numberOfAbstractTypes = numberAbstractTypes
18-
,module.numberOfTypes = numberTypes
16+
,toFloat(weightedAbstractTypes) / (numberTypes + 1E-38) AS abstractness
17+
SET module.abstractness = abstractness
18+
,module.numberOfAbstractTypes = numberAbstractTypes
19+
,module.numberOfAbstractClasses = numberAbstractClasses
20+
,module.numberOfTypes = numberTypes
1921
RETURN projectName
2022
,module.globalFqn AS fullQualifiedModuleName
2123
,module.name AS moduleName
2224
,abstractness
2325
,numberAbstractTypes
2426
,numberTypes
27+
,numberAbstractClasses
28+
,weightedAbstractTypes
2529
ORDER BY abstractness ASC, numberTypes DESC

cypher/Metrics/Clear_all_metrics.cypher

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ REMOVE package.incomingDependencies
2828
,package.abstractness
2929
,package.numberOfTypes
3030
,package.numberOfAbstractTypes
31+
,package.numberOfAbstractClasses
3132
,package.abstractnessIncludingSubpackages
3233
,package.numberOfAbstractTypesIncludingSubpackages
3334
,package.numberOfTypesIncludingSubpackages

0 commit comments

Comments
 (0)