1
1
package com.likethesalad.tools.android.plugin
2
2
3
- import com.android.build.gradle.AppExtension
4
- import com.android.build.gradle.BaseExtension
5
- import com.android.build.gradle.LibraryExtension
6
- import com.android.build.gradle.api.BaseVariant
7
- import com.likethesalad.tools.android.plugin.data.impl.DefaultAndroidExtension
8
- import com.likethesalad.tools.android.plugin.data.impl.DefaultAndroidVariantData
3
+ import com.likethesalad.tools.android.plugin.data.strategies.PluginStrategy
9
4
import com.likethesalad.tools.android.plugin.extension.AndroidToolsPluginExtension
10
5
import com.likethesalad.tools.android.plugin.extension.observable.VariantPublisher
11
6
import org.gradle.api.Plugin
@@ -14,43 +9,19 @@ import org.gradle.api.Project
14
9
class AndroidToolsPlugin : Plugin <Project > {
15
10
16
11
private lateinit var publisher: VariantPublisher
17
- private lateinit var extension: AndroidToolsPluginExtension
18
12
19
13
companion object {
20
14
private const val EXTENSION_NAME = " androidTools"
21
15
}
22
16
23
17
override fun apply (project : Project ) {
24
- val androidExtension = project.extensions.getByType(BaseExtension ::class .java)
25
18
publisher = VariantPublisher ()
26
- createExtension(project, androidExtension)
27
-
28
- when (androidExtension) {
29
- is AppExtension -> configureAppExtension(project, androidExtension)
30
- is LibraryExtension -> configureLibraryExtension(project, androidExtension)
31
- else -> throw UnsupportedOperationException (" Android extension type not supported" )
32
- }
33
- }
34
-
35
- private fun configureLibraryExtension (project : Project , androidExtension : LibraryExtension ) {
36
- androidExtension.libraryVariants.all {
37
- addVariantData(project, it)
38
- }
39
- }
40
-
41
- private fun configureAppExtension (project : Project , androidExtension : AppExtension ) {
42
- androidExtension.applicationVariants.all {
43
- addVariantData(project, it)
44
- }
45
- }
46
-
47
- private fun addVariantData (project : Project , androidVariant : BaseVariant ) {
48
- val variant = DefaultAndroidVariantData (project, androidVariant)
49
- publisher.publish(variant)
19
+ val extension = createExtension(project)
20
+ val pluginStrategy = PluginStrategy .getStrategy(project)
21
+ extension.androidExtension = pluginStrategy.configure(project, publisher)
50
22
}
51
23
52
- private fun createExtension (project : Project , androidExtension : BaseExtension ) {
53
- extension = project.extensions.create(EXTENSION_NAME , AndroidToolsPluginExtension ::class .java, publisher)
54
- extension.androidExtension = DefaultAndroidExtension (androidExtension)
24
+ private fun createExtension (project : Project ): AndroidToolsPluginExtension {
25
+ return project.extensions.create(EXTENSION_NAME , AndroidToolsPluginExtension ::class .java, publisher)
55
26
}
56
27
}
0 commit comments