Skip to content

Commit c3e3a8e

Browse files
authored
Merge pull request #36 from LikeTheSalad/release/2.3.0
Release/2.3.0
2 parents 293e19b + 2341668 commit c3e3a8e

File tree

31 files changed

+453
-60
lines changed

31 files changed

+453
-60
lines changed

Diff for: .gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
build
22
.idea
33
.gradle
4-
out
4+
out
5+
local.properties

Diff for: CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
Change Log
22
==========
33

4+
Version 2.3.0 *(07-01-2023)*
5+
---
6+
7+
* Made Stem aware of extractDeeplinks task
8+
* Improving AGP 7.3+ sourceSet set up
9+
* Improving tests
10+
* Clean up deprecated code
11+
412
Version 2.2.3 *(09-10-2022)*
513
---
614

Diff for: README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ First, in your `Root's build.gradle` file, you'll need to add this
347347
line into your `buildscript` dependencies block:
348348

349349
```groovy
350-
classpath "com.likethesalad.android:stem-plugin:2.2.3"
350+
classpath "com.likethesalad.android:stem-plugin:2.3.0"
351351
```
352352

353353
Example:
@@ -360,7 +360,7 @@ buildscript {
360360
}
361361
dependencies {
362362
//...
363-
classpath "com.likethesalad.android:stem-plugin:2.2.3"
363+
classpath "com.likethesalad.android:stem-plugin:2.3.0"
364364
365365
// NOTE: Do not place your application dependencies here; they belong
366366
// in the individual module build.gradle files

Diff for: build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ artifactPublisher {
3030

3131
description = "This is a Gradle plugin for Android applications which resolves XML string references in other XML strings."
3232
group = 'com.likethesalad.android'
33-
version = '2.2.3'
33+
version = '2.3.0'
3434

3535
ext {
3636
dagger_version = '2.39.1'
3737
androidBuild_version = '7.1.0'
3838
testingUtilities_version = '1.0.8'
39-
resourceLocator_version = '2.0.0'
40-
androidTools_version = "1.2.0"
39+
resourceLocator_version = '2.0.1'
40+
androidTools_version = "1.3.0"
4141
androidBuild_test_version = '7.1.0'
4242
}
4343

Diff for: common-tools/src/main/java/com/likethesalad/android/templates/common/tasks/identifier/TemplatesIdentifierTask.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.likethesalad.android.templates.common.tasks.identifier
22

33
import com.likethesalad.android.templates.common.tasks.BaseTask
44
import com.likethesalad.android.templates.common.tasks.identifier.action.TemplatesIdentifierAction
5+
import com.likethesalad.android.templates.common.utils.upperFirst
56
import com.likethesalad.tools.resource.locator.android.extension.configuration.data.ResourcesProvider
67
import org.gradle.api.file.DirectoryProperty
78
import org.gradle.api.file.RegularFileProperty
@@ -17,7 +18,7 @@ open class TemplatesIdentifierTask @Inject constructor(private val args: Args) :
1718
private const val TEMPLATES_IDENTIFIER_NAME_FORMAT = "templates%sIdentifier"
1819

1920
fun generateTaskName(variantName: String): String {
20-
return TEMPLATES_IDENTIFIER_NAME_FORMAT.format(variantName.capitalize())
21+
return TEMPLATES_IDENTIFIER_NAME_FORMAT.format(variantName.upperFirst())
2122
}
2223
}
2324

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.likethesalad.android.templates.common.utils
2+
3+
import java.util.Locale
4+
5+
fun String.upperFirst(): String {
6+
return this.replaceFirstChar {
7+
if (it.isLowerCase()) it.titlecase(
8+
Locale.US
9+
) else it.toString()
10+
}
11+
}

Diff for: stem-plugin/src/functionalTest/kotlin/com/likethesalad/stem/CheckOutputsTest.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.likethesalad.stem
22

33
import com.google.common.truth.Truth
4+
import com.likethesalad.android.templates.common.utils.upperFirst
45
import com.likethesalad.stem.testtools.StemConfigBlock
6+
import com.likethesalad.stem.testtools.TestConstants.GRADLE_VERSION
57
import com.likethesalad.tools.functional.testing.AndroidProjectTest
68
import com.likethesalad.tools.functional.testing.app.layout.AndroidAppProjectDescriptor
79
import com.likethesalad.tools.functional.testing.app.layout.AndroidBlockItem
@@ -21,7 +23,6 @@ class CheckOutputsTest : AndroidProjectTest() {
2123
companion object {
2224
private const val RESOLVER_PLUGIN_ID = "com.likethesalad.stem"
2325
private const val PROVIDER_PLUGIN_ID = "com.likethesalad.stem-library"
24-
private const val GRADLE_VERSION = "7.2"
2526
private val ANDROID_PLUGIN_VERSION = System.getProperty("agpVersion")
2627
}
2728

@@ -368,7 +369,7 @@ class CheckOutputsTest : AndroidProjectTest() {
368369
}
369370

370371
private fun variantNamesToResolveCommands(variantNames: List<String>) =
371-
variantNames.map { "merge${it.capitalize()}Resources" }
372+
variantNames.map { "merge${it.upperFirst()}Resources" }
372373

373374
private fun getInputTestAsset(inputDirName: String): File {
374375
return inputAssetsProvider.getAssetFile(inputDirName)

Diff for: stem-plugin/src/functionalTest/kotlin/com/likethesalad/stem/provider/TemplatesProviderPluginTest.kt

+3-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.likethesalad.android.templates.common.tasks.identifier.data.TemplateI
66
import com.likethesalad.android.templates.provider.api.TemplatesProvider
77
import com.likethesalad.android_templates.provider.plugin.generated.BuildConfig
88
import com.likethesalad.stem.testtools.StemConfigBlock
9+
import com.likethesalad.stem.testtools.TestConstants.GRADLE_VERSION
910
import com.likethesalad.stem.utils.TemplatesProviderLoader
1011
import com.likethesalad.tools.functional.testing.AndroidProjectTest
1112
import com.likethesalad.tools.functional.testing.layout.AndroidLibProjectDescriptor
@@ -19,10 +20,6 @@ import java.io.File
1920

2021
class TemplatesProviderPluginTest : AndroidProjectTest() {
2122

22-
companion object {
23-
private const val ANDROID_PLUGIN_VERSION = "7.1.0"
24-
}
25-
2623
private val inputAssetsRoot = TestAssetsProvider("functionalTest", "provider")
2724

2825
@Test
@@ -161,14 +158,14 @@ class TemplatesProviderPluginTest : AndroidProjectTest() {
161158

162159
val blockItems = if (config != null) listOf(config) else emptyList()
163160
val libProjectDescriptor = AndroidLibProjectDescriptor(
164-
projectName, inputDir, ANDROID_PLUGIN_VERSION,
161+
projectName, inputDir, "0.0.0",
165162
blockItems
166163
)
167164
libProjectDescriptor.pluginsBlock.addPlugin(GradlePluginDeclaration("com.likethesalad.stem-library"))
168165
return libProjectDescriptor
169166
}
170167

171168
override fun getGradleVersion(): String {
172-
return "7.2"
169+
return GRADLE_VERSION
173170
}
174171
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.likethesalad.stem.testtools
2+
3+
object TestConstants {
4+
const val GRADLE_VERSION = "7.2"
5+
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/ResolvePlaceholdersPlugin.kt

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package com.likethesalad.stem
22

3-
import com.android.build.api.AndroidPluginVersion
4-
import com.android.build.api.variant.AndroidComponentsExtension
53
import com.likethesalad.android.templates.common.plugins.BaseTemplatesProcessorPlugin
64
import com.likethesalad.stem.di.AppInjector
75
import com.likethesalad.stem.locator.listener.TypeLocatorCreationListener
86
import com.likethesalad.stem.modules.common.helpers.dirs.VariantBuildResolvedDir.Companion.getBuildRelativeResolvedDir
97
import com.likethesalad.stem.providers.AndroidExtensionProvider
108
import com.likethesalad.stem.providers.LocatorExtensionProvider
9+
import com.likethesalad.stem.providers.PostConfigurationProvider
1110
import com.likethesalad.stem.providers.ProjectDirsProvider
1211
import com.likethesalad.stem.providers.TaskContainerProvider
1312
import com.likethesalad.stem.providers.TaskProvider
1413
import com.likethesalad.stem.utils.PlaceholderTasksCreator
1514
import com.likethesalad.tools.android.plugin.data.AndroidExtension
1615
import com.likethesalad.tools.resource.locator.android.extension.AndroidResourceLocatorExtension
16+
import org.gradle.api.Action
1717
import org.gradle.api.Project
1818
import org.gradle.api.Task
1919
import org.gradle.api.logging.Logger
@@ -22,7 +22,7 @@ import java.io.File
2222

2323
@Suppress("UnstableApiUsage")
2424
class ResolvePlaceholdersPlugin : BaseTemplatesProcessorPlugin(), AndroidExtensionProvider, ProjectDirsProvider,
25-
TaskProvider, TaskContainerProvider, LocatorExtensionProvider {
25+
TaskProvider, TaskContainerProvider, LocatorExtensionProvider, PostConfigurationProvider {
2626

2727
private lateinit var project: Project
2828
private lateinit var androidExtension: AndroidExtension
@@ -52,23 +52,16 @@ class ResolvePlaceholdersPlugin : BaseTemplatesProcessorPlugin(), AndroidExtensi
5252
templateResourcesEntryPointFactory.create(commonSourceConfigurationCreator),
5353
creationListener
5454
)
55-
validateAgp73AddingSrcDirs(project)
55+
56+
addResolvedResDirs()
5657
}
5758

58-
private fun validateAgp73AddingSrcDirs(project: Project) {
59-
try {
60-
val androidComponentsExtension = project.extensions.getByType(AndroidComponentsExtension::class.java)
61-
if (androidComponentsExtension.pluginVersion >= AndroidPluginVersion(7, 3)) {
62-
androidComponentsExtension.onVariants {
63-
val variantName = it.name
64-
androidExtension.addVariantSrcDir(
65-
variantName,
66-
project.layout.buildDirectory.dir(getBuildRelativeResolvedDir(variantName))
67-
)
68-
}
69-
}
70-
} catch (ignored: NoClassDefFoundError) {
71-
// When AGP < 7
59+
private fun addResolvedResDirs() {
60+
androidTools.onVariant {
61+
androidExtension.addVariantSrcDir(
62+
it.getVariantName(),
63+
project.layout.buildDirectory.dir(getBuildRelativeResolvedDir(it.getVariantName()))
64+
)
7265
}
7366
}
7467

@@ -108,4 +101,8 @@ class ResolvePlaceholdersPlugin : BaseTemplatesProcessorPlugin(), AndroidExtensi
108101
override fun getLocatorExtension(): AndroidResourceLocatorExtension {
109102
return stringsLocatorExtension
110103
}
104+
105+
override fun executeAfterEvaluate(action: Action<in Project>) {
106+
project.afterEvaluate(action)
107+
}
111108
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/di/AppModule.kt

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.likethesalad.stem.di
33
import com.likethesalad.android.templates.common.plugins.extension.StemExtension
44
import com.likethesalad.stem.ResolvePlaceholdersPlugin
55
import com.likethesalad.stem.providers.AndroidExtensionProvider
6+
import com.likethesalad.stem.providers.PostConfigurationProvider
67
import com.likethesalad.stem.providers.ProjectDirsProvider
78
import com.likethesalad.stem.providers.TaskContainerProvider
89
import com.likethesalad.stem.providers.TaskProvider
@@ -56,4 +57,10 @@ class AppModule(private val resolvePlaceholdersPlugin: ResolvePlaceholdersPlugin
5657
fun provideExtension(): StemExtension {
5758
return resolvePlaceholdersPlugin.extension
5859
}
60+
61+
@Provides
62+
@Singleton
63+
fun providePostConfigurationProvider(): PostConfigurationProvider {
64+
return resolvePlaceholdersPlugin
65+
}
5966
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/modules/common/helpers/android/AndroidVariantContext.kt

+3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class AndroidVariantContext @AssistedInject constructor(
3838
val packageResourcesTask: Task? by lazy {
3939
taskProvider.findTaskByName(tasksNames.packageResourcesName)
4040
}
41+
val extractDeeplinksTask: Task? by lazy {
42+
taskProvider.findTaskByName(tasksNames.extractDeeplinksName)
43+
}
4144
val incrementalDir: String by lazy {
4245
projectDirsProvider.getBuildDir().absolutePath + "/intermediates/incremental/" + tasksNames.resolvePlaceholdersName
4346
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/modules/common/helpers/dirs/VariantBuildResolvedDir.kt

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import java.io.File
99

1010
class VariantBuildResolvedDir @AssistedInject constructor(
1111
projectDirsProvider: ProjectDirsProvider,
12-
sourceSetsHandler: SourceSetsHandler,
1312
@Assisted androidVariantData: AndroidVariantData
1413
) {
1514
@AssistedFactory
@@ -28,8 +27,6 @@ class VariantBuildResolvedDir @AssistedInject constructor(
2827
private val variantName by lazy { androidVariantData.getVariantName() }
2928

3029
val resolvedDir: File by lazy {
31-
val dir = File(projectDirsProvider.getBuildDir(), getBuildRelativeResolvedDir(variantName))
32-
sourceSetsHandler.addToSourceSets(dir, variantName)
33-
dir
30+
File(projectDirsProvider.getBuildDir(), getBuildRelativeResolvedDir(variantName))
3431
}
3532
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/modules/common/models/TasksNamesModel.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.likethesalad.stem.modules.common.models
22

33
import com.likethesalad.android.templates.common.tasks.identifier.TemplatesIdentifierTask
4+
import com.likethesalad.android.templates.common.utils.upperFirst
45
import com.likethesalad.tools.android.plugin.data.AndroidVariantData
56
import dagger.assisted.Assisted
67
import dagger.assisted.AssistedFactory
@@ -18,9 +19,10 @@ class TasksNamesModel @AssistedInject constructor(@Assisted androidVariantData:
1819
private const val RESOLVE_PLACEHOLDERS_NAME_FORMAT = "resolve%sPlaceholders"
1920
private const val ANDROID_MERGE_RESOURCES_TASK_NAME_FORMAT = "merge%sResources"
2021
private const val ANDROID_PACKAGE_RESOURCES_TASK_NAME_FORMAT = "package%sResources"
22+
private const val ANDROID_EXTRACT_DEEPLINKS_TASK_NAME_FORMAT = "extractDeepLinks%s"
2123
}
2224

23-
private val capitalizedBuildVariant = androidVariantData.getVariantName().capitalize()
25+
private val capitalizedBuildVariant = androidVariantData.getVariantName().upperFirst()
2426

2527
val templatesIdentifierName: String by lazy {
2628
TemplatesIdentifierTask.generateTaskName(capitalizedBuildVariant)
@@ -41,4 +43,8 @@ class TasksNamesModel @AssistedInject constructor(@Assisted androidVariantData:
4143
val packageResourcesName: String by lazy {
4244
ANDROID_PACKAGE_RESOURCES_TASK_NAME_FORMAT.format(capitalizedBuildVariant)
4345
}
46+
47+
val extractDeeplinksName: String by lazy {
48+
ANDROID_EXTRACT_DEEPLINKS_TASK_NAME_FORMAT.format(capitalizedBuildVariant)
49+
}
4450
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.likethesalad.stem.providers
2+
3+
import org.gradle.api.Action
4+
import org.gradle.api.Project
5+
6+
interface PostConfigurationProvider {
7+
8+
fun executeAfterEvaluate(action: Action<in Project>)
9+
}

Diff for: stem-plugin/src/main/java/com/likethesalad/stem/utils/PlaceholderTasksCreator.kt

+8-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.likethesalad.stem.modules.resolveStrings.ResolvePlaceholdersTask
99
import com.likethesalad.stem.modules.resolveStrings.data.ResolvePlaceholdersArgs
1010
import com.likethesalad.stem.modules.templateStrings.GatherTemplatesTask
1111
import com.likethesalad.stem.modules.templateStrings.data.GatherTemplatesArgs
12+
import com.likethesalad.stem.providers.PostConfigurationProvider
1213
import com.likethesalad.stem.providers.TaskContainerProvider
1314
import com.likethesalad.tools.resource.collector.android.data.variant.VariantTree
1415
import com.likethesalad.tools.resource.locator.android.extension.configuration.data.ResourceLocatorInfo
@@ -22,7 +23,8 @@ class PlaceholderTasksCreator @Inject constructor(
2223
taskContainerProvider: TaskContainerProvider,
2324
private val androidVariantContextFactory: AndroidVariantContext.Factory,
2425
private val taskActionProviderHolder: TaskActionProviderHolder,
25-
private val templatesIdentifierActionFactory: TemplatesIdentifierAction.Factory
26+
private val templatesIdentifierActionFactory: TemplatesIdentifierAction.Factory,
27+
private val postConfigurationProvider: PostConfigurationProvider
2628
) : TypeLocatorCreationListener.Callback {
2729

2830
companion object {
@@ -77,8 +79,11 @@ class PlaceholderTasksCreator @Inject constructor(
7779
it.outputDir.set(androidVariantContext.variantBuildResolvedDir.resolvedDir)
7880
}
7981

80-
androidVariantContext.mergeResourcesTask.dependsOn(resolvePlaceholdersTask)
81-
androidVariantContext.packageResourcesTask?.dependsOn(resolvePlaceholdersTask)
82+
postConfigurationProvider.executeAfterEvaluate {
83+
androidVariantContext.mergeResourcesTask.dependsOn(resolvePlaceholdersTask)
84+
androidVariantContext.packageResourcesTask?.dependsOn(resolvePlaceholdersTask)
85+
androidVariantContext.extractDeeplinksTask?.dependsOn(resolvePlaceholdersTask)
86+
}
8287
}
8388

8489
private fun createTemplatesIdentifierTaskProvider(
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package com.likethesalad.stem.data.storage
22

33
import com.google.common.truth.Truth
4-
import com.likethesalad.stem.modules.common.helpers.dirs.SourceSetsHandler
54
import com.likethesalad.stem.modules.common.helpers.dirs.VariantBuildResolvedDir
65
import com.likethesalad.stem.providers.ProjectDirsProvider
76
import com.likethesalad.tools.android.plugin.data.AndroidVariantData
8-
import io.mockk.Runs
97
import io.mockk.every
10-
import io.mockk.just
118
import io.mockk.mockk
12-
import io.mockk.verify
139
import org.junit.Rule
1410
import org.junit.Test
1511
import org.junit.rules.TemporaryFolder
@@ -26,22 +22,16 @@ class VariantBuildResolvedDirTest {
2622
val buildDir = temporaryFolder.newFolder("build")
2723
val projectDirsProvider = mockk<ProjectDirsProvider>()
2824
val androidVariantData = mockk<AndroidVariantData>()
29-
val sourceSetsHandler = mockk<SourceSetsHandler>()
3025
val newSrcDir = File(buildDir, "generated/resolved/$variantName")
3126
every { projectDirsProvider.getBuildDir() }.returns(buildDir)
3227
every { androidVariantData.getVariantName() }.returns(variantName)
33-
every { sourceSetsHandler.addToSourceSets(newSrcDir, variantName) } just Runs
3428
val variantBuildResolvedDir = VariantBuildResolvedDir(
3529
projectDirsProvider,
36-
sourceSetsHandler,
3730
androidVariantData
3831
)
3932

4033
Truth.assertThat(variantBuildResolvedDir.resolvedDir).isEqualTo(
4134
newSrcDir
4235
)
43-
verify {
44-
sourceSetsHandler.addToSourceSets(newSrcDir, variantName)
45-
}
4636
}
4737
}

0 commit comments

Comments
 (0)