src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java
branchJDK-8200758-branch
changeset 58670 6fb9e12d5595
parent 58647 2c43b89b1679
child 58888 d802578912f3
--- a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java	Wed Oct 16 10:32:08 2019 -0400
+++ b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java	Thu Oct 17 07:55:35 2019 -0400
@@ -48,6 +48,7 @@
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
+import java.util.stream.Stream;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.xpath.XPath;
@@ -747,78 +748,79 @@
         String keyChain = SIGNING_KEYCHAIN.fetchFrom(params);
 
         // sign all dylibs and jars
-        Files.walk(appLocation).peek(path -> { // fix permissions
-                    try {
-                        Set<PosixFilePermission> pfp =
-                                Files.getPosixFilePermissions(path);
-                        if (!pfp.contains(PosixFilePermission.OWNER_WRITE)) {
-                            pfp = EnumSet.copyOf(pfp);
-                            pfp.add(PosixFilePermission.OWNER_WRITE);
-                            Files.setPosixFilePermissions(path, pfp);
-                        }
-                    } catch (IOException e) {
-                        Log.verbose(e);
+        try (Stream<Path> stream = Files.walk(appLocation)) {
+            stream.peek(path -> { // fix permissions
+                try {
+                    Set<PosixFilePermission> pfp =
+                            Files.getPosixFilePermissions(path);
+                    if (!pfp.contains(PosixFilePermission.OWNER_WRITE)) {
+                        pfp = EnumSet.copyOf(pfp);
+                        pfp.add(PosixFilePermission.OWNER_WRITE);
+                        Files.setPosixFilePermissions(path, pfp);
                     }
-                }).filter(p -> Files.isRegularFile(p)
-                          && !(p.toString().contains("/Contents/MacOS/libjli.dylib")
-                          || p.toString().endsWith(appExecutable)
-                          || p.toString().contains("/Contents/runtime")
-                          || p.toString().contains("/Contents/Frameworks"))).forEach(p -> {
-                    //noinspection ThrowableResultOfMethodCallIgnored
-                    if (toThrow.get() != null) return;
-
-                    // If p is a symlink then skip the signing process.
-                    if (Files.isSymbolicLink(p)) {
-                        if (VERBOSE.fetchFrom(params)) {
-                            Log.verbose(MessageFormat.format(I18N.getString(
-                                    "message.ignoring.symlink"), p.toString()));
-                        }
-                    } else {
-                        if (p.toString().endsWith(LIBRARY_NAME)) {
-                            if (isFileSigned(p)) {
-                                return;
-                            }
-                        }
+                } catch (IOException e) {
+                    Log.verbose(e);
+                }
+            }).filter(p -> Files.isRegularFile(p)
+                      && !(p.toString().contains("/Contents/MacOS/libjli.dylib")
+                      || p.toString().endsWith(appExecutable)
+                      || p.toString().contains("/Contents/runtime")
+                      || p.toString().contains("/Contents/Frameworks"))).forEach(p -> {
+                //noinspection ThrowableResultOfMethodCallIgnored
+                if (toThrow.get() != null) return;
 
-                        List<String> args = new ArrayList<>();
-                        args.addAll(Arrays.asList("codesign",
-                                "-s", signingIdentity, // sign with this key
-                                "--prefix", identifierPrefix,
-                                // use the identifier as a prefix
-                                "-vvvv"));
-                        if (entitlementsFile != null &&
-                                (p.toString().endsWith(".jar")
-                                || p.toString().endsWith(".dylib"))) {
-                            args.add("--entitlements");
-                            args.add(entitlementsFile); // entitlements
-                        } else if (inheritedEntitlements != null &&
-                                Files.isExecutable(p)) {
-                            args.add("--entitlements");
-                            args.add(inheritedEntitlements);
-                            // inherited entitlements for executable processes
-                        }
-                        if (keyChain != null && !keyChain.isEmpty()) {
-                            args.add("--keychain");
-                            args.add(keyChain);
-                        }
-                        args.add(p.toString());
-
-                        try {
-                            Set<PosixFilePermission> oldPermissions =
-                                    Files.getPosixFilePermissions(p);
-                            File f = p.toFile();
-                            f.setWritable(true, true);
-
-                            ProcessBuilder pb = new ProcessBuilder(args);
-                            IOUtils.exec(pb);
-
-                            Files.setPosixFilePermissions(p, oldPermissions);
-                        } catch (IOException ioe) {
-                            toThrow.set(ioe);
+                // If p is a symlink then skip the signing process.
+                if (Files.isSymbolicLink(p)) {
+                    if (VERBOSE.fetchFrom(params)) {
+                        Log.verbose(MessageFormat.format(I18N.getString(
+                                "message.ignoring.symlink"), p.toString()));
+                    }
+                } else {
+                    if (p.toString().endsWith(LIBRARY_NAME)) {
+                        if (isFileSigned(p)) {
+                            return;
                         }
                     }
-                });
 
+                    List<String> args = new ArrayList<>();
+                    args.addAll(Arrays.asList("codesign",
+                            "-s", signingIdentity, // sign with this key
+                            "--prefix", identifierPrefix,
+                            // use the identifier as a prefix
+                            "-vvvv"));
+                    if (entitlementsFile != null &&
+                            (p.toString().endsWith(".jar")
+                            || p.toString().endsWith(".dylib"))) {
+                        args.add("--entitlements");
+                        args.add(entitlementsFile); // entitlements
+                    } else if (inheritedEntitlements != null &&
+                            Files.isExecutable(p)) {
+                        args.add("--entitlements");
+                        args.add(inheritedEntitlements);
+                        // inherited entitlements for executable processes
+                    }
+                    if (keyChain != null && !keyChain.isEmpty()) {
+                        args.add("--keychain");
+                        args.add(keyChain);
+                    }
+                    args.add(p.toString());
+
+                    try {
+                        Set<PosixFilePermission> oldPermissions =
+                                Files.getPosixFilePermissions(p);
+                        File f = p.toFile();
+                        f.setWritable(true, true);
+
+                        ProcessBuilder pb = new ProcessBuilder(args);
+                        IOUtils.exec(pb);
+
+                        Files.setPosixFilePermissions(p, oldPermissions);
+                    } catch (IOException ioe) {
+                        toThrow.set(ioe);
+                    }
+                }
+            });
+        }
         IOException ioe = toThrow.get();
         if (ioe != null) {
             throw ioe;