diff --git a/core/build.gradle.kts b/core/build.gradle.kts index d9c498f2..32319e6a 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -63,3 +63,35 @@ tasks.shadowJar { exclude("com/sun/jna/sunos-x86/") exclude("com/sun/jna/sunos-x86-64/") } + +abstract class DemoTask : JavaExec() { + init { + setMain("UIDemo") + } + + @Option(option = "class", description = "Specifies the main class to run (e.g. UIDemo, ui.table.TableDemo, ui.button.ButtonDemo, ...)") + override fun setMain(mainClassName: String?) = super.setMain(mainClassName) +} + +val runDemo by tasks.registering(DemoTask::class) { + group = LifecycleBasePlugin.VERIFICATION_GROUP + description = "Launches demo (e.g. UIDemo, ui.table.TableDemo, ui.button.ButtonDemo, ...)" + + classpath(sourceSets.test.map { it.runtimeClasspath }) + + // Pass the property to the demo + // By default JavaExec is executed in its own JVM with its own properties + // It allows to pass system properties via gradlew -Ddarklaf.prop=value + fun passProperty(name: String, default: String? = null) { + val value = System.getProperty(name) ?: default + value?.let { systemProperty(name, it) } + } + val props = System.getProperties() + @Suppress("UNCHECKED_CAST") + for (e in props.propertyNames() as `java.util`.Enumeration) { + if (e.startsWith("darklaf.")) { + passProperty(e) + } + } + passProperty("java.awt.headless") +}