From 000388cb08f0c09e4c82094a6956f0e5ee5304a2 Mon Sep 17 00:00:00 2001 From: Red_Epicness Date: Mon, 9 Mar 2026 21:35:39 +0100 Subject: [PATCH] Build: Switch from `-Xjvm-default=all-compatibility` to `-Xjvm-default=all` So the Kotlin compiler longer generates the (unnecessary) DefaultImpls classes for new interfaces. Existing interfaces are annotated with JvmDefaultWithCompatibility to preserve backwards compatibility. The bump to our Kotlin dependency was required because JvmDefaultWithCompatibility was only introduced with Kotlin 1.6. But since we were compiling with 1.6 as our target, we were implicitly depending on that already anyway. Co-authored-by: Jonas Herzig --- build.gradle.kts | 2 +- gradle/libs.versions.toml | 2 +- .../elementa/components/image/ImageProvider.kt | 3 ++- .../gg/essential/elementa/constraints/Constraint.kt | 11 +++++++++++ .../kotlin/gg/essential/elementa/font/FontProvider.kt | 3 ++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8150c6e8..3c9dc8ee 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ kotlin.jvmToolchain { } tasks.withType { - setJvmDefault("all-compatibility") + setJvmDefault("all") kotlinOptions { languageVersion = "1.6" apiVersion = "1.6" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53a52545..91e581fa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin = "1.5.10" +kotlin = "1.6.21" kotlinx-coroutines = "1.5.2" jetbrains-annotations = "23.0.0" universalcraft = "406" diff --git a/src/main/kotlin/gg/essential/elementa/components/image/ImageProvider.kt b/src/main/kotlin/gg/essential/elementa/components/image/ImageProvider.kt index 2ec73e43..665de727 100644 --- a/src/main/kotlin/gg/essential/elementa/components/image/ImageProvider.kt +++ b/src/main/kotlin/gg/essential/elementa/components/image/ImageProvider.kt @@ -3,6 +3,7 @@ package gg.essential.elementa.components.image import gg.essential.universal.UMatrixStack import java.awt.Color +@JvmDefaultWithCompatibility interface ImageProvider { /** * Render the image provided by this component with the provided attributes. @@ -21,4 +22,4 @@ interface ImageProvider { fun drawImageCompat(matrixStack: UMatrixStack, x: Double, y: Double, width: Double, height: Double, color: Color): Unit = UMatrixStack.Compat.runLegacyMethod(matrixStack) { @Suppress("DEPRECATION") drawImage(x, y, width, height, color) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/gg/essential/elementa/constraints/Constraint.kt b/src/main/kotlin/gg/essential/elementa/constraints/Constraint.kt index fd263565..a55d79e2 100644 --- a/src/main/kotlin/gg/essential/elementa/constraints/Constraint.kt +++ b/src/main/kotlin/gg/essential/elementa/constraints/Constraint.kt @@ -15,6 +15,7 @@ import java.awt.Color * [T] is what this constraint deals with, for example Float for WidthConstraint * or Color for ColorConstraint */ +@JvmDefaultWithCompatibility interface SuperConstraint { var cachedValue: T var recalculate: Boolean @@ -54,6 +55,7 @@ interface SuperConstraint { fun visitImpl(visitor: ConstraintVisitor, type: ConstraintType) } +@JvmDefaultWithCompatibility interface GeneralConstraint : PositionConstraint, SizeConstraint { fun getXValue(component: UIComponent): Float @@ -70,8 +72,10 @@ interface GeneralConstraint : PositionConstraint, SizeConstraint { override fun getRadiusImpl(component: UIComponent) = getXValue(component) } +@JvmDefaultWithCompatibility interface PositionConstraint : XConstraint, YConstraint +@JvmDefaultWithCompatibility interface XConstraint : SuperConstraint { fun getXPositionImpl(component: UIComponent): Float @@ -79,6 +83,7 @@ interface XConstraint : SuperConstraint { getCachedDebuggable(component, ConstraintType.X) { getXPositionImpl(it).roundToRealPixels() } } +@JvmDefaultWithCompatibility interface YConstraint : SuperConstraint { fun getYPositionImpl(component: UIComponent): Float @@ -86,8 +91,10 @@ interface YConstraint : SuperConstraint { getCachedDebuggable(component, ConstraintType.Y) { getYPositionImpl(it).roundToRealPixels() } } +@JvmDefaultWithCompatibility interface SizeConstraint : WidthConstraint, HeightConstraint, RadiusConstraint +@JvmDefaultWithCompatibility interface RadiusConstraint : SuperConstraint { fun getRadiusImpl(component: UIComponent): Float @@ -95,6 +102,7 @@ interface RadiusConstraint : SuperConstraint { getCachedDebuggable(component, ConstraintType.RADIUS) { getRadiusImpl(it).roundToRealPixels() } } +@JvmDefaultWithCompatibility interface WidthConstraint : SuperConstraint { fun getWidthImpl(component: UIComponent): Float @@ -102,6 +110,7 @@ interface WidthConstraint : SuperConstraint { getCachedDebuggable(component, ConstraintType.WIDTH) { getWidthImpl(it).roundToRealPixels() } } +@JvmDefaultWithCompatibility interface HeightConstraint : SuperConstraint { fun getHeightImpl(component: UIComponent): Float @@ -113,6 +122,7 @@ interface HeightConstraint : SuperConstraint { } } +@JvmDefaultWithCompatibility interface ColorConstraint : SuperConstraint { fun getColorImpl(component: UIComponent): Color @@ -120,6 +130,7 @@ interface ColorConstraint : SuperConstraint { getCached(component) { getColorImpl(it) } } +@JvmDefaultWithCompatibility interface MasterConstraint : PositionConstraint, SizeConstraint private inline fun SuperConstraint.getCachedDebuggable(component: UIComponent, type: ConstraintType, getImpl: (UIComponent) -> Float): Float { diff --git a/src/main/kotlin/gg/essential/elementa/font/FontProvider.kt b/src/main/kotlin/gg/essential/elementa/font/FontProvider.kt index 9fe8c070..143ad42e 100644 --- a/src/main/kotlin/gg/essential/elementa/font/FontProvider.kt +++ b/src/main/kotlin/gg/essential/elementa/font/FontProvider.kt @@ -4,6 +4,7 @@ import gg.essential.elementa.constraints.SuperConstraint import gg.essential.universal.UMatrixStack import java.awt.Color +@JvmDefaultWithCompatibility interface FontProvider : SuperConstraint { fun getStringWidth(string: String, pointSize: Float): Float @@ -53,4 +54,4 @@ interface FontProvider : SuperConstraint { fun getShadowHeight(): Float fun getBelowLineHeight(): Float -} \ No newline at end of file +}