android / gradle-recipes
Duplication

Places in code with 6 or more lines that are exactly the same.

Intro
  • For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
  • Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
  • You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
Duplication Overall
  • 72% duplication:
    • 1,801 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 1,302 duplicated lines
  • 816 duplicates
system72% (1,302 lines)
Duplication per Extension
kts75% (926 lines)
kt65% (362 lines)
groovy100% (14 lines)
Duplication per Component (primary)
BuildSrc/manifestReplacementTest98% (109 lines)
BuildSrc/getApksTest98% (109 lines)
BuildSrc/manifestUpdaterTest87% (90 lines)
BuildSrc/workerEnabledTransformation90% (80 lines)
Unclassified74% (73 lines)
Kotlin/manifestReplacementTest86% (65 lines)
Kotlin/workerEnabledTransformation86% (53 lines)
BuildSrc/customizeAgpDslAndVariantWithConvenientAPI64% (49 lines)
BuildSrc/customizeAgpDslAndVariant58% (49 lines)
BuildSrc/setVersionsFromTask60% (48 lines)
BuildSrc/testVariantFilteringOnBuildType77% (48 lines)
BuildSrc/customizeAgpDsl72% (48 lines)
Kotlin/manifestTransformerTest76% (43 lines)
BuildSrc/testAsmTransformApi58% (39 lines)
BuildSrc/addBuildTypeUsingDslFinalize82% (38 lines)
Kotlin/libraryManifestTransformerTest61% (35 lines)
Kotlin/addCustomResValueFromTask72% (34 lines)
Kotlin/addCustomFieldWithValueFromTask69% (34 lines)
Kotlin/addManifestPlaceholderFromTask55% (27 lines)
Kotlin/addCustomManifestPlaceholder77% (27 lines)
Kotlin/getApksTest68% (26 lines)
Kotlin/addCustomResValueField66% (22 lines)
Kotlin/addCustomBuildConfigField61% (22 lines)
Kotlin/changeMinSdkVersion84% (21 lines)
Kotlin/addBuildTypeUsingDslFinalize80% (20 lines)
Kotlin/getBundleTest55% (19 lines)
Kotlin/getAarTest56% (18 lines)
Kotlin/getPublicTxt31% (18 lines)
Kotlin/getMappingFile48% (17 lines)
Groovy/manifestReplacementTest100% (7 lines)
Groovy/manifestTransformerTest100% (7 lines)
Kotlin/bundleTransformerTest14% (7 lines)

Duplication Between Components (50+ lines)

