1
-
2
1
package love.forte.plugin.suspendtrans.gradle
3
2
4
3
import love.forte.plugin.suspendtrans.configuration.*
@@ -12,6 +11,7 @@ import org.gradle.api.provider.ListProperty
12
11
import org.gradle.api.provider.Property
13
12
import org.gradle.api.provider.Provider
14
13
import org.gradle.api.provider.ProviderFactory
14
+ import java.util.*
15
15
import javax.inject.Inject
16
16
17
17
/* *
@@ -26,29 +26,119 @@ annotation class SuspendTransformPluginExtensionSpecDslMarker
26
26
@SuspendTransformPluginExtensionSpecDslMarker
27
27
interface SuspendTransformPluginExtensionSpec
28
28
29
+ /* *
30
+ * @since 0.12.0
31
+ */
29
32
@SuspendTransformPluginExtensionSpecDslMarker
30
33
interface SuspendTransformPluginExtensionClassInfoSpec : SuspendTransformPluginExtensionSpec {
31
34
fun classInfo (action : Action <in ClassInfoSpec >)
32
35
fun classInfo (action : ClassInfoSpec .() -> Unit )
33
36
}
34
37
35
- // TODO
36
- // interface SuspendTransformPluginExtensionSpecFactory {
37
- // fun createClassInfo(): ClassInfoSpec
38
- // fun createMarkAnnotation(): MarkAnnotationSpec
39
- // fun createFunctionInfo(): FunctionInfoSpec
40
- // fun createIncludeAnnotation(): IncludeAnnotationSpec
41
- // fun createCopyAnnotationExclude(): CopyAnnotationExcludeSpec
42
- // fun createRuntimeDependency(): RuntimeDependencySpec
43
- // fun createAnnotationDependency(): AnnotationDependencySpec
44
- // fun createTransformFunctionInfo(): TransformFunctionInfoSpec
45
- // fun createTransformReturnType(): TransformReturnTypeSpec
46
- // fun createTransformer(): TransformerSpec
47
- // }
48
- //
49
- // interface SuspendTransformPluginExtensionSpecFactoryAware {
50
- // val factory: SuspendTransformPluginExtensionSpecFactory
51
- // }
38
+ /* *
39
+ * @since 0.12.0
40
+ */
41
+ @Suppress(" unused" )
42
+ interface SuspendTransformPluginExtensionSpecFactory {
43
+ fun createClassInfo (action : Action <in ClassInfoSpec >): ClassInfoSpec
44
+ fun createClassInfo (action : ClassInfoSpec .() -> Unit ): ClassInfoSpec =
45
+ createClassInfo(Action (action))
46
+
47
+ fun createClassInfo (): ClassInfoSpec =
48
+ createClassInfo { }
49
+
50
+ fun createMarkAnnotation (action : Action <in MarkAnnotationSpec >): MarkAnnotationSpec
51
+ fun createMarkAnnotation (action : MarkAnnotationSpec .() -> Unit ): MarkAnnotationSpec =
52
+ createMarkAnnotation(Action (action))
53
+
54
+ fun createMarkAnnotation (): MarkAnnotationSpec =
55
+ createMarkAnnotation { }
56
+
57
+ fun createFunctionInfo (action : Action <in FunctionInfoSpec >): FunctionInfoSpec
58
+ fun createFunctionInfo (action : FunctionInfoSpec .() -> Unit ): FunctionInfoSpec =
59
+ createFunctionInfo(Action (action))
60
+
61
+ fun createFunctionInfo (): FunctionInfoSpec =
62
+ createFunctionInfo { }
63
+
64
+ fun createIncludeAnnotation (action : Action <in IncludeAnnotationSpec >): IncludeAnnotationSpec
65
+ fun createIncludeAnnotation (action : IncludeAnnotationSpec .() -> Unit ): IncludeAnnotationSpec =
66
+ createIncludeAnnotation(Action (action))
67
+
68
+ fun createIncludeAnnotation (): IncludeAnnotationSpec =
69
+ createIncludeAnnotation { }
70
+
71
+ fun createRuntimeDependency (action : Action <in RuntimeDependencySpec >): RuntimeDependencySpec
72
+ fun createRuntimeDependency (action : RuntimeDependencySpec .() -> Unit ): RuntimeDependencySpec =
73
+ createRuntimeDependency(Action (action))
74
+
75
+ fun createRuntimeDependency (): RuntimeDependencySpec =
76
+ createRuntimeDependency { }
77
+
78
+ fun createAnnotationDependency (action : Action <in AnnotationDependencySpec >): AnnotationDependencySpec
79
+ fun createAnnotationDependency (action : AnnotationDependencySpec .() -> Unit ): AnnotationDependencySpec =
80
+ createAnnotationDependency(Action (action))
81
+
82
+ fun createAnnotationDependency (): AnnotationDependencySpec =
83
+ createAnnotationDependency { }
84
+
85
+ fun createTransformFunctionInfo (action : Action <in FunctionInfoSpec >): FunctionInfoSpec
86
+ fun createTransformFunctionInfo (action : FunctionInfoSpec .() -> Unit ): FunctionInfoSpec =
87
+ createTransformFunctionInfo(Action (action))
88
+
89
+ fun createTransformFunctionInfo (): FunctionInfoSpec =
90
+ createTransformFunctionInfo { }
91
+
92
+ fun createTransformer (action : Action <in TransformerSpec >): TransformerSpec
93
+ fun createTransformer (action : TransformerSpec .() -> Unit ): TransformerSpec =
94
+ createTransformer(Action (action))
95
+
96
+ fun createTransformer (): TransformerSpec =
97
+ createTransformer { }
98
+ }
99
+
100
+ /* *
101
+ * @since 0.12.0
102
+ */
103
+ interface SuspendTransformPluginExtensionSpecFactoryAware {
104
+ val factory: SuspendTransformPluginExtensionSpecFactory
105
+ }
106
+
107
+ private class SuspendTransformPluginExtensionSpecFactoryImpl (
108
+ private val objects : ObjectFactory ,
109
+ ) : SuspendTransformPluginExtensionSpecFactory {
110
+ override fun createClassInfo (action : Action <in ClassInfoSpec >): ClassInfoSpec {
111
+ return objects.newInstance<ClassInfoSpec >().also (action::execute)
112
+ }
113
+
114
+ override fun createAnnotationDependency (action : Action <in AnnotationDependencySpec >): AnnotationDependencySpec {
115
+ return objects.newInstance<AnnotationDependencySpec >().also (action::execute)
116
+ }
117
+
118
+ override fun createMarkAnnotation (action : Action <in MarkAnnotationSpec >): MarkAnnotationSpec {
119
+ return objects.newInstance<MarkAnnotationSpec >().also (action::execute)
120
+ }
121
+
122
+ override fun createFunctionInfo (action : Action <in FunctionInfoSpec >): FunctionInfoSpec {
123
+ return objects.newInstance<FunctionInfoSpec >().also (action::execute)
124
+ }
125
+
126
+ override fun createIncludeAnnotation (action : Action <in IncludeAnnotationSpec >): IncludeAnnotationSpec {
127
+ return objects.newInstance<IncludeAnnotationSpec >().also (action::execute)
128
+ }
129
+
130
+ override fun createRuntimeDependency (action : Action <in RuntimeDependencySpec >): RuntimeDependencySpec {
131
+ return objects.newInstance<RuntimeDependencySpec >().also (action::execute)
132
+ }
133
+
134
+ override fun createTransformFunctionInfo (action : Action <in FunctionInfoSpec >): FunctionInfoSpec {
135
+ return objects.newInstance<FunctionInfoSpec >().also (action::execute)
136
+ }
137
+
138
+ override fun createTransformer (action : Action <in TransformerSpec >): TransformerSpec {
139
+ return objects.newInstance<TransformerSpec >().also (action::execute)
140
+ }
141
+ }
52
142
53
143
/* *
54
144
* @since 0.12.0
@@ -57,11 +147,27 @@ interface SuspendTransformPluginExtensionClassInfoSpec : SuspendTransformPluginE
57
147
abstract class TransformersContainer
58
148
@Inject constructor (
59
149
private val objects: ObjectFactory
60
- ) : SuspendTransformPluginExtensionSpec {
150
+ ) : SuspendTransformPluginExtensionSpec ,
151
+ SuspendTransformPluginExtensionSpecFactoryAware {
152
+ override val factory: SuspendTransformPluginExtensionSpecFactory =
153
+ SuspendTransformPluginExtensionSpecFactoryImpl (objects)
154
+
155
+ // mutableMapOf()
61
156
internal val containers: MutableMap <TargetPlatform , ListProperty <TransformerSpec >> =
62
- mutableMapOf ()
157
+ EnumMap (TargetPlatform ::class .java)
158
+ // TODO Maybe ...
159
+ // containers: NamedDomainObjectContainer<TransformerSpecContainer> =
160
+ // objects.domainObjectContainer(TransformerSpecContainer::class.java) { name ->
161
+ // objects.newInstance(TransformerSpecContainer::class.java, name)
162
+ // }
163
+ // abstract class TransformerSpecContainer @Inject constructor(name: String) {
164
+ // val targetPlatform: TargetPlatform = TargetPlatform.valueOf(name)
165
+ // abstract val transformerSet: DomainObjectSet<TransformerSpec>
166
+ // }
167
+
63
168
64
169
private fun getTransformersInternal (platform : TargetPlatform ): ListProperty <TransformerSpec > {
170
+ // return containers.maybeCreate(platform.name).transformerSet
65
171
return containers.computeIfAbsent(platform) { objects.listProperty(TransformerSpec ::class .java) }
66
172
}
67
173
@@ -76,27 +182,27 @@ abstract class TransformersContainer
76
182
* Create a [TransformerSpec] but not add.
77
183
*/
78
184
fun createTransformer (action : TransformerSpec .() -> Unit ): TransformerSpec {
79
- return objects.newInstance< TransformerSpec >(). also (action)
185
+ return factory.createTransformer (action)
80
186
}
81
187
82
188
fun add (platform : TargetPlatform , action : Action <in TransformerSpec >) {
83
- val listProperty = getTransformersInternal(platform)
84
- listProperty .add(createTransformer(action))
189
+ val transformerSpecs = getTransformersInternal(platform)
190
+ transformerSpecs .add(createTransformer(action))
85
191
}
86
192
87
193
fun add (platform : TargetPlatform , action : TransformerSpec .() -> Unit ) {
88
- val listProperty = getTransformersInternal(platform)
89
- listProperty .add(createTransformer(action))
194
+ val transformerSpecs = getTransformersInternal(platform)
195
+ transformerSpecs .add(createTransformer(action))
90
196
}
91
197
92
198
fun add (platform : TargetPlatform , transformer : TransformerSpec ) {
93
- val listProperty = getTransformersInternal(platform)
94
- listProperty .add(transformer)
199
+ val transformerSpecs = getTransformersInternal(platform)
200
+ transformerSpecs .add(transformer)
95
201
}
96
202
97
203
fun add (platform : TargetPlatform , transformer : Provider <TransformerSpec >) {
98
- val listProperty = getTransformersInternal(platform)
99
- listProperty .add(transformer)
204
+ val transformerSpecs = getTransformersInternal(platform)
205
+ transformerSpecs .add(transformer)
100
206
}
101
207
102
208
fun add (platform : TargetPlatform , transformer : Transformer ) {
0 commit comments