Skip to content

Commit 8b908fe

Browse files
committed
Detect code source files that live outside of src/main as an AGP feature being used
1 parent bed0e43 commit 8b908fe

File tree

7 files changed

+21
-0
lines changed

7 files changed

+21
-0
lines changed

src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidTestDependenciesProject.groovy

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ abstract class AndroidTestDependenciesProject extends AbstractAndroidProject {
132132
}
133133
""".stripIndent()
134134
),
135+
new Source(
136+
SourceType.JAVA, "Debug", "com/example",
137+
"""\
138+
package com.example;
139+
140+
public class Debug { }
141+
""".stripIndent(),
142+
"debug"
143+
),
135144
new Source(
136145
SourceType.JAVA, "Spec", "com/example",
137146
"""\

src/main/kotlin/com/autonomousapps/internal/analyzer/AndroidSources.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// Copyright (c) 2024. Tony Robalik.
22
// SPDX-License-Identifier: Apache-2.0
3+
@file:Suppress("UnstableApiUsage")
4+
35
package com.autonomousapps.internal.analyzer
46

57
import com.android.build.api.artifact.Artifacts

src/main/kotlin/com/autonomousapps/internal/reason/ModuleAdviceExplainer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ internal class ModuleAdviceExplainer(
6262
if (hasAndroidAssets) appendReproducibleNewLine("* Contains Android assets.")
6363
if (hasBuildConfig) appendReproducibleNewLine("* Includes BuildConfig.")
6464
if (hasAndroidDependencies) appendReproducibleNewLine("* Has Android library dependencies.")
65+
if (hasBuildTypeSourceSplits) appendReproducibleNewLine("* Has non-main source splits.")
6566
}
6667
}
6768
}

src/main/kotlin/com/autonomousapps/model/ModuleAdvice.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ data class AndroidScore(
5252
val usesAndroidClasses: Boolean,
5353
val hasBuildConfig: Boolean,
5454
val hasAndroidDependencies: Boolean,
55+
val hasBuildTypeSourceSplits: Boolean,
5556
) : ModuleAdvice() {
5657

5758
override val name: String = "android"
@@ -64,6 +65,7 @@ data class AndroidScore(
6465
if (usesAndroidClasses) count += 2
6566
if (hasBuildConfig) count += 0.5f
6667
if (hasAndroidDependencies) count += 0.5f
68+
if (hasBuildTypeSourceSplits) count += 0.25f
6769
count
6870
}
6971

@@ -82,13 +84,15 @@ data class AndroidScore(
8284
var hasBuildConfig = false
8385
var usesAndroidClasses = false
8486
var hasAndroidDependencies = false
87+
var hasBuildTypeSourceSplits = false
8588

8689
scores.forEach {
8790
hasAndroidAssets = hasAndroidAssets || it.hasAndroidAssets
8891
hasAndroidRes = hasAndroidRes || it.hasAndroidRes
8992
hasBuildConfig = hasBuildConfig || it.hasBuildConfig
9093
usesAndroidClasses = usesAndroidClasses || it.usesAndroidClasses
9194
hasAndroidDependencies = hasAndroidDependencies || it.hasAndroidDependencies
95+
hasBuildTypeSourceSplits = hasBuildTypeSourceSplits || it.hasBuildTypeSourceSplits
9296
}
9397

9498
return AndroidScore(
@@ -97,6 +101,7 @@ data class AndroidScore(
97101
hasBuildConfig = hasBuildConfig,
98102
usesAndroidClasses = usesAndroidClasses,
99103
hasAndroidDependencies = hasAndroidDependencies,
104+
hasBuildTypeSourceSplits = hasBuildTypeSourceSplits,
100105
)
101106
}
102107
}

src/main/kotlin/com/autonomousapps/model/internal/intermediates/AndroidScoreVariant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ internal data class AndroidScoreVariant(
1313
val hasBuildConfig: Boolean,
1414
val usesAndroidClasses: Boolean,
1515
val hasAndroidDependencies: Boolean,
16+
val hasBuildTypeSourceSplits: Boolean,
1617
)

src/main/kotlin/com/autonomousapps/tasks/AndroidScoreTask.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ abstract class AndroidScoreTask @Inject constructor(
7272
val usesAndroidClasses = project.usedNonAnnotationClasses.any { it.startsWith("android.") }
7373
val importsAndroidClasses = project.imports.any { it.startsWith("android.") }
7474
val hasAndroidDependencies = androidDependencies.isNotEmpty()
75+
val hasBuildTypeSourceSplits = project.codeSource.any { !it.relativePath.startsWith("src/main") }
7576

7677
val score = AndroidScoreVariant(
7778
variant = project.variant,
@@ -80,6 +81,7 @@ abstract class AndroidScoreTask @Inject constructor(
8081
hasBuildConfig = hasBuildConfig,
8182
usesAndroidClasses = usesAndroidClasses || importsAndroidClasses,
8283
hasAndroidDependencies = hasAndroidDependencies,
84+
hasBuildTypeSourceSplits = hasBuildTypeSourceSplits
8385
)
8486

8587
output.bufferWriteJson(score)

src/test/kotlin/com/autonomousapps/internal/reason/ModuleAdviceExplainerTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ internal class ModuleAdviceExplainerTest {
7878
usesAndroidClasses = false,
7979
hasBuildConfig = false,
8080
hasAndroidDependencies = false,
81+
hasBuildTypeSourceSplits = false
8182
)
8283
}
8384
}

0 commit comments

Comments
 (0)