From e304a8ae63fdec125e085bd5048d62cf555e2caa Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Fri, 31 May 2024 03:02:09 +0000 Subject: [PATCH] 8333307: Don't suppress jpackage logging in tests when it is detecting packaging tools in the system Reviewed-by: almatvee --- .../jdk/jpackage/test/PackageType.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageType.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageType.java index 9b8b577185ea8..71637ef7134a6 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageType.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,13 +22,16 @@ */ package jdk.jpackage.test; +import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collections; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.Stream; +import jdk.jpackage.internal.Log; /** * jpackage type traits. @@ -91,7 +94,7 @@ static PackageType fromSuffix(String packageFilename) { return null; } - private static boolean isBundlerSupported(String bundlerClass) { + private static boolean isBundlerSupportedImpl(String bundlerClass) { try { Class clazz = Class.forName(bundlerClass); Method supported = clazz.getMethod("supported", boolean.class); @@ -105,6 +108,30 @@ private static boolean isBundlerSupported(String bundlerClass) { return false; } + private static boolean isBundlerSupported(String bundlerClass) { + AtomicBoolean reply = new AtomicBoolean(); + try { + // Capture jpackage's activity on configuring bundlers. + // Log configuration is thread-local. + // Call Log.setPrintWriter and Log.setVerbose in a separate + // thread to keep the main log configuration intact. + var thread = new Thread(() -> { + Log.setPrintWriter(new PrintWriter(System.out), new PrintWriter(System.err)); + Log.setVerbose(); + try { + reply.set(isBundlerSupportedImpl(bundlerClass)); + } finally { + Log.flush(); + } + }); + thread.run(); + thread.join(); + } catch (InterruptedException ex) { + Functional.rethrowUnchecked(ex); + } + return reply.get(); + } + private final String name; private final String suffix; private final boolean supported;