From 59e3c82dc7428efa4d623b77335e82faee026e3c Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Fri, 8 Aug 2025 14:16:31 +0300 Subject: [PATCH 1/2] fix: automatically load library when using loaderLookup --- .../jtreesitter/internal/ChainedLibraryLookup.java | 10 ++++++++-- .../io/github/treesitter/jtreesitter/package-info.java | 7 +++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java b/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java index a7da394..599da15 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java +++ b/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java @@ -27,8 +27,14 @@ private static SymbolLookup findLibrary(Arena arena) { try { var library = System.mapLibraryName("tree-sitter"); return SymbolLookup.libraryLookup(library, arena); - } catch (IllegalArgumentException e) { - return SymbolLookup.loaderLookup(); + } catch (IllegalArgumentException ex1) { + try { + System.loadLibrary("tree-sitter"); + return SymbolLookup.loaderLookup(); + } catch (UnsatisfiedLinkError ex2) { + ex1.addSuppressed(ex2); + throw ex1; + } } } } diff --git a/src/main/java/io/github/treesitter/jtreesitter/package-info.java b/src/main/java/io/github/treesitter/jtreesitter/package-info.java index c2f1282..a375a9e 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/package-info.java +++ b/src/main/java/io/github/treesitter/jtreesitter/package-info.java @@ -43,10 +43,9 @@ * SymbolLookup.libraryLookup(String, Arena)}. * *
  • - * The libraries can be loaded manually by calling - * {@link java.lang.System#loadLibrary(String) System.loadLibrary(String)}, - * if the library is installed in {@systemProperty java.library.path}, - * or {@link java.lang.System#load(String) System.load(String)}. + * If the libraries are installed in {@systemProperty java.library.path} instead, + * they will be loaded automatically by {@link java.lang.foreign.SymbolLookup#loaderLookup() + * SymbolLookup.loaderLookup()}. *
  • *
  • * The libraries can be loaded manually by registering a custom implementation of From 2d37a783806eb1b9054003b7a6143a487d2bf34c Mon Sep 17 00:00:00 2001 From: vgveloso Date: Wed, 10 Dec 2025 14:24:21 -0500 Subject: [PATCH 2/2] fix: lazily invoke findLibrary (#152) --- .../treesitter/jtreesitter/internal/ChainedLibraryLookup.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java b/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java index 599da15..f10e6b3 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java +++ b/src/main/java/io/github/treesitter/jtreesitter/internal/ChainedLibraryLookup.java @@ -20,7 +20,8 @@ public SymbolLookup get(Arena arena) { for (var libraryLookup : serviceLoader) { lookup = lookup.or(libraryLookup.get(arena)); } - return lookup.or(findLibrary(arena)).or(Linker.nativeLinker().defaultLookup()); + + return lookup.or((name) -> findLibrary(arena).find(name)).or(Linker.nativeLinker().defaultLookup()); } private static SymbolLookup findLibrary(Arena arena) {