Skip to content

Commit bd361b0

Browse files
authored
Fix/plugin file generation (#212)
2 parents 6f5b9c9 + 39e2d8a commit bd361b0

15 files changed

Lines changed: 280 additions & 337 deletions

File tree

surf-api-gradle-plugin/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ plugins {
2121
group = groupId
2222
version = buildString {
2323
append(mcVersion)
24-
append("-1.11.8")
24+
append("-1.12.0")
2525
if (snapshot) append("-SNAPSHOT")
2626
}
2727

surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/generators/GeneratePluginFile.kt

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
package dev.slne.surf.surfapi.gradle.generators
22

33
import kotlinx.serialization.ExperimentalSerializationApi
4-
import kotlinx.serialization.InternalSerializationApi
5-
import kotlinx.serialization.KSerializer
6-
import kotlinx.serialization.builtins.ListSerializer
7-
import kotlinx.serialization.descriptors.SerialDescriptor
8-
import kotlinx.serialization.encoding.Decoder
9-
import kotlinx.serialization.encoding.Encoder
104
import kotlinx.serialization.json.Json
115
import org.gradle.api.DefaultTask
12-
import org.gradle.api.NamedDomainObjectContainer
136
import org.gradle.api.file.RegularFileProperty
147
import org.gradle.api.provider.Property
158
import org.gradle.api.tasks.CacheableTask
@@ -48,27 +41,5 @@ abstract class GeneratePluginFile : DefaultTask() {
4841
prettyPrint = true
4942
prettyPrintIndent = " "
5043
}
51-
52-
@OptIn(InternalSerializationApi::class)
53-
class NamedDomainObjectContainerSerializer<T : Any>(
54-
private val dataSerializer: KSerializer<T>,
55-
) : KSerializer<NamedDomainObjectContainer<T>> {
56-
override val descriptor: SerialDescriptor = SerialDescriptor(
57-
"dev.slne.surf.surfapi.gradle.generators.GeneratePluginFile.NamedDomainObjectContainerSerializer",
58-
dataSerializer.descriptor
59-
)
60-
61-
override fun serialize(
62-
encoder: Encoder,
63-
value: NamedDomainObjectContainer<T>,
64-
) {
65-
val values = value.toList()
66-
encoder.encodeSerializableValue(ListSerializer(dataSerializer), values)
67-
}
68-
69-
override fun deserialize(decoder: Decoder): NamedDomainObjectContainer<T> {
70-
throw UnsupportedOperationException("Deserialization is not supported")
71-
}
72-
}
7344
}
7445
}
Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
package dev.slne.surf.surfapi.gradle.generators.pluginfiles
22

3-
import kotlinx.serialization.Serializable
4-
import org.gradle.api.Project
53
import org.gradle.api.tasks.Internal
64

7-
@Serializable
85
sealed class CommonPluginFile {
96

107
@Internal
118
internal abstract fun isApplied(): Boolean
129

13-
internal open fun setDefaults(project: Project) {
14-
15-
}
16-
1710
internal open fun validate() {
1811
}
1912
}
Lines changed: 36 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,65 @@
11
package dev.slne.surf.surfapi.gradle.generators.pluginfiles
22

33
import dev.slne.surf.surfapi.gradle.platform.invalidPluginFile
4-
import kotlinx.serialization.KSerializer
5-
import kotlinx.serialization.SerialName
6-
import kotlinx.serialization.Serializable
7-
import kotlinx.serialization.builtins.ListSerializer
8-
import kotlinx.serialization.builtins.MapSerializer
9-
import kotlinx.serialization.builtins.serializer
10-
import kotlinx.serialization.descriptors.SerialDescriptor
11-
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
12-
import kotlinx.serialization.descriptors.element
13-
import kotlinx.serialization.encoding.Decoder
14-
import kotlinx.serialization.encoding.Encoder
15-
import kotlinx.serialization.encoding.encodeStructure
16-
import org.gradle.api.Project
4+
import org.gradle.api.provider.ListProperty
5+
import org.gradle.api.provider.MapProperty
6+
import org.gradle.api.provider.Property
177
import org.gradle.api.tasks.Input
18-
import org.gradle.api.tasks.Optional
8+
import javax.inject.Inject
199

