diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e2de39b2..e441197c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ Dependency Analysis Plugin Changelog +# Version 3.12.1 +* [fix]: don't suggest non-existent Android unit test variant in advice. + # Version 3.12.0 * [feat]: exceptions are special. Exceptions get verified early by the JVM and so if a dependency is missing an exception's type from the runtime classpath, that can cause failures in the consumer at runtime. diff --git a/gradle.properties b/gradle.properties index c3a904168..228339bb1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ org.gradle.parallel=true org.gradle.configuration-cache=true org.gradle.configuration-cache.parallel=true -VERSION=3.12.1-SNAPSHOT +VERSION=3.12.2-SNAPSHOT # https://kotlinlang.org/docs/gradle-configure-project.html#dependency-on-the-standard-library kotlin.stdlib.default.dependency=false diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/AbstractVariantProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/AbstractVariantProject.groovy index 6e901969c..044626c18 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/AbstractVariantProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/AbstractVariantProject.groovy @@ -14,6 +14,7 @@ import com.autonomousapps.kit.gradle.Dependency import com.autonomousapps.kit.gradle.GradleProperties import com.autonomousapps.kit.gradle.Plugin import com.autonomousapps.kit.gradle.dependencies.Plugins +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import com.autonomousapps.utils.DebugAware @@ -67,6 +68,7 @@ abstract class AbstractVariantProject extends AbstractAndroidProject { a.withBuildScript { bs -> bs.plugins(appliedPlugins) bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies = dependencies } }.write() diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidTestSmokeProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidTestSmokeProject.groovy index a8058279b..e36784409 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidTestSmokeProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidTestSmokeProject.groovy @@ -8,6 +8,7 @@ import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes import com.autonomousapps.kit.gradle.dependencies.Plugins +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.ProjectAdvice @@ -30,15 +31,15 @@ final class AndroidTestSmokeProject extends AbstractAndroidProject { private GradleProject build() { return newAndroidGradleProjectBuilder(agpVersion) - .withAndroidSubproject('app') { subproject -> - subproject.sources = appSources() - subproject.styles = AndroidStyleRes.DEFAULT - subproject.colors = AndroidColorRes.DEFAULT - - subproject.withBuildScript { buildScript -> - buildScript.plugins(androidApp()) - buildScript.android = defaultAndroidAppBlock() - buildScript.dependencies( + .withAndroidSubproject('app') { app -> + app.sources = appSources() + app.styles = AndroidStyleRes.DEFAULT + app.colors = AndroidColorRes.DEFAULT + app.withBuildScript { bs -> + bs.plugins(androidApp()) + bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT + bs.dependencies( kotlinStdLib('implementation'), appcompat('implementation'), junit('implementation'), @@ -49,11 +50,11 @@ final class AndroidTestSmokeProject extends AbstractAndroidProject { .withAndroidSubproject('benchmark') { test -> test.sources = androidBenchmarkSources test.manifest = null - - test.withBuildScript { buildScript -> - buildScript.plugins(androidTest()) - buildScript.android = defaultAndroidTestBlock(':app', true) - buildScript.dependencies(okHttp) + test.withBuildScript { bs -> + bs.plugins(androidTest()) + bs.android = defaultAndroidTestBlock(':app', true) + bs.kotlin = Kotlin.DEFAULT + bs.dependencies(okHttp) } } .write() @@ -85,9 +86,7 @@ final class AndroidTestSmokeProject extends AbstractAndroidProject { class Lib { val buffer = Buffer() }'''.stripIndent() - ) - .withPath('com.example', 'Lib') - .build() + ).build() ] Set actualBuildHealth() { diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidThreeTenProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidThreeTenProject.groovy index 2651a9482..69d96bea4 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidThreeTenProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/AndroidThreeTenProject.groovy @@ -9,6 +9,7 @@ import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes import com.autonomousapps.kit.gradle.dependencies.Plugins +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.ProjectAdvice @@ -43,6 +44,7 @@ final class AndroidThreeTenProject extends AbstractAndroidProject { s.withBuildScript { bs -> bs.plugins = androidApp(true) bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies = [ kotlinStdLib('implementation'), appcompat('implementation'), diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/ConstantsProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/ConstantsProject.groovy index 223aa2315..b67a413dd 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/ConstantsProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/ConstantsProject.groovy @@ -7,6 +7,7 @@ import com.autonomousapps.kit.Source import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -32,6 +33,7 @@ final class ConstantsProject extends AbstractAndroidProject { app.withBuildScript { bs -> bs.plugins = androidApp() bs.android = defaultAndroidAppBlock(true, 'com.example.app') + bs.kotlin = Kotlin.DEFAULT bs.dependencies( implementation(':lib'), implementation(':lib2'), @@ -49,6 +51,7 @@ final class ConstantsProject extends AbstractAndroidProject { lib.withBuildScript { bs -> bs.plugins(androidLib()) bs.android = defaultAndroidLibBlock(true, 'mutual.aid.lib') + bs.kotlin = Kotlin.DEFAULT bs.dependencies(kotlinStdLib('implementation')) } lib.sources = libSource @@ -57,6 +60,7 @@ final class ConstantsProject extends AbstractAndroidProject { lib.withBuildScript { bs -> bs.plugins(androidLib()) bs.android = defaultAndroidLibBlock(true, 'mutual.aid.lib2') + bs.kotlin = Kotlin.DEFAULT bs.dependencies(kotlinStdLib('implementation')) } lib.sources = lib2Source @@ -65,6 +69,7 @@ final class ConstantsProject extends AbstractAndroidProject { lib.withBuildScript { bs -> bs.plugins(androidLib()) bs.android = defaultAndroidLibBlock(true, 'mutual.aid.libstar') + bs.kotlin = Kotlin.DEFAULT bs.dependencies(kotlinStdLib('implementation')) } lib.sources = libstarSource diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/DaggerProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/DaggerProject.groovy index 07849ff30..c138d8f44 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/DaggerProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/DaggerProject.groovy @@ -6,6 +6,7 @@ import com.autonomousapps.kit.GradleProject import com.autonomousapps.kit.Source import com.autonomousapps.kit.SourceType import com.autonomousapps.kit.android.AndroidManifest +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.ProjectAdvice @@ -39,6 +40,7 @@ final class DaggerProject extends AbstractAndroidProject { s.sources = sources s.withBuildScript { bs -> bs.android = defaultAndroidLibBlock(true) + bs.kotlin = Kotlin.DEFAULT bs.plugins(androidLib() + kapt()) bs.dependencies = [ javaxInject('api'), diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingProject.groovy index 5a604943d..8befbcc04 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingProject.groovy @@ -7,6 +7,7 @@ import com.autonomousapps.kit.Source import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -30,9 +31,8 @@ final class DataBindingProject extends AbstractAndroidProject { app.withBuildScript { bs -> bs.plugins = androidApp() bs.android = defaultAndroidAppBlock(true, 'com.example.app') - bs.dependencies( - appcompat('implementation'), - ) + bs.kotlin = Kotlin.DEFAULT + bs.dependencies(appcompat('implementation')) bs.withGroovy('android.buildFeatures.dataBinding true') } app.sources = appSource diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingWithExpressionsProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingWithExpressionsProject.groovy index 08506db88..2fd5e629f 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingWithExpressionsProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/DataBindingWithExpressionsProject.groovy @@ -8,6 +8,7 @@ import com.autonomousapps.kit.SourceType import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidStyleRes import com.autonomousapps.kit.gradle.dependencies.Plugins +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -31,6 +32,7 @@ final class DataBindingWithExpressionsProject extends AbstractAndroidProject { app.withBuildScript { bs -> bs.plugins(androidApp(true)) bs.android = defaultAndroidAppBlock(true, 'com.example.app') + bs.kotlin = Kotlin.DEFAULT bs.dependencies(appcompat("implementation")) bs.withGroovy('android.buildFeatures.dataBinding true') } diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/DebugUsageProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/DebugUsageProject.groovy index 4c1cf295b..5e444caca 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/DebugUsageProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/DebugUsageProject.groovy @@ -5,6 +5,7 @@ package com.autonomousapps.android.projects import com.autonomousapps.kit.GradleProject import com.autonomousapps.kit.Source import com.autonomousapps.kit.gradle.GradleProperties +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.GradleVariantIdentification import com.autonomousapps.model.ProjectAdvice @@ -43,6 +44,7 @@ final class DebugUsageProject extends AbstractAndroidProject { p.withBuildScript { bs -> bs.plugins = androidLib(true) bs.android = defaultAndroidLibBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies( kotlinStdLib, junit('testImplementation'), diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/HasJavaAndKotlinProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/HasJavaAndKotlinProject.groovy index 33a066e9a..b45954017 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/HasJavaAndKotlinProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/HasJavaAndKotlinProject.groovy @@ -4,6 +4,7 @@ package com.autonomousapps.android.projects import com.autonomousapps.kit.GradleProject import com.autonomousapps.kit.Source +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -30,6 +31,7 @@ final class HasJavaAndKotlinProject extends AbstractAndroidProject { a.withBuildScript { bs -> bs.plugins = androidLib(true) bs.android = defaultAndroidLibBlock(true) + bs.kotlin = Kotlin.DEFAULT bs.dependencies( // Used by Kotlin class commonsCollections('api'), diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/KmpAndroidProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/KmpAndroidProject.groovy index 4eb095d79..1e68b5113 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/KmpAndroidProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/KmpAndroidProject.groovy @@ -6,6 +6,7 @@ import com.autonomousapps.kit.GradleProject import com.autonomousapps.kit.Source import com.autonomousapps.kit.SourceType import com.autonomousapps.kit.android.AndroidManifest +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -27,8 +28,9 @@ final class KmpAndroidProject extends AbstractAndroidProject { app.manifest = AndroidManifest.simpleApp() app.sources = sourcesConsumer app.withBuildScript { bs -> - bs.android = defaultAndroidAppBlock() bs.plugins = androidApp(true) + bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies = [ // The artifact that is actually used is foundation-android implementation('androidx.compose.foundation:foundation:1.6.0-alpha06') diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/LeakCanaryProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/LeakCanaryProject.groovy index 71fb1aea1..c039f2a2b 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/LeakCanaryProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/LeakCanaryProject.groovy @@ -6,12 +6,12 @@ import com.autonomousapps.kit.GradleProject import com.autonomousapps.kit.Source import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidStyleRes -import com.autonomousapps.kit.gradle.Dependency -import com.autonomousapps.kit.gradle.dependencies.Plugins +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.* +import static com.autonomousapps.kit.gradle.Dependency.debugImplementation import static com.autonomousapps.kit.gradle.dependencies.Dependencies.appcompat import static com.autonomousapps.kit.gradle.dependencies.Dependencies.kotlinStdLib @@ -30,18 +30,18 @@ final class LeakCanaryProject extends AbstractAndroidProject { private GradleProject build() { return newAndroidGradleProjectBuilder(agpVersion) - .withAndroidSubproject('app') { subproject -> - subproject.sources = appSources() - subproject.styles = AndroidStyleRes.DEFAULT - subproject.colors = AndroidColorRes.DEFAULT - - subproject.withBuildScript { buildScript -> - buildScript.plugins(androidApp()) - buildScript.android = defaultAndroidAppBlock() - buildScript.dependencies( + .withAndroidSubproject('app') { app -> + app.sources = appSources() + app.styles = AndroidStyleRes.DEFAULT + app.colors = AndroidColorRes.DEFAULT + app.withBuildScript { bs -> + bs.plugins(androidApp()) + bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT + bs.dependencies( kotlinStdLib('implementation'), appcompat('implementation'), - new Dependency('debugImplementation', "com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY_VERSION"), + debugImplementation("com.squareup.leakcanary:leakcanary-android:$LEAK_CANARY_VERSION"), ) } } diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/ResProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/ResProject.groovy index a5e929af6..8b1418d71 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/ResProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/ResProject.groovy @@ -8,6 +8,7 @@ import com.autonomousapps.kit.SourceType import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -38,6 +39,7 @@ final class ResProject extends AbstractAndroidProject { app.withBuildScript { bs -> bs.plugins(androidApp()) bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies( project('implementation', ':lib'), project('implementation', ':lib2'), @@ -49,15 +51,15 @@ final class ResProject extends AbstractAndroidProject { app.styles = AndroidStyleRes.DEFAULT app.colors = AndroidColorRes.DEFAULT app.withFile('src/main/res/layout/message_layout.xml', '''\ - - - - '''.stripIndent() + + + + '''.stripIndent() ) } .withAndroidLibProject('lib') { lib -> diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/ServiceLoaderProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/ServiceLoaderProject.groovy index aa0aa4793..268265790 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/ServiceLoaderProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/ServiceLoaderProject.groovy @@ -9,6 +9,7 @@ import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidLayout import com.autonomousapps.kit.android.AndroidStyleRes import com.autonomousapps.kit.gradle.Dependency +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.Advice import com.autonomousapps.model.ProjectAdvice @@ -35,14 +36,15 @@ final class ServiceLoaderProject extends AbstractAndroidProject { @SuppressWarnings('DuplicatedCode') private GradleProject build() { return newAndroidGradleProjectBuilder(agpVersion) - .withAndroidSubproject('app') { a -> - a.sources = sources - a.styles = AndroidStyleRes.DEFAULT - a.colors = AndroidColorRes.DEFAULT - a.layouts = layouts - a.withBuildScript { bs -> + .withAndroidSubproject('app') { app -> + app.sources = sources + app.styles = AndroidStyleRes.DEFAULT + app.colors = AndroidColorRes.DEFAULT + app.layouts = layouts + app.withBuildScript { bs -> bs.plugins = androidApp(true) bs.android = defaultAndroidAppBlock() + bs.kotlin = Kotlin.DEFAULT bs.dependencies = dependencies } } diff --git a/src/functionalTest/groovy/com/autonomousapps/android/projects/ViewBindingProject.groovy b/src/functionalTest/groovy/com/autonomousapps/android/projects/ViewBindingProject.groovy index a22fbd71e..794e5bd71 100644 --- a/src/functionalTest/groovy/com/autonomousapps/android/projects/ViewBindingProject.groovy +++ b/src/functionalTest/groovy/com/autonomousapps/android/projects/ViewBindingProject.groovy @@ -7,6 +7,7 @@ import com.autonomousapps.kit.Source import com.autonomousapps.kit.android.AndroidColorRes import com.autonomousapps.kit.android.AndroidManifest import com.autonomousapps.kit.android.AndroidStyleRes +import com.autonomousapps.kit.gradle.kotlin.Kotlin import com.autonomousapps.model.ProjectAdvice import static com.autonomousapps.AdviceHelper.actualProjectAdvice @@ -30,9 +31,8 @@ final class ViewBindingProject extends AbstractAndroidProject { app.withBuildScript { bs -> bs.plugins = androidApp() bs.android = defaultAndroidAppBlock(true, 'com.example.app') - bs.dependencies( - appcompat('implementation'), - ) + bs.kotlin = Kotlin.DEFAULT + bs.dependencies(appcompat('implementation')) bs.withGroovy('android.buildFeatures.viewBinding true') } app.sources = appSource