From 68d112adec6aee3bec5ec745452a4f89210722fe Mon Sep 17 00:00:00 2001 From: Michael Pfaff Date: Wed, 10 Aug 2022 21:01:25 -0400 Subject: [PATCH] Fixed generated C files output path In addition to the main fix... - refactored GeneratorVisitor a bit - slightly improve context in a debug message --- platform_build/build-generator.xml | 16 +++---- src/java/org/lwjgl/LWJGLUtil.java | 2 +- .../util/generator/GeneratorVisitor.java | 47 +++++++++++-------- 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/platform_build/build-generator.xml b/platform_build/build-generator.xml index c3a0c2cf..8d42a35a 100644 --- a/platform_build/build-generator.xml +++ b/platform_build/build-generator.xml @@ -88,7 +88,7 @@ - + @@ -111,8 +111,8 @@ - - + + @@ -129,7 +129,7 @@ - + @@ -170,7 +170,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -241,7 +241,7 @@ - + @@ -264,7 +264,7 @@ - + diff --git a/src/java/org/lwjgl/LWJGLUtil.java b/src/java/org/lwjgl/LWJGLUtil.java index a7698302..5476c1d2 100644 --- a/src/java/org/lwjgl/LWJGLUtil.java +++ b/src/java/org/lwjgl/LWJGLUtil.java @@ -518,7 +518,7 @@ public class LWJGLUtil { return path; }); } catch (PrivilegedActionException e) { - logger().log("Failed to locate findLibrary method", e.getCause()); + logger().log(() -> "Failed to locate findLibrary method on " + clazz, e.getCause()); c = c.getSuperclass(); } } diff --git a/src/java/org/lwjgl/util/generator/GeneratorVisitor.java b/src/java/org/lwjgl/util/generator/GeneratorVisitor.java index 822ce485..2b49f77a 100644 --- a/src/java/org/lwjgl/util/generator/GeneratorVisitor.java +++ b/src/java/org/lwjgl/util/generator/GeneratorVisitor.java @@ -331,25 +331,8 @@ public class GeneratorVisitor extends ElementKindVisitor6 { throw new RuntimeException("Failed to generate the Java sources for " + e, ex); } - String qualified_interface_name = Utils.getQualifiedClassName(e); - final Path output = Path.of(this.gen_path + "/" + qualified_interface_name.replace('.', '/') + ".java"); - String newStr = java_writer.toString(); - try { - if (isFileExistingAndIdentical(output, newStr)) { - return DEFAULT_VALUE; - } - Files.createDirectories(output.getParent()); - Files.createFile(output); - } catch (IOException ex) { - throw new RuntimeException("Failed to create the output file for " + e, ex); - } - //try (Writer java_file_writer = env.getFiler().createSourceFile(Utils.getQualifiedClassName(e), env.getElementUtils().getPackageOf(e)).openWriter()) { - try (Writer java_file_writer = new FileWriter(output.toFile())) { - java_file_writer.write(newStr); - env.getMessager().printMessage(Diagnostic.Kind.NOTE, "Generated class " + qualified_interface_name); - } catch (Exception ex) { - throw new RuntimeException(ex); - } + saveGeneratedJavaSource(e, java_writer); + if (methods.size() > 0) { boolean noNative = true; for (ExecutableElement method : methods) { @@ -372,6 +355,32 @@ public class GeneratorVisitor extends ElementKindVisitor6 { return DEFAULT_VALUE; } + private void saveGeneratedJavaSource(TypeElement e, StringWriter java_writer) { + String qualified_interface_name = Utils.getQualifiedClassName(e); + final Path output = Path.of(this.gen_path + "/" + qualified_interface_name.replace('.', '/') + ".java"); + String newStr = java_writer.toString(); + saveGeneratedSource(qualified_interface_name, output, newStr); + } + + private void saveGeneratedSource(String name, Path output, String newStr) { + try { + if (isFileExistingAndIdentical(output, newStr)) { + return; + } + Files.createDirectories(output.getParent()); + Files.createFile(output); + } catch (IOException ex) { + throw new RuntimeException("Failed to create the output file for " + name, ex); + } + //try (Writer java_file_writer = env.getFiler().createSourceFile(Utils.getQualifiedClassName(e), env.getElementUtils().getPackageOf(e)).openWriter()) { + try (Writer java_file_writer = new FileWriter(output.toFile())) { + java_file_writer.write(newStr); + env.getMessager().printMessage(Diagnostic.Kind.NOTE, "Generated class " + name); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + private static ByteBuffer readFile(final File file) throws IOException { final FileChannel channel = new FileInputStream(file).getChannel();