RFR: 8081474: SwingWorker calls 'done' before the 'doInBackground' is finished [v17]
Alexey Ivanov
aivanov at openjdk.org
Fri Feb 10 15:15:57 UTC 2023
On Fri, 10 Feb 2023 15:02:22 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
>> SwingWorker done() method [spec ](https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/SwingWorker.java#L452) says "Executed on the Event Dispatch Thread after the doInBackground method is finished"
>> but there's no mechanism in place to honor that claim.
>> The [spec](https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/SwingWorker.java#L289)
>> also says the state should be DONE after doInBackground() returns which is also not done.
>>
>> Modified the code to honour the specification.
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
>
> Space rectify
Changes requested by aivanov (Reviewer).
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 90:
> 88: // property change to StateValue.STARTED
> 89: if (doInBackgroundFinished.get()
> 90: && worker.getState() == SwingWorker.StateValue.STARTED) {
Suggestion:
if (doInBackgroundStarted.get()
&& worker.getState() == SwingWorker.StateValue.STARTED) {
Align the condition to the error message.
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 99:
> 97: // before doInBackground started running
> 98: if (doInBackgroundStarted.get()
> 99: && worker.getState() == SwingWorker.StateValue.STARTED) {
Suggestion:
if (doInBackgroundFinished.get()
&& worker.getState() == SwingWorker.StateValue.STARTED) {
Align the condition to the error message.
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 109:
> 107: // property change to StateValue.DONE
> 108: if (worker.getState() != SwingWorker.StateValue.DONE
> 109: && doInBackgroundFinished.get()) {
Suggestion:
if (worker.getState() != SwingWorker.StateValue.DONE
&& doInBackgroundFinished.get()) {
This should also use four-space indentation on the continuation line for consistency with other cases.
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 135:
> 133: && doInBackgroundFinished.get()) {
> 134: throw new RuntimeException("doInBackground is finished " +
> 135: "but State is not DONE");
Suggestion:
if (worker.getState() != SwingWorker.StateValue.DONE
&& doInBackgroundFinished.get()) {
throw new RuntimeException("doInBackground is finished " +
"but State is not DONE");
Throw shouldn't be indented by additional two spaces.
With the `&&` at the start of the line, it is rather clear where condition ends. Additionally, `throw` cannot be part of the condition.
It's a catch with `if` statement because its condition is always indented by four spaces. If required, a blank line could be added in the body of `if` to separate the condition visually; continuation line could use 8-space indentation.
-------------
PR: https://git.openjdk.org/jdk/pull/11940
More information about the client-libs-dev
mailing list