RFR: 8342453: Remove calls to doPrivileged in javafx.graphics/com.sun.javafx.tk
Michael Strauß
mstrauss at openjdk.org
Tue Oct 29 00:59:11 UTC 2024
On Wed, 23 Oct 2024 20:10:02 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:
> This PR removes all doPrivileged calls from `com.sun.javafx.tk**` in the `javafx.graphics` module.
>
> Here is a quick overview of what I did for this fix:
>
> 1. Changed all simple cases of `doPrivileged((PrivilegedAction<T>) () -> LAMBDA)` to `LAMBDA`, removing the `@SuppressWarnings("removal")` if possible. In case of an unused or unneeded local variable, I removed the local variable.
> 2. Remove unused `AccessControlContext` variables, meaning those whose only use was to be passed into a doPrivileged call that is now gone.
> 3. Removed all `@SuppressWarnings("removal")` annotations that were unneeded after the removed doPrivileged calls. In some cases there are annotations on a method or class. Those can only be removed if the doPrivileged calls were the only use of deprecated SM API in that method or class.
> 4. Remove unused imports.
>
> Finally, here are a few "best practices" that I tried to follow, and would ask others to follow when doing their piece of this. The idea is to reduce the cognitive load on the reviewers. It might take you a couple extra minutes, but will save time during the review:
>
> * When removing the doPrivileged calls, please do the minimum amount of reformatting necessary to properly indent the body of the doPrivileged after it is removed. For example, don't wholesale reformat a method (or worse, an entire class) just because a couple doPrivileged calls are removed.
> * Please try to not reorder the import statements when removing unused imports.
>
> #### Notes to reviewers
>
> As a helpful hint for reviewers, I recommend reviewing this using the "Hide whitespace" option.
>
> An initial, limited review of this was done in my personal fork at kevinrushforth/jfx#4 if other reviwers are interested.
modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/QuantumToolkit.java line 142:
> 140:
> 141: private static final boolean multithreaded = initMultithreaded();
> 142: private static boolean initMultithreaded() {
Have you considered a pattern such as this?
private static final boolean multithreaded = ((Supplier<Boolean>)() -> {
// If it is not specified, or it is true, then it should
// be true. Otherwise it should be false.
String value = System.getProperty("quantum.multithreaded");
if (value == null) return true;
final boolean result = Boolean.parseBoolean(value);
if (verbose) {
System.out.println(result ? "Multi-Threading Enabled" : "Multi-Threading Disabled");
}
return result;
}).get();
This would prevent a proliferation of many new init methods.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1608#discussion_r1819938688
More information about the openjfx-dev
mailing list