diff --git a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/CodegenExt.kt b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/CodegenExt.kt index 642859b..4e77263 100644 --- a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/CodegenExt.kt +++ b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/CodegenExt.kt @@ -21,7 +21,7 @@ val Project.codegenDir get() = buildDir.resolve("generated/sources/jfCodegen") fun SourceSet.generate(project: Project, generate: Action) { val generators = project.extra["codeGenerators"] as LinkedHashMap val exists = generators.containsKey(name) - val generator = ContentGenerator().run(generate) + val generator = ContentGenerator().runAction(generate) generators[name] = if (exists) generators[name]!!.merge(generator.finalize()) else generator.finalize() if (!exists) { java.srcDir(project.codegenDir.resolve("java/$name")) @@ -91,9 +91,9 @@ class ContentGenerator { // Extensions for TypeSpec.Builder fun TypeSpec.Builder.javadoc(`import`: String) = addJavadoc(import) -fun TypeSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().run(generate).build()) -fun TypeSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) -fun TypeSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) +fun TypeSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().runAction(generate).build()) +fun TypeSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) +fun TypeSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) fun TypeSpec.Builder.modifiers(vararg modifiers: Modifier) = addModifiers(*modifiers) fun TypeSpec.Builder.typeVariable(typeVariable: TypeVariableName) = addTypeVariable(typeVariable) fun TypeSpec.Builder.superInterface(superInterface: TypeName) = addSuperinterface(superInterface) @@ -103,8 +103,8 @@ fun TypeSpec.Builder.superInterface(superInterface: TypeMirror) = addSuperinterf fun TypeSpec.Builder.superInterface(superInterface: TypeMirror, avoidNestedTypeNameClashes: Boolean) = addSuperinterface(superInterface, avoidNestedTypeNameClashes) fun TypeSpec.Builder.enumConstant(name: String) = addEnumConstant(name) fun TypeSpec.Builder.enumConstant(name: String, typeSpec: TypeSpec) = addEnumConstant(name, typeSpec) -fun TypeSpec.Builder.field(type: Type, name: String, vararg modifiers: Modifier, generate: Action? = null) = addField(FieldSpec.builder(type, name, *modifiers).run(generate).build()) -fun TypeSpec.Builder.field(type: TypeName, name: String, vararg modifiers: Modifier, generate: Action? = null) = addField(FieldSpec.builder(type, name, *modifiers).run(generate).build()) +fun TypeSpec.Builder.field(type: Type, name: String, vararg modifiers: Modifier, generate: Action? = null) = addField(FieldSpec.builder(type, name, *modifiers).runAction(generate).build()) +fun TypeSpec.Builder.field(type: TypeName, name: String, vararg modifiers: Modifier, generate: Action? = null) = addField(FieldSpec.builder(type, name, *modifiers).runAction(generate).build()) fun TypeSpec.Builder.field(name: String, value: Boolean, vararg modifiers: Modifier) = field(Boolean::class.java, name, *modifiers) { initializer("$value") } fun TypeSpec.Builder.field(name: String, value: Short, vararg modifiers: Modifier) = field(Short::class.java, name, *modifiers) { initializer("$value") } fun TypeSpec.Builder.field(name: String, value: Int, vararg modifiers: Modifier) = field(Int::class.java, name, *modifiers) { initializer("$value") } @@ -112,50 +112,50 @@ fun TypeSpec.Builder.field(name: String, value: Long, vararg modifiers: Modifier fun TypeSpec.Builder.field(name: String, value: Float, vararg modifiers: Modifier) = field(Float::class.java, name, *modifiers) { initializer("${value}f") } fun TypeSpec.Builder.field(name: String, value: Double, vararg modifiers: Modifier) = field(Double::class.java, name, *modifiers) { initializer("$value") } fun TypeSpec.Builder.field(name: String, value: String, vararg modifiers: Modifier) = field(String::class.java, name, *modifiers) { initializer("\$S", value) } -fun TypeSpec.Builder.static(generate: Action) = addStaticBlock(CodeBlock.builder().run(generate).build()) -fun TypeSpec.Builder.initializer(generate: Action) = addInitializerBlock(CodeBlock.builder().run(generate).build()) -fun TypeSpec.Builder.method(name: String, generate: Action) = addMethod(MethodSpec.methodBuilder(name).run(generate).build()) -fun TypeSpec.Builder.override(element: ExecutableElement, generate: Action) = addMethod(MethodSpec.overriding(element).run(generate).build()) -fun TypeSpec.Builder.override(element: ExecutableElement, enclosing: DeclaredType, types: Types, generate: Action) = addMethod(MethodSpec.overriding(element, enclosing, types).run(generate).build()) -fun TypeSpec.Builder.constructor(generate: Action) = addMethod(MethodSpec.constructorBuilder().run(generate).build()) -fun TypeSpec.Builder.innerEnum(name: String, generate: Action) = addType(TypeSpec.enumBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerInterface(name: String, generate: Action) = addType(TypeSpec.interfaceBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerClass(name: String, generate: Action) = addType(TypeSpec.classBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerAnnotation(name: String, generate: Action) = addType(TypeSpec.annotationBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerEnum(name: ClassName, generate: Action) = addType(TypeSpec.enumBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerInterface(name: ClassName, generate: Action) = addType(TypeSpec.interfaceBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerClass(name: ClassName, generate: Action) = addType(TypeSpec.classBuilder(name).run(generate).build()) -fun TypeSpec.Builder.innerAnnotation(name: ClassName, generate: Action) = addType(TypeSpec.annotationBuilder(name).run(generate).build()) +fun TypeSpec.Builder.static(generate: Action) = addStaticBlock(CodeBlock.builder().runAction(generate).build()) +fun TypeSpec.Builder.initializer(generate: Action) = addInitializerBlock(CodeBlock.builder().runAction(generate).build()) +fun TypeSpec.Builder.method(name: String, generate: Action) = addMethod(MethodSpec.methodBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.override(element: ExecutableElement, generate: Action) = addMethod(MethodSpec.overriding(element).runAction(generate).build()) +fun TypeSpec.Builder.override(element: ExecutableElement, enclosing: DeclaredType, types: Types, generate: Action) = addMethod(MethodSpec.overriding(element, enclosing, types).runAction(generate).build()) +fun TypeSpec.Builder.constructor(generate: Action) = addMethod(MethodSpec.constructorBuilder().runAction(generate).build()) +fun TypeSpec.Builder.innerEnum(name: String, generate: Action) = addType(TypeSpec.enumBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerInterface(name: String, generate: Action) = addType(TypeSpec.interfaceBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerClass(name: String, generate: Action) = addType(TypeSpec.classBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerAnnotation(name: String, generate: Action) = addType(TypeSpec.annotationBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerEnum(name: ClassName, generate: Action) = addType(TypeSpec.enumBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerInterface(name: ClassName, generate: Action) = addType(TypeSpec.interfaceBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerClass(name: ClassName, generate: Action) = addType(TypeSpec.classBuilder(name).runAction(generate).build()) +fun TypeSpec.Builder.innerAnnotation(name: ClassName, generate: Action) = addType(TypeSpec.annotationBuilder(name).runAction(generate).build()) fun TypeSpec.Builder.origin(origin: Element) = addOriginatingElement(origin) // Extensions for AnnotationSpec.Builder fun AnnotationSpec.Builder.member(name: String, format: String, vararg args: Any) = addMember(name, format, args) -fun AnnotationSpec.Builder.member(name: String, generate: Action) = addMember(name, CodeBlock.builder().run(generate).build()) +fun AnnotationSpec.Builder.member(name: String, generate: Action) = addMember(name, CodeBlock.builder().runAction(generate).build()) // Extensions for FieldSpec.Builder -fun FieldSpec.Builder.initializer(generate: Action) = initializer(CodeBlock.builder().run(generate).build()) +fun FieldSpec.Builder.initializer(generate: Action) = initializer(CodeBlock.builder().runAction(generate).build()) // Extensions for MethodSpec.Builder fun MethodSpec.Builder.javadoc(`import`: String) = addJavadoc(import) -fun MethodSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().run(generate).build()) -fun MethodSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) -fun MethodSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) +fun MethodSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().runAction(generate).build()) +fun MethodSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) +fun MethodSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) fun MethodSpec.Builder.modifiers(vararg modifiers: Modifier) = addModifiers(*modifiers) fun MethodSpec.Builder.typeVariable(typeVariable: TypeVariableName) = addTypeVariable(typeVariable) -fun MethodSpec.Builder.parameter(type: Type, name: String, vararg modifiers: Modifier, generate: Action) = addParameter(ParameterSpec.builder(type, name, *modifiers).run(generate).build()) -fun MethodSpec.Builder.parameter(type: TypeName, name: String, vararg modifiers: Modifier, generate: Action) = addParameter(ParameterSpec.builder(type, name, *modifiers).run(generate).build()) +fun MethodSpec.Builder.parameter(type: Type, name: String, vararg modifiers: Modifier, generate: Action) = addParameter(ParameterSpec.builder(type, name, *modifiers).runAction(generate).build()) +fun MethodSpec.Builder.parameter(type: TypeName, name: String, vararg modifiers: Modifier, generate: Action) = addParameter(ParameterSpec.builder(type, name, *modifiers).runAction(generate).build()) fun MethodSpec.Builder.exception(exception: Type) = addException(exception) fun MethodSpec.Builder.exception(exception: TypeName) = addException(exception) -fun MethodSpec.Builder.code(generate: Action) = addCode(CodeBlock.builder().run(generate).build()) -fun MethodSpec.Builder.defaultValue(generate: Action) = defaultValue(CodeBlock.builder().run(generate).build()) +fun MethodSpec.Builder.code(generate: Action) = addCode(CodeBlock.builder().runAction(generate).build()) +fun MethodSpec.Builder.defaultValue(generate: Action) = defaultValue(CodeBlock.builder().runAction(generate).build()) // Extensions for ParameterSpec.Builder fun ParameterSpec.Builder.javadoc(`import`: String) = addJavadoc(import) -fun ParameterSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().run(generate).build()) -fun ParameterSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) -fun ParameterSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).run(generate).build()) +fun ParameterSpec.Builder.javadoc(generate: Action) = addJavadoc(CodeBlock.builder().runAction(generate).build()) +fun ParameterSpec.Builder.annotation(annotation: Class<*>, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) +fun ParameterSpec.Builder.annotation(annotation: ClassName, generate: Action? = null) = addAnnotation(AnnotationSpec.builder(annotation).runAction(generate).build()) fun ParameterSpec.Builder.modifiers(vararg modifiers: Modifier) = addModifiers(*modifiers) // Extensions for CodeBlock.Builder -fun CodeBlock.Builder.controlFlow(controlFlow: String, vararg args: Any, generate: Action) = beginControlFlow(controlFlow, *args).run(generate).endControlFlow() -fun CodeBlock.Builder.indent(generate: Action) = indent().run(generate).unindent() \ No newline at end of file +fun CodeBlock.Builder.controlFlow(controlFlow: String, vararg args: Any, generate: Action) = beginControlFlow(controlFlow, *args).runAction(generate).endControlFlow() +fun CodeBlock.Builder.indent(generate: Action) = indent().runAction(generate).unindent() \ No newline at end of file diff --git a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt index 42b40f1..23faeaa 100644 --- a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt +++ b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt @@ -24,6 +24,10 @@ var Project.changelog: String get() = if (extra.has("changelog")) extra["changelog"].toString() else "" set(value) = extra.set("changelog", value) +var Project.flavour: String + get() = prop("flavour", "").trim() + set(value) = setProperty("flavour", value) + val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named("build").get()) val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug) @@ -32,7 +36,7 @@ fun Project.prop(name: String, default: String? = null): String = else default // Utility to run actions on values -fun T.run(action: Action?): T { +fun T.runAction(action: Action?): T { action?.execute(this!!) return this } \ No newline at end of file diff --git a/jfmod/src/main/kotlin/jfmod.gradle.kts b/jfmod/src/main/kotlin/jfmod.gradle.kts index bfceaa7..4f741a2 100644 --- a/jfmod/src/main/kotlin/jfmod.gradle.kts +++ b/jfmod/src/main/kotlin/jfmod.gradle.kts @@ -90,5 +90,22 @@ subprojects { } } +val moveArtifacts by tasks.registering(Copy::class) { + val suffix = if (flavour.isEmpty()) "" else "-$flavour" + + val sources = mapOf("latest$suffix.jar" to tasks.remapJar, "latest$suffix-dev.jar" to tasks.shadowJar) + + for (source in sources) { + from(source.value.map { it.archiveFile }) { + this.rename { source.key } + } + dependsOn(source.value) + } + + into(buildDir.resolve("artifacts")) +} + +tasks.deployDebug.dependsOn(moveArtifacts) + if (hasProperty("curseforge_id")) apply(plugin = "jfmod.curseforge") if (hasProperty("modrinth_id")) apply(plugin = "jfmod.modrinth")