diff --git a/CHANGELOG.md b/CHANGELOG.md index 81baee8..a71bd73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ Change Log ========== +Version 2.2.0 +--- + +* Updating utilities. + Version 2.1.0 --- diff --git a/android-resource-api/build.gradle b/android-resource-api/build.gradle index 6a8e770..02c3cf3 100644 --- a/android-resource-api/build.gradle +++ b/android-resource-api/build.gradle @@ -1,18 +1,9 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) } dependencies { api project(":resource-api") - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - testImplementation "com.likethesalad.tools.testing:unit-testing:$testingUtilities_version" -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" + testImplementation libs.unitTesting + testImplementation libs.kotlin.reflect } \ No newline at end of file diff --git a/android-resource-collector/build.gradle b/android-resource-collector/build.gradle index 4029852..69c9c17 100644 --- a/android-resource-collector/build.gradle +++ b/android-resource-collector/build.gradle @@ -1,25 +1,24 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) id 'kotlin-kapt' } dependencies { api project(':resource-collector') - implementation "com.likethesalad.tools:android-tools-plugin:$androidTools_version" implementation project(':android-resource-api') - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compileOnly "com.google.dagger:dagger:$dagger_version" - kapt "com.google.dagger:dagger-compiler:$dagger_version" - testImplementation "com.likethesalad.tools.testing:unit-testing:$testingUtilities_version" + implementation libs.androidCompatApi + embedded libs.dagger + kapt libs.dagger.compiler + testImplementation libs.unitTesting testImplementation gradleApi() } -compileKotlin { - kotlinOptions.jvmTarget = "1.8" +shadowExtension { + relocate("dagger", "${group}.resourcecollector.dagger") } -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" + +libConventions { + setJavaVersion("11") } kapt { diff --git a/android-resource-locator-test/build.gradle b/android-resource-locator-test/build.gradle index 3e7a8b6..36da5ae 100644 --- a/android-resource-locator-test/build.gradle +++ b/android-resource-locator-test/build.gradle @@ -1,18 +1,17 @@ plugins { + alias(libs.plugins.java.library) + alias(libs.plugins.androidTestTools) id 'java-gradle-plugin' - id 'org.jetbrains.kotlin.jvm' } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation project(':string-android-resource-locator') - compileOnly("com.android.tools.build:gradle:3.3.3") - compileOnly "com.google.dagger:dagger:$dagger_version" - testImplementation "com.likethesalad.tools.testing:android-gradle:$testingUtilities_version" + testPluginClasspath "com.android.tools.build:gradle:7.4.0" + testPluginClasspath libs.dagger } -tasks.withType(PluginUnderTestMetadata).configureEach { - pluginClasspath.from(configurations.compileOnly) +libConventions { + setJavaVersion("11") } gradlePlugin { @@ -22,14 +21,6 @@ gradlePlugin { implementationClass = 'com.likethesalad.tools.resource.locator.android.test.TestAndroidResourceLocatorPlugin' } } - automatedPublishing = false -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" } artifactPublisherTarget { diff --git a/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/TestAndroidResourceLocatorPluginTest.kt b/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/TestAndroidResourceLocatorPluginTest.kt index 9fc644f..06e5776 100644 --- a/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/TestAndroidResourceLocatorPluginTest.kt +++ b/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/TestAndroidResourceLocatorPluginTest.kt @@ -1,26 +1,29 @@ package com.likethesalad.tools.resource.locator.android.test import com.google.common.truth.Truth -import com.likethesalad.tools.functional.testing.AndroidProjectTest -import com.likethesalad.tools.functional.testing.app.content.ValuesResFoldersPlacer -import com.likethesalad.tools.functional.testing.app.layout.AndroidAppProjectDescriptor -import com.likethesalad.tools.functional.testing.app.layout.GradleBlockItem -import com.likethesalad.tools.functional.testing.app.layout.items.DefaultConfigAndroidBlockItem -import com.likethesalad.tools.functional.testing.app.layout.items.FlavorAndroidBlockItem -import com.likethesalad.tools.functional.testing.layout.AndroidLibProjectDescriptor -import com.likethesalad.tools.functional.testing.layout.ProjectDescriptor +import com.likethesalad.tools.functional.testing.AndroidTestProject +import com.likethesalad.tools.functional.testing.android.blocks.DefaultConfigAndroidBlockItem +import com.likethesalad.tools.functional.testing.android.blocks.FlavorAndroidBlockItem +import com.likethesalad.tools.functional.testing.android.descriptor.AndroidAppProjectDescriptor +import com.likethesalad.tools.functional.testing.android.descriptor.AndroidLibProjectDescriptor +import com.likethesalad.tools.functional.testing.blocks.GradleBlockItem +import com.likethesalad.tools.functional.testing.blocks.impl.plugins.GradlePluginDeclaration import com.likethesalad.tools.functional.testing.utils.TestAssetsProvider import com.likethesalad.tools.resource.locator.android.test.data.PluginGradleBlockItem import org.gradle.testkit.runner.BuildResult +import org.junit.Rule import org.junit.Test +import org.junit.rules.TemporaryFolder import java.io.File -class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { +class TestAndroidResourceLocatorPluginTest { - private val testsDirName = "test" private val locatorPrefix = "prefix" - private val inputAssetsProvider = TestAssetsProvider(testsDirName, "inputs") - private val outputAssetsProvider = TestAssetsProvider(testsDirName, "outputs") + private val inputAssetsProvider = TestAssetsProvider("inputs") + private val outputAssetsProvider = TestAssetsProvider("outputs") + + @get:Rule + val temporaryFolder = TemporaryFolder() @Test fun `Check gathering strings from single variant and single file`() { @@ -35,54 +38,48 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { @Test fun `Check gathering strings from single variant and single file twice`() { val variantNames = listOf("debug") - val inOutDirName = "basic-repeated" - val descriptor = createAppProjectDescriptor(inOutDirName) - val inputDir = getInputTestAsset(inOutDirName) - descriptor.projectDirectoryBuilder.register(ValuesResFoldersPlacer(inputDir)) + val projectName = "basic-repeated" + val descriptor = createAppProjectDescriptor(projectName) val commandList = variantNamesToTaskCommands(variantNames) + val project = AndroidTestProject(getTempFile()) - createProject(descriptor) - val result1 = buildProject(commandList, inOutDirName) + project.addSubproject(descriptor) + val result1 = project.runGradle(projectName, commandList) - verifyVariantResults(variantNames, inOutDirName, inOutDirName) + verifyVariantResults(variantNames, projectName, projectName) verifyResultContainsLine(result1, "> Task :basic-repeated:prefixTestDebugResourceLocator") // Second time - val result2 = buildProject(commandList, inOutDirName) + val result2 = project.runGradle(projectName, commandList) - verifyVariantResults(variantNames, inOutDirName, inOutDirName) + verifyVariantResults(variantNames, projectName, projectName) verifyResultContainsLine(result2, "> Task :basic-repeated:prefixTestDebugResourceLocator UP-TO-DATE") } @Test fun `Check gathering strings from single variant and single file twice after changes to inputs`() { val variantNames = listOf("debug") - val inOutDirName = "basic-repeated-changed" - val descriptor = createAppProjectDescriptor(inOutDirName) - val inputDir = getInputTestAsset(inOutDirName) - val resFoldersPlacer = ValuesResFoldersPlacer(inputDir) - descriptor.projectDirectoryBuilder.register(resFoldersPlacer) + val projectName = "basic-repeated-changed" + val descriptor = createAppProjectDescriptor(projectName) val commandList = variantNamesToTaskCommands(variantNames) + val project = AndroidTestProject(getTempFile()) - createProject(descriptor) - val result1 = buildProject(commandList, inOutDirName) + project.addSubproject(descriptor) + val result1 = project.runGradle(projectName, commandList) - verifyVariantResults(variantNames, inOutDirName, inOutDirName) + verifyVariantResults(variantNames, projectName, projectName) verifyResultContainsLine(result1, "> Task :basic-repeated-changed:prefixTestDebugResourceLocator") // Second time - val dirNames2 = "basic-repeated-changed2" - val descriptor2 = createAppProjectDescriptor(inOutDirName) - val inputDir2 = getInputTestAsset(dirNames2) - descriptor2.projectDirectoryBuilder.register(ValuesResFoldersPlacer(inputDir2)) - val projectDir = getProjectDir(inOutDirName) - resFoldersPlacer.getFilesCreated().forEach { it.delete() } - descriptor2.projectDirectoryBuilder.buildDirectory(projectDir) + val inputDirName2 = "basic-repeated-changed2" + val secondInputDir = getInputTestAsset(inputDirName2) + val projectSrcDir = getTempFile(projectName, "src") + copyContents(secondInputDir, projectSrcDir) - val result2 = buildProject(commandList, inOutDirName) + val result2 = project.runGradle(projectName, commandList) - verifyVariantResults(variantNames, inOutDirName, dirNames2) + verifyVariantResults(variantNames, projectName, inputDirName2) verifyResultContainsLine(result2, "> Task :basic-repeated-changed:prefixTestDebugResourceLocator") } @@ -91,27 +88,23 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { val variantNames = listOf("debug") val inOutDirName = "multiplelanguages-changed" val descriptor = createAppProjectDescriptor(inOutDirName) - val inputDir = getInputTestAsset(inOutDirName) - val resFoldersPlacer = ValuesResFoldersPlacer(inputDir) - descriptor.projectDirectoryBuilder.register(resFoldersPlacer) val commandList = variantNamesToTaskCommands(variantNames) + val project = AndroidTestProject(getTempFile()) - createProject(descriptor) - val result1 = buildProject(commandList, inOutDirName) + project.addSubproject(descriptor) + val result1 = project.runGradle(inOutDirName, commandList) verifyVariantResults(variantNames, inOutDirName, inOutDirName) verifyResultContainsLine(result1, "> Task :multiplelanguages-changed:prefixTestDebugResourceLocator") // Second time val dirNames2 = "multiplelanguages-changed2" - val descriptor2 = createAppProjectDescriptor(inOutDirName) val inputDir2 = getInputTestAsset(dirNames2) - descriptor2.projectDirectoryBuilder.register(ValuesResFoldersPlacer(inputDir2)) - val projectDir = getProjectDir(inOutDirName) - resFoldersPlacer.getFilesCreated().forEach { it.delete() } - descriptor2.projectDirectoryBuilder.buildDirectory(projectDir) + val projectSrcDir = getTempFile(inOutDirName, "src") + removeMatchingFiles(getInputTestAsset(inOutDirName), projectSrcDir) + copyContents(inputDir2, projectSrcDir) - val result2 = buildProject(commandList, inOutDirName) + val result2 = project.runGradle(inOutDirName, commandList) verifyVariantResults(variantNames, inOutDirName, dirNames2) verifyResultContainsLine(result2, "> Task :multiplelanguages-changed:prefixTestDebugResourceLocator") @@ -123,7 +116,7 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { val generatedStrings = mapOf("android_generated" to "This string was generated using Androids build plugin") val appDescriptor = createAppProjectDescriptor( inOutDirName, - listOf( + blockItems = listOf( DefaultConfigAndroidBlockItem(generatedStrings) ) ) @@ -150,7 +143,7 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { flavors.add(FlavorAndroidBlockItem.FlavorDescriptor("environment", environmentFlavors)) val flavoredDescriptor = createAppProjectDescriptor( inOutDirName, - listOf(FlavorAndroidBlockItem(flavors)) + blockItems = listOf(FlavorAndroidBlockItem(flavors)) ) runInputOutputComparisonTest( @@ -169,10 +162,9 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { fun `Verify app that takes resources from libraries`() { // Create library val libName = "mylibrary" - val libDescriptor = AndroidLibProjectDescriptor(libName) - libDescriptor.projectDirectoryBuilder - .register(ValuesResFoldersPlacer(getInputTestAsset(libName))) - createProject(libDescriptor) + val libDescriptor = createLibProjectDescriptor(libName) + val project = AndroidTestProject(getTempFile()) + project.addSubproject(libDescriptor) // Set up app val appName = "with-library" @@ -180,18 +172,18 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { appName, dependencies = listOf("implementation project(':$libName')"), ) + project.addSubproject(appDescriptor) - runInputOutputComparisonTest(appName, listOf("debug"), appDescriptor) + runInputOutputComparisonTest(project, appName, listOf("debug")) } @Test fun `Taking namespaced strings from libraries`() { // Create library val libName = "mylibrary_namespaced" - val libDescriptor = AndroidLibProjectDescriptor(libName) - libDescriptor.projectDirectoryBuilder - .register(ValuesResFoldersPlacer(getInputTestAsset(libName))) - createProject(libDescriptor) + val libDescriptor = createLibProjectDescriptor(libName) + val project = AndroidTestProject(getTempFile()) + project.addSubproject(libDescriptor) // Set up app val appName = "with-library-namespaced" @@ -199,22 +191,20 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { appName, dependencies = listOf("implementation project(':$libName')"), ) + project.addSubproject(appDescriptor) - runInputOutputComparisonTest(appName, listOf("debug"), appDescriptor) + runInputOutputComparisonTest(project, appName, listOf("debug")) } @Test fun `Verify app that takes resources from more than one library`() { val libName = "mylibrary-of-libraries" val libName2 = "mylibrary2-of-libraries" - val libDescriptor = AndroidLibProjectDescriptor(libName) - val libDescriptor2 = AndroidLibProjectDescriptor(libName2) - libDescriptor.projectDirectoryBuilder - .register(ValuesResFoldersPlacer(getInputTestAsset(libName))) - createProject(libDescriptor) - libDescriptor2.projectDirectoryBuilder - .register(ValuesResFoldersPlacer(getInputTestAsset(libName2))) - createProject(libDescriptor2) + val libDescriptor = createLibProjectDescriptor(libName) + val libDescriptor2 = createLibProjectDescriptor(libName2) + val project = AndroidTestProject(getTempFile()) + project.addSubproject(libDescriptor) + project.addSubproject(libDescriptor2) // Set up app val appName = "with-libraries" @@ -225,32 +215,50 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { "implementation project(':$libName2')" ) ) + project.addSubproject(appDescriptor) - runInputOutputComparisonTest(appName, listOf("debug"), appDescriptor) + runInputOutputComparisonTest(project, appName, listOf("debug")) } private fun runInputOutputComparisonTest( - inOutDirName: String, + projectName: String, variantNames: List, descriptor: AndroidAppProjectDescriptor = createAppProjectDescriptor( - inOutDirName + projectName ) ) { - val inputDir = getInputTestAsset(inOutDirName) - descriptor.projectDirectoryBuilder.register(ValuesResFoldersPlacer(inputDir)) + val project = AndroidTestProject(getTempFile()) + project.addSubproject(descriptor) + runInputOutputComparisonTest(project, projectName, variantNames) + } - createProjectAndRunResourceLocatorTasks(descriptor, variantNames) + private fun runInputOutputComparisonTest( + project: AndroidTestProject, + projectName: String, + variantNames: List, + ) { + runResourceLocatorTasks(project, projectName, variantNames) - verifyVariantResults(variantNames, inOutDirName, inOutDirName) + verifyVariantResults(variantNames, projectName, projectName) } private fun createAppProjectDescriptor( - inOutDirName: String, + name: String, + inputDir: File = getInputTestAsset(name), blockItems: List = emptyList(), dependencies: List = emptyList() ): AndroidAppProjectDescriptor { - val gradleItems = listOf(PluginGradleBlockItem(locatorPrefix)) + blockItems - return AndroidAppProjectDescriptor(inOutDirName, getPluginId(), gradleItems, dependencies) + val gradleItems: List = listOf(PluginGradleBlockItem(locatorPrefix)) + blockItems + val descriptor = AndroidAppProjectDescriptor(name, inputDir, gradleItems) + descriptor.pluginsBlock.addPlugin(GradlePluginDeclaration(getPluginId())) + dependencies.forEach { + descriptor.dependenciesBlock.addDependency(it) + } + return descriptor + } + + private fun createLibProjectDescriptor(libName: String): AndroidLibProjectDescriptor { + return AndroidLibProjectDescriptor(libName, getInputTestAsset(libName)) } private fun variantNamesToTaskCommands(variantNames: List): List { @@ -272,7 +280,7 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { variantName: String ) { val taskName = variantNameToTaskName(variantName) - val projectDir = getProjectDir(projectName) + val projectDir = getTempFile(projectName) val resultDir = File(projectDir, "build/intermediates/incremental/$taskName") Truth.assertThat(resultDir.exists()).isTrue() verifyDirsContentsAreEqual(getExpectedOutputDir(outputDirName, taskName), resultDir) @@ -316,24 +324,31 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { Truth.assertThat(fileWithSameName.readText()).isEqualTo(file.readText()) } - private fun createProjectAndRunResourceLocatorTasks( - projectDescriptor: ProjectDescriptor, + private fun runResourceLocatorTasks( + project: AndroidTestProject, + projectName: String, variantNames: List ): BuildResult { val taskNames = variantNamesToTaskCommands(variantNames) - return createProjectAndBuild(projectDescriptor, taskNames) + return project.runGradle(projectName, taskNames) + } + + private fun getTempFile(vararg paths: String): File { + return if (paths.isEmpty()) { + temporaryFolder.root + } else { + File(temporaryFolder.root, paths.joinToString("/")) + } } private fun getInputTestAsset(inputDirName: String): File { - return inputAssetsProvider.getAssetFile(inputDirName) + return inputAssetsProvider.getFile(inputDirName) } private fun getOutputTestAsset(outputDirName: String): File { - return outputAssetsProvider.getAssetFile(outputDirName) + return outputAssetsProvider.getFile(outputDirName) } - override fun getGradleVersion(): String = "5.6.4" - private fun getPluginId(): String { return "android-resources-locator-test" } @@ -341,4 +356,25 @@ class TestAndroidResourceLocatorPluginTest : AndroidProjectTest() { private fun getLocatorId(): String { return "test" } + + private fun verifyResultContainsLine(result: BuildResult, line: String) { + val lines = result.output.lines() + Truth.assertThat(lines).contains(line) + } + + private fun verifyResultContainsText(result: BuildResult, text: String) { + Truth.assertThat(result.output).contains(text) + } + + private fun copyContents(fromDir: File, intoDir: File) { + fromDir.copyRecursively(intoDir, true) + } + + private fun removeMatchingFiles(referenceDir: File, targetDir: File) { + referenceDir.walkTopDown().forEach { + if (it.isFile) { + File(targetDir, it.toRelativeString(referenceDir)).delete() + } + } + } } \ No newline at end of file diff --git a/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/data/PluginGradleBlockItem.kt b/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/data/PluginGradleBlockItem.kt index e490214..300f18b 100644 --- a/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/data/PluginGradleBlockItem.kt +++ b/android-resource-locator-test/src/test/java/com/likethesalad/tools/resource/locator/android/test/data/PluginGradleBlockItem.kt @@ -1,6 +1,6 @@ package com.likethesalad.tools.resource.locator.android.test.data -import com.likethesalad.tools.functional.testing.app.layout.GradleBlockItem +import com.likethesalad.tools.functional.testing.blocks.GradleBlockItem class PluginGradleBlockItem(private val locatorName: String) : GradleBlockItem { diff --git a/android-resource-locator/build.gradle b/android-resource-locator/build.gradle index 8967c7f..5394e1d 100644 --- a/android-resource-locator/build.gradle +++ b/android-resource-locator/build.gradle @@ -1,6 +1,5 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) id 'kotlin-kapt' } @@ -9,20 +8,21 @@ dependencies { api project(":android-resource-api") api project(":android-resource-collector") api project(':android-resource-serializer') - api "com.likethesalad.tools:android-tools-plugin:$androidTools_version" - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "com.google.code.gson:gson:$gson_version" - compileOnly "com.google.dagger:dagger:$dagger_version" - kapt "com.google.dagger:dagger-compiler:$dagger_version" - testImplementation "com.likethesalad.tools.testing:unit-testing:$testingUtilities_version" + api libs.pluginTools + implementation libs.gson + embedded libs.dagger + kapt libs.dagger.compiler + testImplementation libs.unitTesting } -compileKotlin { - kotlinOptions.jvmTarget = "1.8" +shadowExtension { + relocate("dagger", "${group}.resourcelocator.dagger") } -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" + +libConventions { + setJavaVersion("11") } + kapt { correctErrorTypes = true } \ No newline at end of file diff --git a/android-resource-locator/src/main/java/com/likethesalad/tools/resource/locator/android/AndroidResourceLocatorPlugin.kt b/android-resource-locator/src/main/java/com/likethesalad/tools/resource/locator/android/AndroidResourceLocatorPlugin.kt index 22a0436..60bd6e9 100644 --- a/android-resource-locator/src/main/java/com/likethesalad/tools/resource/locator/android/AndroidResourceLocatorPlugin.kt +++ b/android-resource-locator/src/main/java/com/likethesalad/tools/resource/locator/android/AndroidResourceLocatorPlugin.kt @@ -1,10 +1,9 @@ package com.likethesalad.tools.resource.locator.android +import com.likethesalad.plugins.agpbrigde.base.AndroidBridgePluginConsumer import com.likethesalad.resource.serializer.android.AndroidResourceSerializer import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension import com.likethesalad.tools.agpcompat.api.bridges.AndroidVariantData -import com.likethesalad.tools.android.plugin.AndroidToolsPlugin -import com.likethesalad.tools.android.plugin.extension.AndroidToolsPluginExtension import com.likethesalad.tools.resource.collector.android.AndroidResourceCollector import com.likethesalad.tools.resource.collector.android.data.variant.VariantTree import com.likethesalad.tools.resource.collector.android.di.CollectorComponent @@ -23,42 +22,31 @@ import com.likethesalad.tools.resource.locator.android.extension.resources.DirLa import com.likethesalad.tools.resource.locator.android.providers.InstancesProvider import com.likethesalad.tools.resource.locator.android.providers.TaskFinder import com.likethesalad.tools.resource.locator.android.task.ResourceLocatorTask -import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.file.Directory import org.gradle.api.provider.Provider import java.io.File import java.util.concurrent.Callable -abstract class AndroidResourceLocatorPlugin : Plugin, TaskFinder, InstancesProvider { +abstract class AndroidResourceLocatorPlugin : AndroidBridgePluginConsumer(), TaskFinder, InstancesProvider { private lateinit var project: Project private val serializer by lazy { AndroidResourceSerializer() } internal lateinit var androidExtension: AndroidExtension override fun apply(project: Project) { + super.apply(project) this.project = project - val androidToolsPluginExtension = findAndroidToolsPluginExtension() - androidExtension = androidToolsPluginExtension.androidExtension + androidExtension = androidBridge.androidExtension ResourceLocatorComponentProvider.init(this) val component = ResourceLocatorComponentProvider.getComponent() val resourceLocatorExtension = createExtension(project, component) - androidToolsPluginExtension.onVariant { variant -> + androidBridge.onVariant { variant -> createResourceLocatorTasksForVariant(variant, resourceLocatorExtension) } } - private fun findAndroidToolsPluginExtension(): AndroidToolsPluginExtension { - val toolsPluginExtension = project.extensions.findByType(AndroidToolsPluginExtension::class.java) - if (toolsPluginExtension == null) { - project.plugins.apply(AndroidToolsPlugin::class.java) - return project.extensions.getByType(AndroidToolsPluginExtension::class.java) - } - - return toolsPluginExtension - } - private fun createExtension( project: Project, component: ResourceLocatorComponent diff --git a/android-resource-serializer/build.gradle b/android-resource-serializer/build.gradle index fa32f61..15ed0c4 100644 --- a/android-resource-serializer/build.gradle +++ b/android-resource-serializer/build.gradle @@ -1,19 +1,10 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) } dependencies { api project(':resource-serializer') implementation project(':android-resource-api') - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "com.google.code.gson:gson:$gson_version" - testImplementation "com.likethesalad.tools.testing:unit-testing:$testingUtilities_version" -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" + implementation libs.gson + testImplementation libs.unitTesting } \ No newline at end of file diff --git a/build.gradle b/build.gradle index e176773..0fced45 100644 --- a/build.gradle +++ b/build.gradle @@ -1,27 +1,5 @@ -buildscript { - ext { - kotlin_version = '1.5.10' - } - repositories { - mavenCentral() - google() - gradlePluginPortal() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.likethesalad.tools:artifact-publisher:1.1.0' - classpath 'com.likethesalad.dagger:remapper-plugin:1.0.1' - } -} -apply plugin: 'artifact-publisher' -apply plugin: 'com.likethesalad.dagger-remapper' - -ext { - dagger_version = '2.39.1' - gson_version = '2.8.7' - testingUtilities_version = '1.0.5' - androidTools_version = '1.4.0' +plugins { + alias(libs.plugins.artifactPublisher) } artifactPublisher { @@ -31,14 +9,4 @@ artifactPublisher { issueTrackerUrl = "https://github.com/LikeTheSalad/resource-locator/issues" } -group 'com.likethesalad.tools.resources' -version '2.1.0' -description 'Plugin that gathers resources from Android projects for compilation purposes.' - -subprojects { - repositories { - mavenLocal() - mavenCentral() - google() - } -} \ No newline at end of file +description 'Plugin that gathers resources from Android projects for compilation purposes.' \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 29e08e8..f4537c4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,4 @@ -kotlin.code.style=official \ No newline at end of file +kotlin.code.style=official +kotlin.version=1.9.22 +group=com.likethesalad.tools.resources +version=2.2.0 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..5237531 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,17 @@ +[versions] +dagger = "2.50" +project-utilities = "3.1.0" + +[libraries] +dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" } +dagger-compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" } +gson = "com.google.code.gson:gson:2.8.7" +unitTesting = { module = "com.likethesalad.tools:unit-testing", version.ref = "project-utilities" } +androidCompatApi = { module = "com.likethesalad.tools:agp-compatibility-api", version.ref = "project-utilities" } +pluginTools = { module = "com.likethesalad.tools:plugin-tools", version.ref = "project-utilities" } +kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } + +[plugins] +java-library = { id = "com.likethesalad.tools.java-library", version.ref = "project-utilities" } +artifactPublisher = { id = "com.likethesalad.artifact-publisher", version = "3.0.0" } +androidTestTools = { id = "com.likethesalad.tools.android-compilation-testing", version.ref = "project-utilities" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index be52383..068cdb2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/resource-api/build.gradle b/resource-api/build.gradle index 30b78af..6bf17b1 100644 --- a/resource-api/build.gradle +++ b/resource-api/build.gradle @@ -1,15 +1,3 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" + alias(libs.plugins.java.library) } \ No newline at end of file diff --git a/resource-collector/build.gradle b/resource-collector/build.gradle index abbaf69..3d88031 100644 --- a/resource-collector/build.gradle +++ b/resource-collector/build.gradle @@ -1,16 +1,7 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) } dependencies { implementation project(":resource-api") - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" } \ No newline at end of file diff --git a/resource-serializer/build.gradle b/resource-serializer/build.gradle index 061abdc..8019f11 100644 --- a/resource-serializer/build.gradle +++ b/resource-serializer/build.gradle @@ -1,16 +1,7 @@ plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' + alias(libs.plugins.java.library) } dependencies { api project(':resource-api') - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" } diff --git a/settings.gradle b/settings.gradle index 24e7dc3..ec0006d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,44 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + mavenCentral() + google() + } + resolutionStrategy { + eachPlugin { + def pluginId = it.requested.id.id + if (pluginId == "com.likethesalad.artifact-publisher") { + useModule("com.likethesalad.tools:artifact-publisher:${it.requested.version}") + } + if (it.requested.id.namespace == "com.likethesalad.tools") { + useModule("com.likethesalad.tools:plugin-tools:${it.requested.version}") + } + } + } +} +dependencyResolutionManagement { + versionCatalogs { + libs { + version('kotlin', getProperty("kotlin.version")) + } + } + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenLocal() + mavenCentral() + google() + } +} +buildscript { + repositories { + gradlePluginPortal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getProperty("kotlin.version")}" + } +} rootProject.name = 'resource-locator' include ':android-resource-locator' include ":resource-collector" diff --git a/string-android-resource-locator/build.gradle b/string-android-resource-locator/build.gradle index dc399ae..ef77caa 100644 --- a/string-android-resource-locator/build.gradle +++ b/string-android-resource-locator/build.gradle @@ -1,13 +1,15 @@ plugins { + alias(libs.plugins.java.library) id 'java-gradle-plugin' - id 'org.jetbrains.kotlin.jvm' - id 'kotlin-kapt' } dependencies { api project(":android-resource-locator") - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - testImplementation "com.likethesalad.tools.testing:unit-testing:$testingUtilities_version" + testImplementation libs.unitTesting +} + +libConventions { + setJavaVersion("11") } gradlePlugin { @@ -17,12 +19,4 @@ gradlePlugin { implementationClass = 'com.likethesalad.android.string.resources.locator.StringResourceLocatorPlugin' } } - automatedPublishing = false -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" }