diff --git a/README.md b/README.md index d0b265a2..bf8187ad 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Possible values: `Premium`, `Cracked`, `Unknown` ## Requirements -* Java 8 supported, but Java 21 recommended for improved threading +* Java 8 supported, but Java 21+ recommended for improved threading * Server software in offlinemode: * Spigot (or a fork e.g. Paper) 1.8.8+ * Protocol plugin: diff --git a/core/pom.xml b/core/pom.xml index 093ffd31..c8a26cd8 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -77,14 +77,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - @@ -98,11 +90,10 @@ - org.apache.maven.plugins maven-compiler-plugin - jdk9 + jdk21 compile @@ -116,22 +107,6 @@ - - org.apache.maven.plugins - maven-jar-plugin - - - default-jar - - - - true - - - - - - diff --git a/core/src/test/java/com/github/games647/fastlogin/core/AsyncSchedulerTest.java b/core/src/test/java/com/github/games647/fastlogin/core/AsyncSchedulerTest.java new file mode 100644 index 00000000..32e49d92 --- /dev/null +++ b/core/src/test/java/com/github/games647/fastlogin/core/AsyncSchedulerTest.java @@ -0,0 +1,70 @@ +/* + * SPDX-License-Identifier: MIT + * + * The MIT License (MIT) + * + * Copyright (c) 2015-2023 games647 and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.games647.fastlogin.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledForJreRange; +import org.junit.jupiter.api.condition.EnabledForJreRange; +import org.junit.jupiter.api.condition.JRE; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; + +class AsyncSchedulerTest { + + @Test + @DisabledForJreRange(min = JRE.JAVA_21) + void legacyScheduler() { + Logger logger = LoggerFactory.getLogger(AsyncSchedulerTest.class); + AsyncScheduler scheduler = new AsyncScheduler(logger, Executors.newCachedThreadPool()); + + AtomicBoolean virtual = new AtomicBoolean(false); + scheduler.runAsync(() -> setVirtual(virtual)).join(); + + Assertions.assertFalse(virtual.get()); + } + + @Test + @EnabledForJreRange(min = JRE.JAVA_21) + void greenThread() { + Logger logger = LoggerFactory.getLogger(AsyncSchedulerTest.class); + AsyncScheduler scheduler = new AsyncScheduler(logger, Executors.newCachedThreadPool()); + + AtomicBoolean virtual = new AtomicBoolean(false); + scheduler.runAsync(() -> setVirtual(virtual)).join(); + + Assertions.assertTrue(virtual.get()); + } + + private static void setVirtual(AtomicBoolean virtual) { + if (Thread.currentThread().isVirtual()) { + virtual.set(true); + } + } +} diff --git a/pom.xml b/pom.xml index b387f545..599d5cff 100644 --- a/pom.xml +++ b/pom.xml @@ -157,11 +157,25 @@ maven-surefire-plugin 3.2.5 + + + + ${project.build.directory}/classes/META-INF/versions/21 + + + + ${project.build.outputDirectory} + + + - org.apache.maven.plugins maven-jar-plugin + 3.4.1 + default-jar