diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/TestUtil.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/TestUtil.java index 9e665f33667..3355e37f14b 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/TestUtil.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/TestUtil.java @@ -26,6 +26,7 @@ import java.util.function.Predicate; import java.util.function.Supplier; +import org.eclipse.core.internal.jobs.JobManager; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -177,13 +178,14 @@ public static boolean waitWhile(Supplier condition, long timeout) throw * * @param owner name of the caller which will be logged as prefix if the * wait times out + * @param jobFamily the jobFamily to wait for * @param minTimeMs minimum wait time in milliseconds * @param maxTimeMs maximum wait time in milliseconds * @return true if the method timed out, false if all the jobs terminated * before the timeout */ - public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs) { - return waitForJobs(owner, minTimeMs, maxTimeMs, (Object[]) null); + public static boolean waitForJobs(String owner, Object jobFamily, long minTimeMs, long maxTimeMs) { + return waitForJobs(owner, jobFamily, minTimeMs, maxTimeMs, (Object[]) null); } /** @@ -202,11 +204,16 @@ public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs) * @return true if the method timed out, false if all the jobs terminated before the timeout */ public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs, Object... excludedFamilies) { + return waitForJobs(owner, null, minTimeMs, maxTimeMs, excludedFamilies); + } + + public static boolean waitForJobs(String owner, Object jobFamily, long minTimeMs, long maxTimeMs, Object... excludedFamilies) { if (maxTimeMs < minTimeMs) { throw new IllegalArgumentException("Max time is smaller as min time!"); } - final long start = System.currentTimeMillis(); - while (System.currentTimeMillis() - start < minTimeMs) { + Job.getJobManager().wakeUp(jobFamily); + final long start = System.nanoTime(); + while (System.nanoTime() - start < minTimeMs * 1_000_000) { processUIEvents(); try { Thread.sleep(Math.min(10, minTimeMs)); @@ -215,7 +222,7 @@ public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs, } } while (!Job.getJobManager().isIdle()) { - List jobs = getRunningOrWaitingJobs(null, excludedFamilies); + List jobs = getRunningOrWaitingJobs(jobFamily, excludedFamilies); if (jobs.isEmpty()) { // only uninteresting jobs running break; @@ -229,7 +236,7 @@ public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs, return true; } - if (System.currentTimeMillis() - start >= maxTimeMs) { + if (System.nanoTime() - start >= maxTimeMs * 1_000_000) { dumpRunningOrWaitingJobs(owner, jobs); return true; } @@ -239,15 +246,14 @@ public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs, runningJobs.clear(); return false; } - static Set runningJobs = new LinkedHashSet<>(); private static void dumpRunningOrWaitingJobs(String owner, List jobs) { - String message = "Some job is still running or waiting to run: " + dumpRunningOrWaitingJobs(jobs); + String message = "Some job is still running or waiting to run: " + getDump(jobs); log(IStatus.ERROR, owner, message, new RuntimeException(message)); } - private static String dumpRunningOrWaitingJobs(List jobs) { + private static String getDump(List jobs) { if (jobs.isEmpty()) { return ""; } @@ -258,6 +264,7 @@ private static String dumpRunningOrWaitingJobs(List jobs) { runningJobs.add(job); sb.append("\n'").append(job.toString()).append("'/"); sb.append(job.getClass().getName()); + sb.append(":").append(JobManager.printState(job)); Thread thread = job.getThread(); if (thread != null) { ThreadInfo[] threadInfos = ManagementFactory.getThreadMXBean().getThreadInfo(new long[] { thread.getId() }, true, true); diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleManagerTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleManagerTests.java index 1eae274c65a..71fb993cf21 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleManagerTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleManagerTests.java @@ -37,6 +37,7 @@ import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IConsoleView; +import org.eclipse.ui.internal.console.ConsoleManager; import org.eclipse.ui.part.IPageBookViewPage; import org.eclipse.ui.part.MessagePage; import org.junit.After; @@ -85,7 +86,7 @@ public void setUp() throws Exception { firstConsole = new ConsoleMock(0); manager.addConsoles(new ConsoleMock[] { firstConsole }); manager.showConsoleView(firstConsole); - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); TestUtil.processUIEvents(100); ConsoleMock.allShownConsoles.set(0); } @@ -118,7 +119,7 @@ public void testShowAllConsoles() throws Exception { // Console manager starts a job with delay, let wait for him a bit System.out.println("Waiting on jobs now..."); //$NON-NLS-1$ - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); // Give UI a chance to proceed pending console manager jobs System.out.println("Done with jobs, processing UI events again..."); //$NON-NLS-1$ @@ -161,7 +162,7 @@ private void showConsole(final ConsoleMock console) { latch.await(1, TimeUnit.MINUTES); System.out.println("Requesting to show: " + console); //$NON-NLS-1$ manager.showConsoleView(console); - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); } catch (InterruptedException e) { e.printStackTrace(); Thread.interrupted(); diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java index 95f1c345670..a08a5996776 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ConsoleTests.java @@ -39,6 +39,7 @@ import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; import org.eclipse.ui.console.MessageConsole; +import org.eclipse.ui.internal.console.ConsoleManager; import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds; import org.junit.Test; @@ -55,21 +56,21 @@ public void testConsoleOutputStreamEncoding() throws IOException { MessageConsole console = new MessageConsole("Test Console", //$NON-NLS-1$ IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true); IDocument document = console.getDocument(); - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); assertEquals("Document should be empty", "", document.get()); //$NON-NLS-1$ //$NON-NLS-2$ try (IOConsoleOutputStream outStream = console.newOutputStream()) { outStream.write(testStringBuffer, 0, 6); // half of ö (\u00f6) is written so we don't expect this char in // output but all previous chars can be decoded - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); assertEquals("First 4 chars should be written", testString.substring(0, 4), document.get()); //$NON-NLS-1$ outStream.write(testStringBuffer, 6, 6); // all remaining bytes are written so we expect the whole string // including the ö (\u00f6) which was at buffer boundary - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); assertEquals("whole test string should be written", testString, document.get()); //$NON-NLS-1$ } - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); // after closing the stream, the document content should still be the // same assertEquals("closing the stream should not alter the document", testString, document.get()); //$NON-NLS-1$ @@ -83,15 +84,15 @@ public void testConsoleOutputStreamLastR() throws IOException { MessageConsole console = new MessageConsole("Test Console 2", //$NON-NLS-1$ IConsoleConstants.MESSAGE_CONSOLE_TYPE, null, StandardCharsets.UTF_8.name(), true); IDocument document = console.getDocument(); - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); assertEquals("Document should be empty", "", document.get()); //$NON-NLS-1$ //$NON-NLS-2$ try (IOConsoleOutputStream outStream = console.newOutputStream()) { outStream.write(testStringBuffer); // everything but pending \r should be written - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); assertEquals("First char should be written", testString.substring(0, 1), document.get()); //$NON-NLS-1$ } - TestUtil.waitForJobs(name.getMethodName(), 200, 5000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 200, 5000); // after closing the stream, the document content should still be the // same assertEquals("closing the stream should write the pending \\r", testString, document.get()); //$NON-NLS-1$ @@ -182,7 +183,7 @@ public void testFindCommandsAreEnabledOnConsoleOpen() throws Exception { try { consoleManager.addConsoles(consoles); consoleManager.showConsoleView(console); - TestUtil.waitForJobs(name.getMethodName(), 100, 3000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 100, 3000); ICommandService commandService = PlatformUI.getWorkbench().getService(ICommandService.class); Command commandFindReplace = commandService.getCommand(IWorkbenchCommandConstants.EDIT_FIND_AND_REPLACE); diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleFixedWidthTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleFixedWidthTests.java index d0c2b5f7228..1bee1afeddc 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleFixedWidthTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleFixedWidthTests.java @@ -14,6 +14,7 @@ package org.eclipse.debug.tests.console; import org.eclipse.debug.tests.TestUtil; +import org.eclipse.ui.internal.console.ConsoleManager; /** * Same as {@link IOConsoleTests} but with fixed width console enabled. @@ -29,7 +30,7 @@ protected IOConsoleTestUtil getTestUtil(String title) { c.getConsole().setConsoleWidth(3); c.setIgnoreFixedConsole(true); // console width is applied asynchronous - TestUtil.waitForJobs(name.getMethodName(), 50, 1000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 50, 1000); return c; } diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTestUtil.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTestUtil.java index 26bd8d7e148..340f0bbe815 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTestUtil.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTestUtil.java @@ -41,6 +41,7 @@ import org.eclipse.ui.console.IConsoleDocumentPartitioner; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; +import org.eclipse.ui.internal.console.ConsoleManager; /** * Utility to help testing input and output in {@link IOConsole}. @@ -237,7 +238,7 @@ public IOConsoleTestUtil insert(String content) { // content the caret is updated setCaretOffset(e.start + content.length()); } - TestUtil.waitForJobs(name, 0, 1000); + TestUtil.waitForJobs(name, ConsoleManager.CONSOLE_JOB_FAMILY, 0, 1000); return this; } @@ -288,7 +289,7 @@ public IOConsoleTestUtil insertTyping(String content) { textPanel.notifyListeners(SWT.KeyDown, e); textPanel.notifyListeners(SWT.KeyUp, e); } - TestUtil.waitForJobs(name, 0, 1000); + TestUtil.waitForJobs(name, ConsoleManager.CONSOLE_JOB_FAMILY, 0, 1000); return this; } @@ -693,7 +694,7 @@ public IOConsoleTestUtil verifyPartitions(final int offset, final int length, fi * @return this {@link IOConsoleTestUtil} to chain methods */ public IOConsoleTestUtil waitForScheduledJobs() { - TestUtil.waitForJobs(name, 25, 5 * 2000); + TestUtil.waitForJobs(name, ConsoleManager.CONSOLE_JOB_FAMILY, 25, 5 * 2000); return this; } diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTests.java index 8a4876b1d9c..1521e7dbdc3 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/IOConsoleTests.java @@ -68,6 +68,7 @@ import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; +import org.eclipse.ui.internal.console.ConsoleManager; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -162,7 +163,7 @@ protected IOConsoleTestUtil getTestUtil(String title) { }); final IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager(); consoleManager.addConsoles(new IConsole[] { console }); - TestUtil.waitForJobs(name.getMethodName(), 25, 10000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 25, 10000); consoleManager.showConsoleView(console); @SuppressWarnings("restriction") final org.eclipse.ui.internal.console.IOConsolePage page = (org.eclipse.ui.internal.console.IOConsolePage) consoleView.getCurrentPage(); diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleManagerTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleManagerTests.java index ad3fb02480b..00728b27b68 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleManagerTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleManagerTests.java @@ -73,7 +73,7 @@ public void testProcessConsoleLifecycle() throws Exception { launch = process.getLaunch(); launchManager.addLaunch(launch); // do not wait on input read job - TestUtil.waitForJobs(name.getMethodName(), 0, 10000, ProcessConsole.class); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsoleManager.class, 0, 10000, ProcessConsole.class); assertThat(consoleManager.getConsoles()).as("console has been added").hasSize(1); } finally { mockProcess.destroy(); @@ -81,7 +81,7 @@ public void testProcessConsoleLifecycle() throws Exception { if (launch != null) { launchManager.removeLaunch(launch); - TestUtil.waitForJobs(name.getMethodName(), 0, 10000); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsoleManager.class, 0, 10000); assertThat(consoleManager.getConsoles()).as("console has been removed").isEmpty(); } } @@ -106,7 +106,7 @@ public void testBug546710_ConsoleCreationRaceCondition() throws Exception { setPreference(DebugUIPlugin.getDefault().getPreferenceStore(), IDebugUIConstants.PREF_AUTO_REMOVE_OLD_LAUNCHES, true); // Stop the JobManager to reliable trigger the tested race // condition. - TestUtil.waitForJobs(name.getMethodName(), 0, 10000); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsoleManager.class, 0, 10000); Job.getJobManager().suspend(); launchManager.addLaunch(process1.getLaunch()); launchManager.addLaunch(process2.getLaunch()); @@ -114,7 +114,7 @@ public void testBug546710_ConsoleCreationRaceCondition() throws Exception { Job.getJobManager().resume(); } - TestUtil.waitForJobs(name.getMethodName(), 0, 10000); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsoleManager.class, 0, 10000); ProcessConsoleManager processConsoleManager = DebugUIPlugin.getDefault().getProcessConsoleManager(); ILaunch[] launches = launchManager.getLaunches(); Set openConsoles = new HashSet<>(); @@ -135,7 +135,7 @@ public void testBug546710_ConsoleCreationRaceCondition() throws Exception { assertThat(removeAction).matches(ConsoleRemoveAllTerminatedAction::isEnabled, "is enabled"); } removeAction.run(); - TestUtil.waitForJobs(name.getMethodName(), 0, 10000); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsoleManager.class, 0, 10000); assertNull("First console not removed.", processConsoleManager.getConsole(process1)); assertNull("Second console not removed.", processConsoleManager.getConsole(process1)); } diff --git a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleTests.java b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleTests.java index 4996c4792e8..8c6a9b33edc 100644 --- a/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleTests.java +++ b/debug/org.eclipse.debug.tests/src/org/eclipse/debug/tests/console/ProcessConsoleTests.java @@ -53,6 +53,7 @@ import org.eclipse.debug.core.Launch; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.views.console.ProcessConsole; import org.eclipse.debug.tests.AbstractDebugTest; import org.eclipse.debug.tests.TestUtil; import org.eclipse.debug.tests.launching.LaunchConfigurationTests; @@ -67,6 +68,7 @@ import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleInputStream; +import org.eclipse.ui.internal.console.ConsoleManager; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -229,7 +231,7 @@ public void testInputReadJobCancel() throws Exception { final Class jobFamily = org.eclipse.debug.internal.ui.views.console.ProcessConsole.class; assertThat(Job.getJobManager().find(jobFamily)).as("check input read job started").hasSizeGreaterThan(0); Job.getJobManager().cancel(jobFamily); - TestUtil.waitForJobs(name.getMethodName(), 0, 1000); + TestUtil.waitForJobs(name.getMethodName(), ProcessConsole.class, 0, 1000); assertThat(Job.getJobManager().find(jobFamily)).as("check input read job is canceled").isEmpty(); } finally { console.destroy(); @@ -301,7 +303,7 @@ public void processTerminationTest(ILaunchConfiguration launchConfig, boolean te waitWhile(__ -> !terminationSignaled.get(), 10_000, __ -> "No console complete notification received."); } finally { consoleManager.removeConsoles(new IConsole[] { console }); - TestUtil.waitForJobs(name.getMethodName(), 0, 10000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 0, 10000); } } @@ -422,7 +424,7 @@ private IOConsole doConsoleOutputTest(byte[] testContent, Map la process.terminate(); } consoleManager.removeConsoles(new IConsole[] { console }); - TestUtil.waitForJobs(name.getMethodName(), 0, 1000); + TestUtil.waitForJobs(name.getMethodName(), ConsoleManager.CONSOLE_JOB_FAMILY, 0, 1000); } } diff --git a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleManager.java b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleManager.java index 0cb084b8d5b..052a51e7844 100644 --- a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleManager.java +++ b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleManager.java @@ -57,6 +57,7 @@ * @since 3.0 */ public class ConsoleManager implements IConsoleManager { + public static final String CONSOLE_JOB_FAMILY = "CONSOLE_JOB_FAMILY"; //$NON-NLS-1$ /** * Console listeners @@ -93,6 +94,11 @@ public RepaintJob() { setSystem(true); } + @Override + public boolean belongsTo(Object family) { + return family == ConsoleManager.CONSOLE_JOB_FAMILY; + } + void addConsole(IConsole console) { synchronized (list) { list.add(console); @@ -260,6 +266,11 @@ private class ShowConsoleViewJob extends WorkbenchJob { setPriority(Job.SHORT); } + @Override + public boolean belongsTo(Object family) { + return family == ConsoleManager.CONSOLE_JOB_FAMILY; + } + void addConsole(IConsole console) { synchronized (queue) { queue.add(console); @@ -359,6 +370,11 @@ public void warnOfContentChange(final IConsole console) { if (!fWarnQueued) { fWarnQueued = true; Job job = new UIJob(ConsolePlugin.getStandardDisplay(), ConsoleMessages.ConsoleManager_consoleContentChangeJob) { + @Override + public boolean belongsTo(Object family) { + return family == ConsoleManager.CONSOLE_JOB_FAMILY; + } + @Override public IStatus runInUIThread(IProgressMonitor monitor) { IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow(); diff --git a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePartitioner.java b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePartitioner.java index 6072a1ad666..1a5935f9c37 100644 --- a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePartitioner.java +++ b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePartitioner.java @@ -753,6 +753,11 @@ private class QueueProcessingJob extends UIJob { setPriority(Job.INTERACTIVE); } + @Override + public boolean belongsTo(Object family) { + return family == ConsoleManager.CONSOLE_JOB_FAMILY; + } + @Override public IStatus runInUIThread(IProgressMonitor monitor) { processPendingPartitions();