1-
21package love.forte.plugin.suspendtrans.gradle
32
43import love.forte.plugin.suspendtrans.configuration.*
@@ -12,6 +11,7 @@ import org.gradle.api.provider.ListProperty
1211import org.gradle.api.provider.Property
1312import org.gradle.api.provider.Provider
1413import org.gradle.api.provider.ProviderFactory
14+ import java.util.*
1515import javax.inject.Inject
1616
1717/* *
@@ -26,29 +26,119 @@ annotation class SuspendTransformPluginExtensionSpecDslMarker
2626@SuspendTransformPluginExtensionSpecDslMarker
2727interface SuspendTransformPluginExtensionSpec
2828
29+ /* *
30+ * @since 0.12.0
31+ */
2932@SuspendTransformPluginExtensionSpecDslMarker
3033interface SuspendTransformPluginExtensionClassInfoSpec : SuspendTransformPluginExtensionSpec {
3134 fun classInfo (action : Action <in ClassInfoSpec >)
3235 fun classInfo (action : ClassInfoSpec .() -> Unit )
3336}
3437
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+ }
52142
53143/* *
54144 * @since 0.12.0
@@ -57,11 +147,27 @@ interface SuspendTransformPluginExtensionClassInfoSpec : SuspendTransformPluginE
57147abstract class TransformersContainer
58148@Inject constructor (
59149 private val objects: ObjectFactory
60- ) : SuspendTransformPluginExtensionSpec {
150+ ) : SuspendTransformPluginExtensionSpec ,
151+ SuspendTransformPluginExtensionSpecFactoryAware {
152+ override val factory: SuspendTransformPluginExtensionSpecFactory =
153+ SuspendTransformPluginExtensionSpecFactoryImpl (objects)
154+
155+ // mutableMapOf()
61156 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+
63168
64169 private fun getTransformersInternal (platform : TargetPlatform ): ListProperty <TransformerSpec > {
170+ // return containers.maybeCreate(platform.name).transformerSet
65171 return containers.computeIfAbsent(platform) { objects.listProperty(TransformerSpec ::class .java) }
66172 }
67173
@@ -76,27 +182,27 @@ abstract class TransformersContainer
76182 * Create a [TransformerSpec] but not add.
77183 */
78184 fun createTransformer (action : TransformerSpec .() -> Unit ): TransformerSpec {
79- return objects.newInstance< TransformerSpec >(). also (action)
185+ return factory.createTransformer (action)
80186 }
81187
82188 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))
85191 }
86192
87193 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))
90196 }
91197
92198 fun add (platform : TargetPlatform , transformer : TransformerSpec ) {
93- val listProperty = getTransformersInternal(platform)
94- listProperty .add(transformer)
199+ val transformerSpecs = getTransformersInternal(platform)
200+ transformerSpecs .add(transformer)
95201 }
96202
97203 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)
100206 }
101207
102208 fun add (platform : TargetPlatform , transformer : Transformer ) {
0 commit comments