1
1
package io.lecon.debugtools.plugin
2
2
3
- import com.android.build.gradle.AppExtension
3
+ import com.android.build.gradle.*
4
4
import com.android.build.gradle.api.BaseVariant
5
+ import com.android.build.gradle.api.LibraryVariant
5
6
import com.squareup.javapoet.ClassName
6
7
import com.squareup.javapoet.JavaFile
7
8
import com.squareup.javapoet.MethodSpec
@@ -10,6 +11,7 @@ import groovy.util.XmlSlurper
10
11
import io.lecon.debugtools.plugin.domain.DebugTools
11
12
import org.gradle.api.Plugin
12
13
import org.gradle.api.Project
14
+ import org.gradle.api.UnknownDomainObjectException
13
15
import org.gradle.api.plugins.ExtensionContainer
14
16
import org.gradle.internal.reflect.Instantiator
15
17
import org.gradle.invocation.DefaultGradle
@@ -23,8 +25,12 @@ import kotlin.reflect.KClass
23
25
*/
24
26
class PluginMain : Plugin <Project > {
25
27
26
- private operator fun <T : Any > ExtensionContainer.get (type : KClass <T >): T {
27
- return getByType(type.java)
28
+ private operator fun <T : Any > ExtensionContainer.get (type : KClass <T >): T ? {
29
+ try {
30
+ return getByType(type.java)
31
+ } catch (_ : UnknownDomainObjectException ) {
32
+ return null
33
+ }
28
34
}
29
35
30
36
private lateinit var project: Project
@@ -66,20 +72,32 @@ class PluginMain : Plugin<Project> {
66
72
val javaFile = JavaFile .builder(" io.lecon.debug_tools" , helloWorld)
67
73
.build()
68
74
69
- project.extensions[AppExtension ::class ].apply {
70
- this .applicationVariants.all { variant ->
71
- val outputDir = project.buildDir.resolve(
72
- " generated/source/debug_tools/${variant.dirName} " )
73
- javaFile.writeTo(outputDir)
74
- variant.outputs.all {
75
- project.tasks.create(" generate${variant.name.capitalize()} ExtraDatabaseBuilder" ) {
76
- variant.registerJavaGeneratingTask(it, outputDir)
77
- }
78
- }
75
+ project.extensions[AppExtension ::class ].let {
76
+ it?.let { extension ->
77
+ extension.applicationVariants.all { variant->
78
+ getConfig(variant,javaFile)
79
+ }
80
+ }
81
+ }
79
82
83
+ project.extensions[LibraryExtension ::class ].let {
84
+ it?.let { extension ->
85
+ extension.libraryVariants.all { variant ->
86
+ getConfig(variant,javaFile)
87
+ }
80
88
}
81
89
}
90
+ }
82
91
92
+ private fun getConfig (variant : BaseVariant ,javaFile : JavaFile ) {
93
+ val outputDir = project.buildDir.resolve(
94
+ " generated/source/debug_tools/${variant.dirName} " )
95
+ javaFile.writeTo(outputDir)
96
+ variant.outputs.all {
97
+ project.tasks.create(" generate${variant.name.capitalize()} ExtraDatabaseBuilder" ) {
98
+ variant.registerJavaGeneratingTask(it, outputDir)
99
+ }
100
+ }
83
101
}
84
102
85
103
private fun getPackageName (variant : BaseVariant ): String {
0 commit comments