Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/continuous_integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: 8
java-version: 11
- name: Setup gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # version 4.4.2
- name: Test
Expand Down
9 changes: 2 additions & 7 deletions base/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@ repositories {
mavenCentral()
}

kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(project.findProperty("target")))
}
}

dependencies {
api(libs.proguard.core)
Expand Down Expand Up @@ -45,14 +40,14 @@ jar {
// Early access automatic downloads are not yet supported:
// https://github.com/gradle/gradle/issues/14814
// But it will work if e.g. Java N-ea is pre-installed
def javaVersionsForTest = 9..23
def javaVersionsForTest = 12..25

test {
useJUnitPlatform()
}

def testAllJavaVersion = tasks.register("testAllJavaVersions"){ testAllTask ->
dependsOn(test) // the usual test runs on Java 8
dependsOn(test) // the usual test runs on Java 11
}

javaVersionsForTest.each {version ->
Expand Down
4 changes: 2 additions & 2 deletions base/src/test/kotlin/proguard/Java19RecordPatternTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import io.kotest.core.spec.style.FreeSpec
import io.kotest.matchers.shouldNotBe
import proguard.testutils.ClassPoolBuilder
import proguard.testutils.JavaSource
import testutils.RequiresJavaVersion
import testutils.RequiresJavaExtension

@RequiresJavaVersion(19, 19)
class Java19RecordPatternTest : FreeSpec({
extension(RequiresJavaExtension(from = 19, to = 19))
"Given a class with Java record pattern" - {
val (programClassPool, _) =
ClassPoolBuilder.fromSource(
Expand Down
4 changes: 2 additions & 2 deletions base/src/test/kotlin/proguard/Java20RecordPatternTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import io.kotest.core.spec.style.FreeSpec
import io.kotest.matchers.shouldNotBe
import proguard.testutils.ClassPoolBuilder
import proguard.testutils.JavaSource
import testutils.RequiresJavaVersion
import testutils.RequiresJavaExtension

@RequiresJavaVersion(20, 20)
class Java20RecordPatternTest : FreeSpec({
extension(RequiresJavaExtension(from = 20, to = 20))
"Given a class with Java record pattern" - {
val (programClassPool, _) =
ClassPoolBuilder.fromSource(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ import proguard.optimize.info.ProgramClassOptimizationInfoSetter
import proguard.optimize.info.ProgramMemberOptimizationInfoSetter
import proguard.testutils.ClassPoolBuilder
import proguard.testutils.JavaSource
import testutils.RequiresJavaVersion

@RequiresJavaVersion(9)
class MethodInlinerJava9Test : FreeSpec({
isolationMode = IsolationMode.InstancePerTest

Expand Down
7 changes: 4 additions & 3 deletions base/src/test/kotlin/proguard/shrink/UsageMarkerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ import proguard.classfile.visitor.MultiClassVisitor
import proguard.resources.file.ResourceFilePool
import proguard.testutils.ClassPoolBuilder
import proguard.testutils.JavaSource
import proguard.testutils.RequiresJavaVersion
import testutils.RequiresJavaExtension
import proguard.util.ProcessingFlagSetter
import proguard.util.ProcessingFlags.DONT_SHRINK
import testutils.currentJavaVersion

class UsageMarkerTest : BehaviorSpec({
Given("A class pool with interfaces only referenced through annotations") {
Expand Down Expand Up @@ -89,8 +90,8 @@ class UsageMarkerTest : BehaviorSpec({

})

@RequiresJavaVersion(15)
class Java15UsageMarkerTest : BehaviorSpec({
extension(RequiresJavaExtension(from = 15))
// Regression test for https://github.com/Guardsquare/proguard/issues/501
Given("A class pool containing a sealed interface extending another sealed interface, and final classes implementing both") {
val (programClassPool, _) = ClassPoolBuilder.fromSource(
Expand Down Expand Up @@ -169,7 +170,7 @@ class Java15UsageMarkerTest : BehaviorSpec({
}

""".trimIndent()
), javacArguments = listOf("--enable-preview", "--release", "15"),
), javacArguments = if (currentJavaVersion in 15..16) listOf("--enable-preview", "--release", "$currentJavaVersion") else emptyList(),
)
val animal = programClassPool.getClass("sample/Animal")

Expand Down
37 changes: 13 additions & 24 deletions base/src/test/kotlin/testutils/TestConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,21 @@
package testutils

import io.kotest.core.config.AbstractProjectConfig
import io.kotest.core.extensions.Extension
import io.kotest.core.filter.SpecFilter
import io.kotest.core.filter.SpecFilterResult
import io.kotest.core.filter.SpecFilterResult.Exclude
import io.kotest.core.filter.SpecFilterResult.Include
import kotlin.reflect.KClass
import kotlin.reflect.full.findAnnotation
import io.kotest.core.extensions.SpecExtension
import io.kotest.core.spec.Spec
import proguard.testutils.currentJavaVersion


@Suppress("UNUSED")
object TestConfig : AbstractProjectConfig() {
override fun extensions(): List<Extension> {
return listOf(RequiresJavaVersionAnnotationFilter())
}
}
object TestConfig : AbstractProjectConfig() {}

class RequiresJavaVersionAnnotationFilter : SpecFilter {
override fun filter(kclass: KClass<*>): SpecFilterResult =
if (with(kclass.findAnnotation<RequiresJavaVersion>()) {
(this == null || (currentJavaVersion >= this.from && currentJavaVersion <= this.to))
}
) {
Include
} else {
Exclude("Required Java version is not in range.")
class RequiresJavaExtension(private val from: Int, private val to: Int = Int.MAX_VALUE) : SpecExtension {
override suspend fun intercept(
spec: Spec,
execute: suspend (Spec) -> Unit,
) {
if (currentJavaVersion in from..to) {
execute(spec)
}
}
}

@Target(AnnotationTarget.CLASS)
annotation class RequiresJavaVersion(val from: Int, val to: Int = Int.MAX_VALUE)
16 changes: 15 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
plugins {
id 'distribution'
id 'io.github.gradle-nexus.publish-plugin'
Expand Down Expand Up @@ -108,11 +112,21 @@ allprojects { Project project ->
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(8))
languageVersion.set(JavaLanguageVersion.of(11))
}
withJavadocJar()
withSourcesJar()
}
tasks.withType(JavaCompile).configureEach {
if (!it.name.contains("Test")) {
options.release = 8
}
}
tasks.withType(KotlinCompile).configureEach {
if (!it.name.contains("Test")) {
it.compilerOptions.jvmTarget = JvmTarget.JVM_1_8
}
}
publishing {
publications {
named(project.name) {
Expand Down
6 changes: 0 additions & 6 deletions gradle-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,6 @@ gradlePlugin {
}
}

kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(project.findProperty("target")))
}
}

configurations {
fatJar.extendsFrom(compile)
}
Expand Down
5 changes: 2 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ commons = "2.18.0"
gson = "2.11.0"
javaSemver = "0.10.2"
json = "20231013"
kotest = "5.9.1"
kotest = "6.1.4"
kotlin = "2.2.0"
log4j = "2.25.3"
mockk = "1.13.13"
Expand All @@ -23,7 +23,6 @@ kotest-runner-jvm = { group = "io.kotest", name = "kotest-runner-junit5-jvm", ve
kotest-assertions-jvm = { group = "io.kotest", name = "kotest-assertions-core-jvm", version.ref = "kotest" }
kotest-propery-jvm = { group = "io.kotest", name = "kotest-property-jvm", version.ref = "kotest" }
kotlin-compile-testing = { module = "dev.zacsweers.kctfork:core", version.ref = "kotlin-compile-testing" }
kotest-framework-datatest = { group = "io.kotest", name = "kotest-framework-datatest", version.ref = "kotest" }
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
log4j-api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" }
Expand All @@ -33,7 +32,7 @@ proguard-core = { group = "com.guardsquare", name = "proguard-core", version.ref

[bundles]
log4j = ["log4j-api","log4j-core"]
kotest = ["kotest-assertions-jvm", "kotest-runner-jvm", "kotest-propery-jvm", "kotest-framework-datatest"]
kotest = ["kotest-assertions-jvm", "kotest-runner-jvm", "kotest-propery-jvm"]

[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
Loading