From 8a4a85d333618c082515fd9798e464f4b4002e0c Mon Sep 17 00:00:00 2001 From: Edwin Jakobs Date: Sun, 25 Aug 2024 09:39:18 +0200 Subject: [PATCH] Upgrade to Gradle 8.10, Kotlin 2.0.20, reduce warnings --- .../extra/convention/kotlin-jvm.gradle.kts | 20 ++++++------- .../kotlin-multiplatform.gradle.kts | 28 +++++++++-------- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- .../src/demo/kotlin/DemoImageLoadStore01.kt | 10 +++---- .../src/demo/kotlin/DemoImageLoadStore02.kt | 22 +++++++------- .../src/demo/kotlin/DemoVolumeTexture01.kt | 7 ++--- .../commonMain/kotlin/ParametricOrbital.kt | 2 ++ .../src/commonMain/kotlin/Compositor.kt | 2 ++ .../src/commonMain/kotlin/typed/Function1.kt | 2 ++ .../kotlin/typed/MemberFunctions.kt | 30 +++++++++++++------ .../kotlin/typed/TypedExpressions.kt | 16 ++++++---- .../kotlin/typed/TestTypedExpression.kt | 5 ++-- orx-expression-evaluator/build.gradle.kts | 4 +-- .../src/commonMain/kotlin/HashGrid.kt | 2 +- .../src/commonMain/kotlin/HashGrid3D.kt | 2 +- .../src/commonMain/kotlin/fx/Inpaint.kt | 2 ++ .../src/main/kotlin/gltf/GltfScene.kt | 2 -- .../src/main/kotlin/tools/MeshCollapse.kt | 4 +-- orx-jvm/orx-file-watcher/build.gradle.kts | 4 ++- orx-jvm/orx-keyframer/build.gradle.kts | 4 ++- orx-jvm/orx-kotlin-parser/build.gradle.kts | 4 ++- orx-jvm/orx-olive/build.gradle.kts | 4 ++- .../main/kotlin/ScriptObjectLoaderJSR233.kt | 1 + orx-jvm/orx-panel/build.gradle.kts | 4 ++- .../openrndr/panel/elements/LayoutBuilder.kt | 2 +- .../org/openrndr/panel/hash/WatchHash.kt | 2 +- .../commonMain/kotlin/filters/CellNoise.kt | 2 ++ .../commonMain/kotlin/filters/HashNoise.kt | 2 ++ .../kotlin/filters/SimplexNoise3D.kt | 2 ++ .../commonMain/kotlin/filters/SpeckleNoise.kt | 2 ++ .../commonMain/kotlin/filters/ValueNoise.kt | 2 ++ .../commonMain/kotlin/filters/WorleyNoise.kt | 2 ++ orx-palette/src/main/kotlin/PaletteStudio.kt | 2 +- .../src/commonMain/kotlin/Quadtree.kt | 2 +- .../src/commonMain/kotlin/TextWriter.kt | 7 +++++ 37 files changed, 133 insertions(+), 81 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-jvm.gradle.kts index 72ae10b5..3fde7b28 100644 --- a/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-jvm.gradle.kts +++ b/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-jvm.gradle.kts @@ -5,6 +5,8 @@ import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion val libs = the() @@ -22,8 +24,6 @@ if (shouldPublish) { apply(plugin = "maven-publish") } -//apply(plugin = "nebula.release") - repositories { mavenCentral() mavenLocal() @@ -57,8 +57,6 @@ dependencies { "demoRuntimeOnly"(libs.slf4j.simple) } - - tasks { @Suppress("UNUSED_VARIABLE") val test by getting(Test::class) { @@ -76,12 +74,14 @@ tasks { addBooleanOption("Xdoclint:none", true) } } - withType() { - kotlinOptions.jvmTarget = libs.versions.jvmTarget.get() - kotlinOptions.apiVersion = libs.versions.kotlinApi.get() - kotlinOptions.languageVersion = libs.versions.kotlinLanguage.get() - kotlinOptions.freeCompilerArgs += "-Xexpect-actual-classes" - kotlinOptions.freeCompilerArgs += "-Xjdk-release=${libs.versions.jvmTarget.get()}" + withType { + compilerOptions { + jvmTarget.set(JvmTarget.valueOf("JVM_${libs.versions.jvmTarget.get()}")) + freeCompilerArgs.add("-Xexpect-actual-classes") + freeCompilerArgs.add("-Xjdk-release=${libs.versions.jvmTarget.get()}") + apiVersion.set(KotlinVersion.valueOf("KOTLIN_${libs.versions.kotlinApi.get().replace(".", "_")}")) + languageVersion.set(KotlinVersion.valueOf("KOTLIN_${libs.versions.kotlinApi.get().replace(".", "_")}")) + } } } diff --git a/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-multiplatform.gradle.kts b/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-multiplatform.gradle.kts index 07e2cd0e..3de88e33 100644 --- a/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-multiplatform.gradle.kts +++ b/buildSrc/src/main/kotlin/org/openrndr/extra/convention/kotlin-multiplatform.gradle.kts @@ -4,11 +4,12 @@ import CollectScreenshotsTask import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile - val libs = the() val shouldPublish = project.name !in setOf("openrndr-demos") @@ -31,14 +32,19 @@ repositories { group = "org.openrndr.extra" -tasks.withType> { - kotlinOptions.apiVersion = libs.versions.kotlinApi.get() - kotlinOptions.languageVersion = libs.versions.kotlinLanguage.get() - kotlinOptions.freeCompilerArgs += "-Xexpect-actual-classes" - kotlinOptions.freeCompilerArgs += "-Xjdk-release=${libs.versions.jvmTarget.get()}" +tasks.withType> { + compilerOptions { + apiVersion.set(KotlinVersion.valueOf("KOTLIN_${libs.versions.kotlinApi.get().replace(".", "_")}")) + languageVersion.set(KotlinVersion.valueOf("KOTLIN_${libs.versions.kotlinApi.get().replace(".", "_")}")) + freeCompilerArgs.add("-Xexpect-actual-classes") + } } + tasks.withType().configureEach { - compilerOptions.jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get())) + compilerOptions { + jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get())) + freeCompilerArgs.add("-Xjdk-release=${libs.versions.jvmTarget.get()}") + } } kotlin { @@ -46,7 +52,6 @@ kotlin { compilations { val main by getting - @Suppress("UNUSED_VARIABLE") val demo by creating { associateWith(main) tasks.register("collectScreenshots") { @@ -74,7 +79,6 @@ kotlin { } sourceSets { - @Suppress("UNUSED_VARIABLE") val commonMain by getting { dependencies { implementation(libs.kotlin.stdlib) @@ -82,14 +86,12 @@ kotlin { } } - @Suppress("UNUSED_VARIABLE") val commonTest by getting { dependencies { implementation(libs.kotlin.test) } } - @Suppress("UNUSED_VARIABLE") val jvmTest by getting { dependencies { runtimeOnly(libs.bundles.jupiter) @@ -97,7 +99,6 @@ kotlin { } } - @Suppress("UNUSED_VARIABLE") val jvmDemo by getting { dependencies { implementation(libs.openrndr.application) @@ -181,6 +182,7 @@ if (shouldPublish) { } kotlin { + @OptIn(ExperimentalKotlinGradlePluginApi::class) jvm().mainRun { classpath(kotlin.jvm().compilations.getByName("demo").output.allOutputs) classpath(kotlin.jvm().compilations.getByName("demo").configurations.runtimeDependencyConfiguration!!) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 642a8801..5bff81cd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlinApi = "2.0" kotlinLanguage = "2.0" -kotlin = "2.0.10" +kotlin = "2.0.20" jvmTarget = "17" openrndr = { require = "[0.4.2, 0.5.0)" } kotlinxCoroutines = "1.8.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138..9355b415 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42..b740cf13 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/openrndr-demos/src/demo/kotlin/DemoImageLoadStore01.kt b/openrndr-demos/src/demo/kotlin/DemoImageLoadStore01.kt index 506882b7..8831a91a 100644 --- a/openrndr-demos/src/demo/kotlin/DemoImageLoadStore01.kt +++ b/openrndr-demos/src/demo/kotlin/DemoImageLoadStore01.kt @@ -10,8 +10,7 @@ fun main() = application { program { val shader = Shader.createFromCode(vsCode = - """ -#version 430 + """${Driver.instance.shaderConfiguration()} in vec3 a_position; in vec2 a_texCoord0; in vec3 a_normal; @@ -22,16 +21,15 @@ void main() { gl_Position = projMatrix * vec4(a_position, 1.0); } """, - fsCode = """ -#version 430 + fsCode = """${Driver.instance.shaderConfiguration()} out vec4 o_color; -layout(rgba8) uniform image2D bla; +layout(rgba8) uniform writeonly image2D bla; void main() { imageStore(bla, ivec2(30,30), vec4(1.0, 0.0, 0.0, 1.0)); o_color = vec4(1.0); } """, name = "ils") - val cb = colorBuffer(128, 128) + val cb = colorBuffer(128, 128, type = ColorType.UINT8) val mesh = planeMesh(Vector3.ZERO, Vector3.UNIT_X, Vector3.UNIT_Y, -Vector3.UNIT_Z, 100.0, 100.0) extend { diff --git a/openrndr-demos/src/demo/kotlin/DemoImageLoadStore02.kt b/openrndr-demos/src/demo/kotlin/DemoImageLoadStore02.kt index 4a06eb1c..ddbb86a3 100644 --- a/openrndr-demos/src/demo/kotlin/DemoImageLoadStore02.kt +++ b/openrndr-demos/src/demo/kotlin/DemoImageLoadStore02.kt @@ -1,25 +1,25 @@ import org.openrndr.application import org.openrndr.color.ColorRGBa -import org.openrndr.draw.ImageAccess -import org.openrndr.draw.colorBuffer -import org.openrndr.draw.imageBinding -import org.openrndr.draw.shadeStyle +import org.openrndr.draw.* fun main() = application { program { - val cb = colorBuffer(128, 128) - extend { - val ss = shadeStyle { - fragmentTransform = """ - imageStore(p_image, ivec2(30.0, 30.0), vec4(1.0, 0.0, 0.0, 1.0)); + val cb = colorBuffer(128, 128, type = ColorType.UINT8) + cb.fill(ColorRGBa.BLACK) + val ss = shadeStyle { + fragmentTransform = """ + imageStore(p_image, ivec2(30, 30), vec4(1.0, 0.0, 0.0, 1.0)); """.trimIndent() - parameter("image", cb.imageBinding(0, ImageAccess.READ_WRITE)) - } + image("image", cb.imageBinding(0, ImageAccess.WRITE)) + } + extend { + drawer.shadeStyle = ss drawer.clear(ColorRGBa.PINK) drawer.rectangle(0.0, 0.0, 100.0, 100.0) + drawer.shadeStyle = null drawer.image(cb, 0.0, 200.0) } } diff --git a/openrndr-demos/src/demo/kotlin/DemoVolumeTexture01.kt b/openrndr-demos/src/demo/kotlin/DemoVolumeTexture01.kt index 0acb8786..fb28ef52 100644 --- a/openrndr-demos/src/demo/kotlin/DemoVolumeTexture01.kt +++ b/openrndr-demos/src/demo/kotlin/DemoVolumeTexture01.kt @@ -1,13 +1,10 @@ import org.openrndr.application import org.openrndr.color.ColorRGBa -import org.openrndr.draw.VolumeTexture -import org.openrndr.draw.colorBuffer -import org.openrndr.draw.isolatedWithTarget -import org.openrndr.draw.renderTarget +import org.openrndr.draw.* fun main() = application { program { - val volumeTexture = VolumeTexture.create(128,128,32) + val volumeTexture = VolumeTexture.create(128,128,32, type = ColorType.UINT8) val rt = renderTarget(128, 128) { volumeTexture(volumeTexture, 0) } diff --git a/orx-camera/src/commonMain/kotlin/ParametricOrbital.kt b/orx-camera/src/commonMain/kotlin/ParametricOrbital.kt index 513ffe64..44d90063 100644 --- a/orx-camera/src/commonMain/kotlin/ParametricOrbital.kt +++ b/orx-camera/src/commonMain/kotlin/ParametricOrbital.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.camera import org.openrndr.Extension diff --git a/orx-compositor/src/commonMain/kotlin/Compositor.kt b/orx-compositor/src/commonMain/kotlin/Compositor.kt index e3b4ea30..5fb3fa47 100644 --- a/orx-compositor/src/commonMain/kotlin/Compositor.kt +++ b/orx-compositor/src/commonMain/kotlin/Compositor.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.compositor import org.openrndr.Extension diff --git a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/Function1.kt b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/Function1.kt index 92d2b5ee..162f0409 100644 --- a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/Function1.kt +++ b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/Function1.kt @@ -18,6 +18,7 @@ internal fun vec2(x: Any): Vector2 { is List<*> -> { when (x.size) { 2 -> { + @Suppress("UNCHECKED_CAST") x as List; Vector2(x[0], x[1]) } @@ -172,6 +173,7 @@ internal fun translate(translation: Any): Matrix44 { internal fun mat4(x: Any): Matrix44 { return when (x) { is List<*> -> { + @Suppress("UNCHECKED_CAST") when (x.size) { 16 -> Matrix44.fromDoubleArray((x as List).toDoubleArray()) 4 -> { diff --git a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/MemberFunctions.kt b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/MemberFunctions.kt index 1f4f3a0b..b102666f 100644 --- a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/MemberFunctions.kt +++ b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/MemberFunctions.kt @@ -20,32 +20,44 @@ internal fun List<*>.memberFunctions(n: String): ((Array) -> Any)? { "drop" -> { n -> this.drop((n[0] as Number).toInt()) } "takeLast" -> { n -> this.takeLast((n[0] as Number).toInt()) } "dropLast" -> { n -> this.takeLast((n[0] as Number).toInt()) } - "map" -> { n -> val lambda = (n[0] as (Any) -> Any); this.map { lambda(it!!) } } + "map" -> { n -> @Suppress("UNCHECKED_CAST") val lambda = (n[0] as (Any) -> Any); this.map { lambda(it!!) } } "filter" -> { n -> val lambda = (n[0] as (Any) -> Any); this.filter { (lambda(it!!) as Double).roundToInt() != 0 } } - "max" -> { n -> (this as List>).max() } - "min" -> { n -> (this as List>).min() } + "max" -> { n -> + @Suppress("UNCHECKED_CAST") + (this as List>).max() + } + "min" -> { n -> + @Suppress("UNCHECKED_CAST") + (this as List>).min() + } "maxBy" -> { n -> - val lambda = (n[0] as (Any) -> Any); this.maxByOrNull { lambda(it!!) as Comparable } ?: error("no max") + @Suppress("UNCHECKED_CAST") val lambda = (n[0] as (Any) -> Any); this.maxByOrNull { lambda(it!!) as Comparable } ?: error("no max") } "minBy" -> { n -> - val lambda = (n[0] as (Any) -> Any); this.minByOrNull { lambda(it!!) as Comparable } ?: error("no max") + @Suppress("UNCHECKED_CAST") val lambda = (n[0] as (Any) -> Any); this.minByOrNull { lambda(it!!) as Comparable } ?: error("no max") } - "sorted" -> { n -> (this as List>).sorted() } + "sorted" -> { n -> + @Suppress("UNCHECKED_CAST") + (this as List>).sorted() + } "sortedBy" -> { n -> - val lambda = (n[0] as (Any) -> Any); this.sortedBy { lambda(it!!) as Comparable } + @Suppress("UNCHECKED_CAST") val lambda = (n[0] as (Any) -> Any); this.sortedBy { lambda(it!!) as Comparable } } "sortedByDescending" -> { n -> - val lambda = (n[0] as (Any) -> Any); this.sortedByDescending { lambda(it!!) as Comparable } + @Suppress("UNCHECKED_CAST") val lambda = (n[0] as (Any) -> Any); this.sortedByDescending { lambda(it!!) as Comparable } } "reversed" -> { n -> this.reversed() } - "zip" -> { n -> this.zip(n[0] as List).map { listOf(it.first, it.second) } } + "zip" -> { n -> + @Suppress("UNCHECKED_CAST") + this.zip(n[0] as List).map { listOf(it.first, it.second) } + } else -> null } diff --git a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/TypedExpressions.kt b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/TypedExpressions.kt index a66de688..bb74a7e0 100644 --- a/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/TypedExpressions.kt +++ b/orx-expression-evaluator-typed/src/commonMain/kotlin/typed/TypedExpressions.kt @@ -156,7 +156,7 @@ abstract class TypedExpressionListenerBase( val index = (s.valueStack.pop() as? Double)?.roundToInt() ?: error("index is not a number") val listValue = s.valueStack.pop() - val value = when (listValue) { + @Suppress("UNCHECKED_CAST") val value = when (listValue) { is List<*> -> listValue[index] ?: error("got null") is Function<*> -> (listValue as (Int) -> Any)(index) else -> error("can't index on '$listValue'") @@ -216,6 +216,7 @@ abstract class TypedExpressionListenerBase( ) } + @Suppress("IMPLICIT_CAST_TO_ANY") override fun exitBinaryOperation1(ctx: KeyLangParser.BinaryOperation1Context) { val s = state if (s.inFunctionLiteral > 0) { @@ -759,6 +760,7 @@ abstract class TypedExpressionListenerBase( } + @Suppress("MoveLambdaOutsideParentheses") override fun visitTerminal(node: TerminalNode) { val s = state if (s.inFunctionLiteral > 0) { @@ -835,26 +837,30 @@ abstract class TypedExpressionListenerBase( is Function<*> -> { @Suppress("UNCHECKED_CAST") receiver as (String) -> Any - @Suppress("UNCHECKED_CAST") val function = - receiver.invoke(name) ?: error("no such function $name") + val function = + receiver.invoke(name) when (idType) { IDType.MEMBER_FUNCTION0 -> { + @Suppress("UNCHECKED_CAST") function as () -> Any s.functionStack.push({ function() }) } IDType.MEMBER_FUNCTION1 -> { + @Suppress("UNCHECKED_CAST") function as (Any) -> Any s.functionStack.push({ x -> function(x[0]) }) } IDType.MEMBER_FUNCTION2 -> { + @Suppress("UNCHECKED_CAST") function as (Any, Any) -> Any s.functionStack.push({ x -> function(x[0], x[1]) }) } IDType.MEMBER_FUNCTION3 -> { + @Suppress("UNCHECKED_CAST") function as (Any, Any, Any) -> Any s.functionStack.push({ x -> function(x[0], x[1], x[2]) }) } @@ -873,13 +879,13 @@ abstract class TypedExpressionListenerBase( } IDType.FUNCTION1 -> { - val s = state + val localState = state val function: (Array) -> Any = dispatchFunction1(name, functions.functions1) ?: errorValue( "unresolved function: '${name}(x0)'" ) { _ -> error("this is the error function") } - s.functionStack.push(function) + localState.functionStack.push(function) } IDType.FUNCTION2 -> { diff --git a/orx-expression-evaluator-typed/src/jvmTest/kotlin/typed/TestTypedExpression.kt b/orx-expression-evaluator-typed/src/jvmTest/kotlin/typed/TestTypedExpression.kt index d3a699a4..e7a121a5 100644 --- a/orx-expression-evaluator-typed/src/jvmTest/kotlin/typed/TestTypedExpression.kt +++ b/orx-expression-evaluator-typed/src/jvmTest/kotlin/typed/TestTypedExpression.kt @@ -11,12 +11,12 @@ class TestTypedExpression { fun funTestFunction() { run { val r = evaluateTypedExpression("{ x -> 2.0 + x }") - val f = r as (Double) -> Double + @Suppress("UNCHECKED_CAST") val f = r as (Double) -> Double println(f(3.0)) } run { val r = evaluateTypedExpression("{ { 2.0 + it } }") - val f0 = r as (Any) -> ((Any) -> Any) + @Suppress("UNCHECKED_CAST") val f0 = r as (Any) -> ((Any) -> Any) val f1 = f0(0.0) println(f1(3.0)) } @@ -102,6 +102,7 @@ class TestTypedExpression { return fun(p: String): Any? { val v = this[p] if (v is Map<*, *>) { + @Suppress("UNCHECKED_CAST") return (v as Map).function() } else { return v diff --git a/orx-expression-evaluator/build.gradle.kts b/orx-expression-evaluator/build.gradle.kts index 1a03c22a..cea03475 100644 --- a/orx-expression-evaluator/build.gradle.kts +++ b/orx-expression-evaluator/build.gradle.kts @@ -1,5 +1,5 @@ import com.strumenta.antlrkotlin.gradle.AntlrKotlinTask -import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask plugins { org.openrndr.extra.convention.`kotlin-multiplatform` @@ -55,7 +55,7 @@ kotlin { } } -tasks.withType> { +tasks.withType> { dependsOn(generateKotlinGrammarSource) } diff --git a/orx-hash-grid/src/commonMain/kotlin/HashGrid.kt b/orx-hash-grid/src/commonMain/kotlin/HashGrid.kt index 986734d0..e09f2dba 100644 --- a/orx-hash-grid/src/commonMain/kotlin/HashGrid.kt +++ b/orx-hash-grid/src/commonMain/kotlin/HashGrid.kt @@ -81,7 +81,7 @@ class HashGrid(val radius: Double) { private set val cellSize = radius / sqrt(2.0) - private inline fun coords(v: Vector2): GridCoords { + private fun coords(v: Vector2): GridCoords { val x = (v.x / cellSize).fastFloor() val y = (v.y / cellSize).fastFloor() return GridCoords(x, y) diff --git a/orx-hash-grid/src/commonMain/kotlin/HashGrid3D.kt b/orx-hash-grid/src/commonMain/kotlin/HashGrid3D.kt index aa8dcf8f..14368b55 100644 --- a/orx-hash-grid/src/commonMain/kotlin/HashGrid3D.kt +++ b/orx-hash-grid/src/commonMain/kotlin/HashGrid3D.kt @@ -87,7 +87,7 @@ class HashGrid3D(val radius: Double) { private set val cellSize = radius / sqrt(3.0) - private inline fun coords(v: Vector3): GridCoords3D { + private fun coords(v: Vector3): GridCoords3D { val x = (v.x / cellSize).fastFloor() val y = (v.y / cellSize).fastFloor() val z = (v.z / cellSize).fastFloor() diff --git a/orx-jumpflood/src/commonMain/kotlin/fx/Inpaint.kt b/orx-jumpflood/src/commonMain/kotlin/fx/Inpaint.kt index fed89bc1..9be51b2c 100644 --- a/orx-jumpflood/src/commonMain/kotlin/fx/Inpaint.kt +++ b/orx-jumpflood/src/commonMain/kotlin/fx/Inpaint.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.jumpfill.fx import org.openrndr.draw.* diff --git a/orx-jvm/orx-dnk3/src/main/kotlin/gltf/GltfScene.kt b/orx-jvm/orx-dnk3/src/main/kotlin/gltf/GltfScene.kt index c2d699c9..4573e731 100644 --- a/orx-jvm/orx-dnk3/src/main/kotlin/gltf/GltfScene.kt +++ b/orx-jvm/orx-dnk3/src/main/kotlin/gltf/GltfScene.kt @@ -90,7 +90,6 @@ fun GltfFile.buildSceneNodes(): GltfSceneData { val localBuffer = buffers[localBufferView.buffer].contents(this@buildSceneNodes) require(localBufferView.byteOffset != null) - require(localBufferView.byteLength != null) localBuffer.position(localBufferView.byteOffset) localBuffer.limit(localBufferView.byteOffset + localBufferView.byteLength) @@ -321,7 +320,6 @@ fun GltfFile.buildSceneNodes(): GltfSceneData { val scenes = scenes.map { scene -> scene.nodes.map { node -> val gltfNode = nodes.getOrNull(node) ?: error("node not found: $node") - require(gltfNode != null) val sceneNode = gltfNode.createSceneNode() sceneNode } diff --git a/orx-jvm/orx-dnk3/src/main/kotlin/tools/MeshCollapse.kt b/orx-jvm/orx-dnk3/src/main/kotlin/tools/MeshCollapse.kt index 5721e8a0..80bb4dc6 100644 --- a/orx-jvm/orx-dnk3/src/main/kotlin/tools/MeshCollapse.kt +++ b/orx-jvm/orx-dnk3/src/main/kotlin/tools/MeshCollapse.kt @@ -19,12 +19,12 @@ fun Mesh.collapse() { } grouped.map { - val vertexCount = it.value.sumBy { primitive -> + val vertexCount = it.value.sumOf { primitive -> primitive.geometry.vertexCount } val indexCount = if (it.key.hasIndexBuffer) - it.value.sumBy { primitive -> + it.value.sumOf { primitive -> primitive.geometry.indexBuffer?.indexCount ?: 0 } else 0 diff --git a/orx-jvm/orx-file-watcher/build.gradle.kts b/orx-jvm/orx-file-watcher/build.gradle.kts index a6c4d79d..95c84212 100644 --- a/orx-jvm/orx-file-watcher/build.gradle.kts +++ b/orx-jvm/orx-file-watcher/build.gradle.kts @@ -5,7 +5,9 @@ plugins { } tasks.withType { - kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } } dependencies { diff --git a/orx-jvm/orx-keyframer/build.gradle.kts b/orx-jvm/orx-keyframer/build.gradle.kts index 3d2d569a..2813e509 100644 --- a/orx-jvm/orx-keyframer/build.gradle.kts +++ b/orx-jvm/orx-keyframer/build.gradle.kts @@ -5,7 +5,9 @@ plugins { } tasks.withType { - kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } } dependencies { diff --git a/orx-jvm/orx-kotlin-parser/build.gradle.kts b/orx-jvm/orx-kotlin-parser/build.gradle.kts index e4457eff..28aebeb3 100644 --- a/orx-jvm/orx-kotlin-parser/build.gradle.kts +++ b/orx-jvm/orx-kotlin-parser/build.gradle.kts @@ -11,7 +11,9 @@ tasks.generateGrammarSource { } tasks.withType { - kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } } dependencies { diff --git a/orx-jvm/orx-olive/build.gradle.kts b/orx-jvm/orx-olive/build.gradle.kts index ee82d017..24b0a584 100644 --- a/orx-jvm/orx-olive/build.gradle.kts +++ b/orx-jvm/orx-olive/build.gradle.kts @@ -5,7 +5,9 @@ plugins { } tasks.withType { - kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } } tasks.test { diff --git a/orx-jvm/orx-olive/src/main/kotlin/ScriptObjectLoaderJSR233.kt b/orx-jvm/orx-olive/src/main/kotlin/ScriptObjectLoaderJSR233.kt index e7affbf3..f061bf9a 100644 --- a/orx-jvm/orx-olive/src/main/kotlin/ScriptObjectLoaderJSR233.kt +++ b/orx-jvm/orx-olive/src/main/kotlin/ScriptObjectLoaderJSR233.kt @@ -5,6 +5,7 @@ import java.io.File import java.io.InputStream import java.io.Reader import java.net.MalformedURLException +import java.net.URI import java.net.URL import javax.script.ScriptEngineManager diff --git a/orx-jvm/orx-panel/build.gradle.kts b/orx-jvm/orx-panel/build.gradle.kts index 1fb9aaaa..4035f6fd 100644 --- a/orx-jvm/orx-panel/build.gradle.kts +++ b/orx-jvm/orx-panel/build.gradle.kts @@ -5,7 +5,9 @@ plugins { } tasks.withType { - kotlinOptions.freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn") + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + } } tasks.test { diff --git a/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/elements/LayoutBuilder.kt b/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/elements/LayoutBuilder.kt index 68045ffa..dda5e28f 100644 --- a/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/elements/LayoutBuilder.kt +++ b/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/elements/LayoutBuilder.kt @@ -88,7 +88,7 @@ fun Element.div(vararg classes: String, init: Div.() -> Unit): Div { } inline fun Element.textElement(classes: Array, init: T.() -> String): T { - val te = T::class.java.newInstance() + @Suppress("DEPRECATION") val te = T::class.java.newInstance() te.classes.addAll(classes.map { ElementClass(it) }) te.text(te.init()) append(te) diff --git a/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/hash/WatchHash.kt b/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/hash/WatchHash.kt index 04fa2e5a..bbb2ec1e 100644 --- a/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/hash/WatchHash.kt +++ b/orx-jvm/orx-panel/src/main/kotlin/org/openrndr/panel/hash/WatchHash.kt @@ -7,7 +7,7 @@ import kotlin.reflect.full.declaredMemberProperties fun watchHash(toHash: Any): Int { var hash = 0 for (property in toHash::class.declaredMemberProperties) { - val v = ((property as KProperty1).getter).invoke(toHash) + @Suppress("UNCHECKED_CAST") val v = ((property as KProperty1).getter).invoke(toHash) if (v is KProperty0<*>) { val pv = v.get() hash = 31 * hash + (pv?.hashCode() ?: 0) diff --git a/orx-noise/src/commonMain/kotlin/filters/CellNoise.kt b/orx-noise/src/commonMain/kotlin/filters/CellNoise.kt index 80b214c3..3f98eeb1 100644 --- a/orx-noise/src/commonMain/kotlin/filters/CellNoise.kt +++ b/orx-noise/src/commonMain/kotlin/filters/CellNoise.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.draw.Filter diff --git a/orx-noise/src/commonMain/kotlin/filters/HashNoise.kt b/orx-noise/src/commonMain/kotlin/filters/HashNoise.kt index e5fe9adc..506a4487 100644 --- a/orx-noise/src/commonMain/kotlin/filters/HashNoise.kt +++ b/orx-noise/src/commonMain/kotlin/filters/HashNoise.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.draw.Filter diff --git a/orx-noise/src/commonMain/kotlin/filters/SimplexNoise3D.kt b/orx-noise/src/commonMain/kotlin/filters/SimplexNoise3D.kt index e41054c5..6aab870b 100644 --- a/orx-noise/src/commonMain/kotlin/filters/SimplexNoise3D.kt +++ b/orx-noise/src/commonMain/kotlin/filters/SimplexNoise3D.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.draw.Filter diff --git a/orx-noise/src/commonMain/kotlin/filters/SpeckleNoise.kt b/orx-noise/src/commonMain/kotlin/filters/SpeckleNoise.kt index 037c4e24..a4704de7 100644 --- a/orx-noise/src/commonMain/kotlin/filters/SpeckleNoise.kt +++ b/orx-noise/src/commonMain/kotlin/filters/SpeckleNoise.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.color.ColorRGBa diff --git a/orx-noise/src/commonMain/kotlin/filters/ValueNoise.kt b/orx-noise/src/commonMain/kotlin/filters/ValueNoise.kt index e181509d..60a0a1e4 100644 --- a/orx-noise/src/commonMain/kotlin/filters/ValueNoise.kt +++ b/orx-noise/src/commonMain/kotlin/filters/ValueNoise.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.draw.Filter diff --git a/orx-noise/src/commonMain/kotlin/filters/WorleyNoise.kt b/orx-noise/src/commonMain/kotlin/filters/WorleyNoise.kt index 4041e798..dbfdcee5 100644 --- a/orx-noise/src/commonMain/kotlin/filters/WorleyNoise.kt +++ b/orx-noise/src/commonMain/kotlin/filters/WorleyNoise.kt @@ -1,3 +1,5 @@ +@file:Suppress("RUNTIME_ANNOTATION_NOT_SUPPORTED") + package org.openrndr.extra.noise.filters import org.openrndr.draw.Filter diff --git a/orx-palette/src/main/kotlin/PaletteStudio.kt b/orx-palette/src/main/kotlin/PaletteStudio.kt index 1a30c4dd..066aa802 100644 --- a/orx-palette/src/main/kotlin/PaletteStudio.kt +++ b/orx-palette/src/main/kotlin/PaletteStudio.kt @@ -219,7 +219,7 @@ class PaletteStudio( fun randomPalette() { val comparison = palette.colors.toMutableList() - val colors = Random.pick(palettes, comparison) as MutableList + @Suppress("UNCHECKED_CAST") val colors = Random.pick(palettes, comparison) as MutableList paletteIndex = palettes.indexOf(colors) palette = createPalette(colors) diff --git a/orx-quadtree/src/commonMain/kotlin/Quadtree.kt b/orx-quadtree/src/commonMain/kotlin/Quadtree.kt index 5a065a30..202a4de7 100644 --- a/orx-quadtree/src/commonMain/kotlin/Quadtree.kt +++ b/orx-quadtree/src/commonMain/kotlin/Quadtree.kt @@ -224,7 +224,7 @@ class Quadtree(val bounds: Rectangle, val maxObjects: Int = 10, val mapper: ( } private fun intersect(rect: Rectangle): List>? { - val intersects = intersects(bounds, rect) + val intersects = bounds.intersects(rect) if (!intersects) return null diff --git a/orx-text-writer/src/commonMain/kotlin/TextWriter.kt b/orx-text-writer/src/commonMain/kotlin/TextWriter.kt index 95f34af4..467a2c99 100644 --- a/orx-text-writer/src/commonMain/kotlin/TextWriter.kt +++ b/orx-text-writer/src/commonMain/kotlin/TextWriter.kt @@ -5,6 +5,9 @@ import org.openrndr.draw.Drawer import org.openrndr.draw.FontImageMap import org.openrndr.math.Vector2 import org.openrndr.shape.Rectangle +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract class Cursor(var x: Double = 0.0, var y: Double = 0.0) { constructor(cursor: Cursor) : this(cursor.x, cursor.y) @@ -205,7 +208,11 @@ class TextWriter(val drawerRef: Drawer?) { } } +@OptIn(ExperimentalContracts::class) fun writer(drawer: Drawer, f: TextWriter.() -> T): T { + contract { + callsInPlace(f, InvocationKind.EXACTLY_ONCE) + } val textWriter = TextWriter(drawer) return textWriter.f() } \ No newline at end of file