[foreign] RFR: 8224013: jextract failed to generate source file under some scenarios

Henry Jen henry.jen at oracle.com
Fri May 17 06:36:47 UTC 2019


I somehow messed up the test case. I got a it right at first, but added -t for the symbolic link case wanting to show that it’s irrelevant, but that failed the case as it setting up the folder without package.


I’ll push this patch with same bug ID,

diff -r b9524dfaa8f0 src/jdk.jextract/share/classes/com/sun/tools/jextract/Writer.java
--- a/src/jdk.jextract/share/classes/com/sun/tools/jextract/Writer.java	Thu May 16 10:06:42 2019 -0700
+++ b/src/jdk.jextract/share/classes/com/sun/tools/jextract/Writer.java	Thu May 16 23:27:38 2019 -0700
@@ -95,10 +95,13 @@
             Path dir = fullPath.getParent();
             // In case the folder exist and is a link to a folder, this should be OK
             // Case in point, /tmp on MacOS link to /private/tmp
-            if (Files.exists(dir) && !Files.isDirectory(dir)) {
-                throw new FileAlreadyExistsException(dir.toAbsolutePath().toString());
+            if (Files.exists(dir)) {
+                if (!Files.isDirectory(dir)) {
+                    throw new FileAlreadyExistsException(dir.toAbsolutePath().toString());
+                }
+            } else {
+                Files.createDirectories(fullPath.getParent());
             }
-            Files.createDirectories(fullPath.getParent());
             Files.write(fullPath, List.of(entry.getValue()));
         }
     }
diff -r b9524dfaa8f0 test/jdk/com/sun/tools/jextract/TestSrcDump.java
--- a/test/jdk/com/sun/tools/jextract/TestSrcDump.java	Thu May 16 10:06:42 2019 -0700
+++ b/test/jdk/com/sun/tools/jextract/TestSrcDump.java	Thu May 16 23:27:38 2019 -0700
@@ -61,10 +61,10 @@
         Path realTarget = getOutputFilePath("realGenSrc");
         Files.createDirectory(realTarget);
         Files.createSymbolicLink(src, realTarget);
-        run("--src-dump-dir", src.toString(), "-t", "com.acme",
+        run("--src-dump-dir", src.toString(),
                 getInputFilePath("simple.h").toString()).checkSuccess();
         try {
-            assertTrue(Files.isRegularFile(src.resolve("com").resolve("acme").resolve(staticForwarderName("simple.h") + ".java")));
+            assertTrue(Files.isRegularFile(src.resolve(staticForwarderName("simple.h") + ".java")));
         } finally {
             deleteFile(src);
             deleteDir(realTarget);

Cheers,
Henry


> On May 16, 2019, at 3:27 AM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
> 
> Looks good
> 
> Maurizio
> 
> On 16/05/2019 00:57, Henry Jen wrote:
>> Hi,
>> 
>> Please review a trivial fix[1] for 8224013[2],
>> 
>> jextract throws exceptions when use --src-dump-dir under following scenarios,
>> 
>> 1. Not specifying target package name with -t. This will cause jextract trying to write static forwarder source into root folder.
>> 2. If the --src-dump-dir specified is a symbolic link to an existing folder, jextract will fail with java.nio.file.FileAlreadyExistsException
>> 
>> Cheers,
>> Henry
>> 
>> [1] http://cr.openjdk.java.net/~henryjen/panama/8224013/webrev/
>> [2] https://bugs.openjdk.java.net/browse/JDK-8224013



More information about the panama-dev mailing list