Skip to content

Commit

Permalink
Use ProgressReporter to monitor initialization jobs
Browse files Browse the repository at this point in the history
Signed-off-by: Rome Li <[email protected]>
  • Loading branch information
akaroml authored and fbricon committed Nov 25, 2019
1 parent 17f4e0e commit ba96010
Showing 1 changed file with 73 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.jdt.ls.core.internal.handlers;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

Expand Down Expand Up @@ -48,7 +50,9 @@ public ProgressReporterManager(JavaLanguageClient client, PreferenceManager pref
@Override
public IProgressMonitor createMonitor(Job job) {
if (job.belongsTo(InitHandler.JAVA_LS_INITIALIZATION_JOBS)) {
return new ServerStatusMonitor();
// for backward compatibility
List<IProgressMonitor> monitors = Arrays.asList(new ServerStatusMonitor(), createJobMonitor(job));
return new MulticastProgressReporter(monitors);
}
IProgressMonitor monitor = createJobMonitor(job);
return monitor;
Expand Down Expand Up @@ -77,6 +81,74 @@ public void setReportThrottle(long delay) {
this.delay = delay;
}

private class MulticastProgressReporter implements IProgressMonitor {
protected List<IProgressMonitor> monitors;

public MulticastProgressReporter(List<IProgressMonitor> monitors) {
this.monitors = monitors;
}

@Override
public void done() {
for (IProgressMonitor monitor : monitors) {
monitor.done();
}
}

@Override
public boolean isCanceled() {
for (IProgressMonitor monitor : monitors) {
if (!monitor.isCanceled()) {
return false;
}
}

return true;
}

@Override
public void beginTask(String name, int totalWork) {
for (IProgressMonitor monitor : monitors) {
monitor.beginTask(name, totalWork);
}
}

@Override
public void internalWorked(double work) {
for (IProgressMonitor monitor : monitors) {
monitor.internalWorked(work);
}
}

@Override
public void setCanceled(boolean cancelled) {
for (IProgressMonitor monitor : monitors) {
monitor.setCanceled(cancelled);
}
}

@Override
public void setTaskName(String name) {
for (IProgressMonitor monitor : monitors) {
monitor.setTaskName(name);
}
}

@Override
public void subTask(String name) {
for (IProgressMonitor monitor : monitors) {
monitor.subTask(name);
}
}

@Override
public void worked(int work) {
for (IProgressMonitor monitor : monitors) {
monitor.worked(work);
}
}
}

private class ProgressReporter extends CancellableProgressMonitor {

protected static final String SEPARATOR = " - ";
Expand Down

0 comments on commit ba96010

Please sign in to comment.