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/testsuite/classes/java/Interface.java b/testsuite/classes/java/Interface.java new file mode 100644 index 0000000..ebe4af3 --- /dev/null +++ b/testsuite/classes/java/Interface.java @@ -0,0 +1,10 @@ +public interface Interface { + + String getName(); + + default void sayHello() { + System.out.println("Hello " + getName()); + } + +} + diff --git a/testsuite/classes/java/Main.java b/testsuite/classes/java/Main.java new file mode 100644 index 0000000..ec77f66 --- /dev/null +++ b/testsuite/classes/java/Main.java @@ -0,0 +1,41 @@ +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; + private static final double funnyNumber = 6.9; + + public static void main() { + new Main().sayHello(); + } + + @Override + public void run() { + Main.main(); + } + + @Override + public Integer get() { + return number; + } + + @Override + public String getName() { + return name; + } + + public void throwSomething() throws Throwable { + throw new Throwable() { + @Override + public String getMessage() { + return "Hello"; + } + }; + } + + public static class Inner { + private static final String name = "Inner John"; + } +} + 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; +} +