G BuildSrc/getApksTest BuildSrc/getApksTest BuildSrc/manifestReplacementTest BuildSrc/manifestReplacementTest BuildSrc/getApksTest--BuildSrc/manifestReplacementTest 218 BuildSrc/manifestUpdaterTest BuildSrc/manifestUpdaterTest BuildSrc/getApksTest--BuildSrc/manifestUpdaterTest 152 Kotlin/manifestReplacementTest Kotlin/manifestReplacementTest BuildSrc/getApksTest--Kotlin/manifestReplacementTest 110 BuildSrc/workerEnabledTransformation BuildSrc/workerEnabledTransformation BuildSrc/getApksTest--BuildSrc/workerEnabledTransformation 90 BuildSrc/testAsmTransformApi BuildSrc/testAsmTransformApi BuildSrc/getApksTest--BuildSrc/testAsmTransformApi 83 BuildSrc/setVersionsFromTask BuildSrc/setVersionsFromTask BuildSrc/getApksTest--BuildSrc/setVersionsFromTask 72 BuildSrc/testVariantFilteringOnBuildType BuildSrc/testVariantFilteringOnBuildType BuildSrc/getApksTest--BuildSrc/testVariantFilteringOnBuildType 72 BuildSrc/manifestReplacementTest--BuildSrc/manifestUpdaterTest 152 BuildSrc/manifestReplacementTest--Kotlin/manifestReplacementTest 110 BuildSrc/manifestReplacementTest--BuildSrc/workerEnabledTransformation 90 BuildSrc/manifestReplacementTest--BuildSrc/testAsmTransformApi 83 BuildSrc/manifestReplacementTest--BuildSrc/setVersionsFromTask 72 BuildSrc/manifestReplacementTest--BuildSrc/testVariantFilteringOnBuildType 72 BuildSrc/manifestUpdaterTest--BuildSrc/workerEnabledTransformation 90 BuildSrc/manifestUpdaterTest--BuildSrc/testAsmTransformApi 83 BuildSrc/manifestUpdaterTest--BuildSrc/setVersionsFromTask 72 BuildSrc/manifestUpdaterTest--BuildSrc/testVariantFilteringOnBuildType 72 Kotlin/manifestTransformerTest Kotlin/manifestTransformerTest BuildSrc/manifestUpdaterTest--Kotlin/manifestTransformerTest 64 BuildSrc/customizeAgpDslAndVariant BuildSrc/customizeAgpDslAndVariant BuildSrc/customizeAgpDslAndVariant--BuildSrc/getApksTest 65 BuildSrc/customizeAgpDslAndVariant--BuildSrc/manifestReplacementTest 65 BuildSrc/customizeAgpDslAndVariant--BuildSrc/manifestUpdaterTest 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI BuildSrc/customizeAgpDslAndVariantWithConvenientAPI BuildSrc/customizeAgpDslAndVariant--BuildSrc/customizeAgpDslAndVariantWithConvenientAPI 98 BuildSrc/customizeAgpDslAndVariant--BuildSrc/workerEnabledTransformation 65 BuildSrc/customizeAgpDslAndVariant--BuildSrc/testVariantFilteringOnBuildType 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI--BuildSrc/getApksTest 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI--BuildSrc/manifestReplacementTest 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI--BuildSrc/manifestUpdaterTest 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI--BuildSrc/workerEnabledTransformation 65 BuildSrc/customizeAgpDslAndVariantWithConvenientAPI--BuildSrc/testVariantFilteringOnBuildType 65 Kotlin/workerEnabledTransformation Kotlin/workerEnabledTransformation BuildSrc/workerEnabledTransformation--Kotlin/workerEnabledTransformation 92 BuildSrc/customizeAgpDsl BuildSrc/customizeAgpDsl BuildSrc/customizeAgpDsl--BuildSrc/getApksTest 83 BuildSrc/customizeAgpDsl--BuildSrc/manifestReplacementTest 83 BuildSrc/customizeAgpDsl--BuildSrc/manifestUpdaterTest 83 BuildSrc/customizeAgpDsl--BuildSrc/customizeAgpDslAndVariant 88 BuildSrc/customizeAgpDsl--BuildSrc/customizeAgpDslAndVariantWithConvenientAPI 88 BuildSrc/customizeAgpDsl--BuildSrc/workerEnabledTransformation 83 BuildSrc/customizeAgpDsl--BuildSrc/testAsmTransformApi 76 BuildSrc/customizeAgpDsl--BuildSrc/testVariantFilteringOnBuildType 65 BuildSrc/testAsmTransformApi--BuildSrc/workerEnabledTransformation 83 BuildSrc/testAsmTransformApi--BuildSrc/testVariantFilteringOnBuildType 67 BuildSrc/addBuildTypeUsingDslFinalize BuildSrc/addBuildTypeUsingDslFinalize BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/getApksTest 83 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/manifestReplacementTest 83 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/manifestUpdaterTest 83 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/workerEnabledTransformation 83 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/customizeAgpDsl 76 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/testAsmTransformApi 76 BuildSrc/addBuildTypeUsingDslFinalize--BuildSrc/testVariantFilteringOnBuildType 65 BuildSrc/setVersionsFromTask--BuildSrc/testVariantFilteringOnBuildType 68 BuildSrc/testVariantFilteringOnBuildType--BuildSrc/workerEnabledTransformation 72 Kotlin/addCustomFieldWithValueFromTask Kotlin/addCustomFieldWithValueFromTask Kotlin/addCustomResValueFromTask Kotlin/addCustomResValueFromTask Kotlin/addCustomFieldWithValueFromTask--Kotlin/addCustomResValueFromTask 66

Download: SVG DOT (open online Graphviz editor)

Open 3D force graph...

