Skip to content

Allow tests to wait on reconciler threads to finish #3818

@trancexpress

Description

@trancexpress

While looking into various JDT UI test fails, e.g. eclipse-jdt/eclipse.jdt.ui#2287, I noticed that the we have no option to wait on the thread started here: org.eclipse.jface.text.reconciler.AbstractReconciler.BackgroundWorker

E.g. I can get the addition of the project info at this stack trace:

"org.eclipse.jdt.internal.ui.text.JavaReconciler" #86 [165284] daemon prio=1 os_prio=0 cpu=0.86ms elapsed=66.00s tid=0x00007fe978058760 nid=165284 at breakpoint [0x00007fe9037f9000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:585)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:284)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:270)
        at org.eclipse.jdt.internal.core.JavaProject.getJavaProjectElementInfo(JavaProject.java:2088)
        at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2823)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:117)
        at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:158)
        at org.eclipse.jdt.internal.core.CancelableNameEnvironment.<init>(CancelableNameEnvironment.java:32)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:276)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:375)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:244)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:108)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:816)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1431)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:132)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:94)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:91)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:158)
        at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:94)
        at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:107)
        at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
        at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundWorker.run(AbstractReconciler.java:205)
        at java.lang.Thread.runWith(java.base@21.0.10/Thread.java:1596)
        at java.lang.Thread.run(java.base@21.0.10/Thread.java:1583)

While the entire org.eclipse.jdt.ui.tests.core.ImportOrganizeTest finishes.

We should have some option to be able to wait on this thread to exit, to ensure tests don't run with parallel tasks from previous tests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions