diff --git a/flake.nix b/flake.nix index c48263a..b1ef715 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,8 @@ zls javaPackages.compiler.openjdk25 jdt-language-server + kotlin + kotlin-language-server ]; buildInputs = with pkgs; []; diff --git a/testsuite/.gitignore b/testsuite/.gitignore new file mode 100644 index 0000000..415ec0f --- /dev/null +++ b/testsuite/.gitignore @@ -0,0 +1,3 @@ +*.class +!Object.class +META-INF diff --git a/testsuite/classes/java/CustomAttribute.java b/testsuite/classes/java/CustomAttribute.java new file mode 100644 index 0000000..e3fe264 --- /dev/null +++ b/testsuite/classes/java/CustomAttribute.java @@ -0,0 +1,10 @@ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface CustomAttribute { +} + diff --git a/testsuite/classes/java/Hello.java b/testsuite/classes/java/Hello.java new file mode 100644 index 0000000..a5a4fbf --- /dev/null +++ b/testsuite/classes/java/Hello.java @@ -0,0 +1,6 @@ +class Hello { + public static void main(String[] args) { + System.out.println("Hello, world!"); + } +} + diff --git a/Interface.java b/testsuite/classes/java/Interface.java similarity index 100% rename from Interface.java rename to testsuite/classes/java/Interface.java diff --git a/Main.java b/testsuite/classes/java/Main.java similarity index 98% rename from Main.java rename to testsuite/classes/java/Main.java index a3c6d9b..ec77f66 100644 --- a/Main.java +++ b/testsuite/classes/java/Main.java @@ -1,5 +1,6 @@ import java.util.function.Supplier; +@CustomAttribute public class Main implements Runnable, Supplier, Interface { private static final String name = "John"; private static final int number = 42; diff --git a/testsuite/classes/java/MultiThreading.java b/testsuite/classes/java/MultiThreading.java new file mode 100644 index 0000000..62d84f5 --- /dev/null +++ b/testsuite/classes/java/MultiThreading.java @@ -0,0 +1,22 @@ +import java.util.concurrent.Executors; +import java.util.stream.IntStream; +import java.util.concurrent.TimeUnit; + +public class MultiThreading { + private int number = 0; + + public static void main(String[] args) throws InterruptedException { + final var multiThreading = new MultiThreading(); + + final var service = Executors.newFixedThreadPool(3); + IntStream.range(0, 1000) + .forEach(count -> service.submit(multiThreading::increment)); + service.awaitTermination(1000, TimeUnit.MILLISECONDS); + + System.out.println(multiThreading.number); + } + + public synchronized void increment() { + number += 1; + } +} diff --git a/testsuite/classes/java/Object.class b/testsuite/classes/java/Object.class new file mode 100644 index 0000000..d33531f Binary files /dev/null and b/testsuite/classes/java/Object.class differ diff --git a/testsuite/classes/kotlin/Main.kt b/testsuite/classes/kotlin/Main.kt new file mode 100644 index 0000000..ca75765 --- /dev/null +++ b/testsuite/classes/kotlin/Main.kt @@ -0,0 +1,12 @@ +fun main() { + println("Hello, world!") + + Test().apply { + test = true + } +} + +class Test { + var test: Boolean = false +} + diff --git a/testsuite/modules/compile-simple-modules.sh b/testsuite/modules/compile-simple-modules.sh new file mode 100755 index 0000000..ca384d8 --- /dev/null +++ b/testsuite/modules/compile-simple-modules.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +javac -g -d outDir --module-source-path simple-modules $(find simple-modules -name "*.java") diff --git a/testsuite/modules/run-simple-module-app.sh b/testsuite/modules/run-simple-module-app.sh new file mode 100755 index 0000000..533d45a --- /dev/null +++ b/testsuite/modules/run-simple-module-app.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +java --module-path outDir -m main.app/dev.katkak.modules.main.MainApp diff --git a/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloInterface.java b/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloInterface.java new file mode 100644 index 0000000..b98b718 --- /dev/null +++ b/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloInterface.java @@ -0,0 +1,6 @@ +package dev.katkak.modules.hello; + +public interface HelloInterface { + void sayHello(); +} + diff --git a/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloModules.java b/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloModules.java new file mode 100644 index 0000000..cdbc53a --- /dev/null +++ b/testsuite/modules/simple-modules/hello.modules/dev/katkak/modules/hello/HelloModules.java @@ -0,0 +1,12 @@ +package dev.katkak.modules.hello; + +public class HelloModules implements HelloInterface { + public static void doSomething() { + System.out.println("Hello, Modules!"); + } + + public void sayHello() { + System.out.println("Hello!"); + } +} + diff --git a/testsuite/modules/simple-modules/hello.modules/module-info.java b/testsuite/modules/simple-modules/hello.modules/module-info.java new file mode 100644 index 0000000..4dfc3e0 --- /dev/null +++ b/testsuite/modules/simple-modules/hello.modules/module-info.java @@ -0,0 +1,6 @@ +module hello.modules { + exports dev.katkak.modules.hello; + + provides dev.katkak.modules.hello.HelloInterface with dev.katkak.modules.hello.HelloModules; +} + diff --git a/testsuite/modules/simple-modules/main.app/dev/katkak/modules/main/MainApp.java b/testsuite/modules/simple-modules/main.app/dev/katkak/modules/main/MainApp.java new file mode 100644 index 0000000..ac4eda3 --- /dev/null +++ b/testsuite/modules/simple-modules/main.app/dev/katkak/modules/main/MainApp.java @@ -0,0 +1,17 @@ +package dev.katkak.modules.main; + +import dev.katkak.modules.hello.HelloModules; +import dev.katkak.modules.hello.HelloInterface; + +import java.util.ServiceLoader; + +public class MainApp { + public static void main(String[] args) { + HelloModules.doSomething(); + + final var services = ServiceLoader.load(HelloInterface.class); + final var service = services.iterator().next(); + service.sayHello(); + } +} + diff --git a/testsuite/modules/simple-modules/main.app/module-info.java b/testsuite/modules/simple-modules/main.app/module-info.java new file mode 100644 index 0000000..d7e9447 --- /dev/null +++ b/testsuite/modules/simple-modules/main.app/module-info.java @@ -0,0 +1,6 @@ +module main.app { + requires hello.modules; + + uses dev.katkak.modules.hello.HelloInterface; +} +