20-
@Serializable(with = HytalePluginFileSerializer::class)
21-
class HytalePluginFile(project: Project) : CommonPluginFile() {
22-
@Input
23-
@SerialName("Group")
24-
var group: String = "HYS"
10+
abstract class HytalePluginFile @Inject constructor() : CommonPluginFile() {
11+
@get:Input
12+
abstract val group: Property<String>
2513

26-
@Input
27-
@SerialName("Id")
28-
var id: String? = null
14+
@get:Input
15+
abstract val id: Property<String>
2916

30-
@Input
31-
@SerialName("Name")
32-
var name: String? = null
17+
@get:Input
18+
abstract val name: Property<String>
3319

34-
@Input
35-
@SerialName("Version")
36-
var version: String? = null
20+
@get:Input
21+
abstract val version: Property<String>
3722

38-
@Input
39-
@SerialName("Description")
40-
@Optional
41-
var description: String = ""
23+
@get:Input
24+
abstract val description: Property<String>
4225

43-
@Input
44-
@SerialName("Authors")
45-
var authors: List<Author> = mutableListOf()
26+
@get:Input
27+
abstract val authors: ListProperty<String>
4628

47-
@Input
48-
@SerialName("Website")
49-
@Optional
50-
var website: String = ""
29+
@get:Input
30+
abstract val website: Property<String>
5131

52-
@Input
53-
@SerialName("ServerVersion")
54-
var serverVersion: String = "*"
32+
@get:Input
33+
abstract val serverVersion: Property<String>
5534

56-
@Input
57-
@SerialName("DisabledByDefault")
58-
var disabledByDefault: Boolean = false
35+
@get:Input
36+
abstract val disabledByDefault: Property<Boolean>
5937

60-
@Input
61-
@SerialName("Main")
62-
var main: String? = null
38+
@get:Input
39+
abstract val main: Property<String>
6340

64-
@Input
65-
@SerialName("IncludesAssetPack")
66-
var includesAssetPack: Boolean = false
41+
@get:Input
42+
abstract val includesAssetPack: Property<Boolean>
6743

68-
@Input
69-
@SerialName("Dependencies")
70-
val dependencies: MutableMap<String, String> = mutableMapOf("HYS:surf-api-hytale-server" to "*")
44+
@get:Input
45+
abstract val dependencies: MapProperty<String, String>
7146

72-
@Input
73-
@SerialName("OptionalDependencies")
74-
val optionalDependencies: MutableMap<String, String> = mutableMapOf()
75-
76-
@Serializable
77-
data class Author(@SerialName("Name") @Input val name: String)
47+
@get:Input
48+
abstract val optionalDependencies: MapProperty<String, String>
7849

7950
override fun isApplied(): Boolean {
80-
return name != null && main != null
81-
}
82-
83-
override fun setDefaults(project: Project) {
84-
id = project.name
85-
name = project.name
86-
version = project.version.toString()
87-
description = project.description ?: ""
88-
website = project.findProperty("url") as String? ?: ""
51+
return main.isPresent
8952
}
9053

9154
override fun validate() {
92-
val id = name ?: invalidPluginFile("Plugin name not set")
55+
if (name.orNull.isNullOrBlank()) invalidPluginFile("Plugin name not set")
9356

94-
if (version.isNullOrBlank()) invalidPluginFile("Plugin version not set")
95-
if (main.isNullOrBlank()) invalidPluginFile("Main class not set")
57+
if (version.orNull.isNullOrBlank()) invalidPluginFile("Plugin version not set")
58+
if (main.orNull.isNullOrBlank()) invalidPluginFile("Main class not set")
9659

97-
for ((dependency, version) in optionalDependencies) {
60+
optionalDependencies.orNull?.forEach { (dependency, version) ->
9861
if (dependency.isBlank()) invalidPluginFile("Dependency id not set")
9962
if (version.isBlank()) invalidPluginFile("Dependency '$dependency' version not set")
10063
}
10164
}
102-
}
103-
104-
object HytalePluginFileSerializer : KSerializer<HytalePluginFile> {
105-
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("HytalePluginFile") {
106-
element<String>("Group")
107-
element<String>("Name")
108-
element<String>("Version")
109-
element<String>("Description")
110-
element<List<HytalePluginFile.Author>>("Authors")
111-
element<String>("Website")
112-
element<String>("ServerVersion")
113-
element<Boolean>("DisabledByDefault")
114-
element<String>("Main")
115-
element<Boolean>("IncludesAssetPack")
116-
element<Map<String, String>>("Dependencies")
117-
element<Map<String, String>>("PluginDependencies")
118-
}
119-
120-
override fun serialize(encoder: Encoder, value: HytalePluginFile) {
121-
encoder.encodeStructure(descriptor) {
122-
encodeStringElement(descriptor, 0, value.group ?: "")
123-
encodeStringElement(descriptor, 1, value.name ?: "")
124-
encodeStringElement(descriptor, 2, value.version ?: "")
125-
encodeStringElement(descriptor, 3, value.description ?: "")
126-
encodeSerializableElement(
127-
descriptor,
128-
4,
129-
ListSerializer(HytalePluginFile.Author.serializer()),
130-
value.authors
131-
)
132-
encodeStringElement(descriptor, 5, value.website ?: "")
133-
encodeStringElement(descriptor, 6, value.serverVersion ?: "")
134-
encodeBooleanElement(descriptor, 7, value.disabledByDefault)
135-
encodeStringElement(descriptor, 8, value.main ?: "")
136-
encodeBooleanElement(descriptor, 9, value.includesAssetPack)
137-
encodeSerializableElement(
138-
descriptor,
139-
10,
140-
MapSerializer(String.serializer(), String.serializer()),
141-
value.dependencies
142-
)
143-
encodeSerializableElement(
144-
descriptor,
145-
11,
146-
MapSerializer(String.serializer(), String.serializer()),
147-
value.optionalDependencies
148-
)
149-
}
150-
}
151-
152-
override fun deserialize(decoder: Decoder): HytalePluginFile {
153-
throw NotImplementedError("Deserialization is not supported for HytalePluginFile")
154-
}
15565
}

0 commit comments

Comments
 (0)