Show more details on duplication between components...
Longest Duplicates
The list of 20 longest duplicates.
See data for all 816 duplicates...
Size#FoldersFilesLinesCode
29 x 2 BuildSrc/workerEnabledTr...uildSrc/src/main/kotlin
Kotlin/workerEnabledTransformation/app
CopyApksTask.kt
build.gradle.kts
40:77 (100%)
19:56 (60%)
view
24 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
BuildSrc/manifestReplace...uildSrc/src/main/kotlin
ManifestProducerTask.kt
ManifestProducerTask.kt
22:48 (100%)
22:48 (100%)
view
23 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
Kotlin/manifestReplacementTest/app
ManifestProducerTask.kt
build.gradle.kts
22:47 (95%)
36:61 (47%)
view
23 x 2 BuildSrc/manifestReplace...uildSrc/src/main/kotlin
Kotlin/manifestReplacementTest/app
ManifestProducerTask.kt
build.gradle.kts
22:47 (95%)
36:61 (47%)
view
23 x 2 Kotlin/androidArtifactTr...st[artifact_AAR]/module
Kotlin/androidArtifactTr...artifact_BUNDLE]/module
build.gradle.kts
build.gradle.kts
3:44 (65%)
3:44 (62%)
view
22 x 2 Kotlin/addCustomFieldWithValueFromTask/app
Kotlin/addCustomResValueFromTask/app
build.gradle.kts
build.gradle.kts
1:54 (75%)
1:54 (81%)
view
19 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
BuildSrc/manifestReplace...uildSrc/src/main/kotlin
ExamplePlugin.kt
ExamplePlugin.kt
22:47 (100%)
22:47 (100%)
view
14 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
BuildSrc/setVersionsFrom...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
14 x 2 BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
BuildSrc/setVersionsFrom...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
14 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
BuildSrc/manifestReplace...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
14 x 2 BuildSrc/getApksTest/buildSrc/src/main/kotlin
BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
14 x 2 BuildSrc/manifestReplace...uildSrc/src/main/kotlin
BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
14 x 2 BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
Kotlin/manifestTransformerTest/app
ManifestTransformerTask.kt
build.gradle.kts
22:40 (100%)
31:49 (32%)
view
14 x 2 BuildSrc/manifestReplace...uildSrc/src/main/kotlin
BuildSrc/setVersionsFrom...uildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
28:44 (100%)
28:44 (100%)
view
13 x 2 BuildSrc/customizeAgpDslAndVariant/app
BuildSrc/customizeAgpDsl...ntWithConvenientAPI/app
build.gradle.kts
build.gradle.kts
1:17 (100%)
1:17 (100%)
view
13 x 2 BuildSrc/setVersionsFromTask/buildSrc
BuildSrc/testVariantFilteringOnBuildType/buildSrc
build.gradle.kts
build.gradle.kts
3:22 (100%)
3:22 (100%)
view
12 x 2 BuildSrc/testAsmTransformApi/buildSrc
BuildSrc/testVariantFilteringOnBuildType/buildSrc
build.gradle.kts
build.gradle.kts
3:21 (92%)
3:21 (92%)
view
12 x 2 BuildSrc/setVersionsFromTask/buildSrc
BuildSrc/testAsmTransformApi/buildSrc
build.gradle.kts
build.gradle.kts
3:21 (92%)
3:21 (92%)
view
11 x 2 Kotlin/addBuildTypeUsingDslFinalize
Kotlin/addCustomBuildConfigField
build.gradle.kts
build.gradle.kts
2:15 (100%)
2:15 (100%)
view
11 x 2 Kotlin/addCustomFieldWithValueFromTask
Kotlin/addManifestPlaceholderFromTask
build.gradle.kts
build.gradle.kts
2:15 (100%)
2:15 (100%)
view
Duplicated Units
The list of top 4 duplicated units.
See data for all 4 unit duplicates...
Size#FoldersFilesLinesCode
22 x 2 BuildSrc/manifestReplace...uildSrc/src/main/kotlin
BuildSrc/getApksTest/buildSrc/src/main/kotlin
ExamplePlugin.kt
ExamplePlugin.kt
24:50 
24:50 
view
13 x 2 BuildSrc/workerEnabledTr...uildSrc/src/main/kotlin
Kotlin/workerEnabledTransformation/app
CopyApksTask.kt
build.gradle.kts
65:79 
44:58 
view
8 x 4 BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
BuildSrc/manifestReplace...uildSrc/src/main/kotlin
BuildSrc/setVersionsFrom...uildSrc/src/main/kotlin
BuildSrc/getApksTest/buildSrc/src/main/kotlin
VerifyManifestTask.kt
VerifyManifestTask.kt
VerifyManifestTask.kt
VerifyManifestTask.kt
37:45 
37:45 
37:45 
37:45 
view
6 x 2 BuildSrc/manifestUpdater...uildSrc/src/main/kotlin
Kotlin/manifestTransformerTest/app
ManifestTransformerTask.kt
build.gradle.kts
34:41 
43:50 
view