diff --git a/org.eclipse.xtend.ide.tests/src/org/eclipse/xtend/ide/tests/WorkbenchTestHelper.java b/org.eclipse.xtend.ide.tests/src/org/eclipse/xtend/ide/tests/WorkbenchTestHelper.java index 219afb5e416..bfdc7b7acef 100644 --- a/org.eclipse.xtend.ide.tests/src/org/eclipse/xtend/ide/tests/WorkbenchTestHelper.java +++ b/org.eclipse.xtend.ide.tests/src/org/eclipse/xtend/ide/tests/WorkbenchTestHelper.java @@ -289,6 +289,7 @@ public static IProject createPluginProject(String name, JavaVersion javaVersion, else makeCompliantFor(javaProject, javaVersion); JavaProjectSetupUtil.addJreClasspathEntry(javaProject); + IResourcesSetupUtil.waitForPdeClasspathUpdate(); return result; } diff --git a/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/IResourcesSetupUtil.java b/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/IResourcesSetupUtil.java index 5329ff9118d..2c379814d9f 100644 --- a/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/IResourcesSetupUtil.java +++ b/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/IResourcesSetupUtil.java @@ -38,6 +38,8 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.internal.core.JavaModelManager; +import org.eclipse.pde.internal.core.ClasspathComputer; +import org.eclipse.pde.internal.core.PluginModelManager; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.texteditor.MarkerUtilities; import org.eclipse.xtext.util.StringInputStream; @@ -485,4 +487,24 @@ public static void waitForJdtIndex() { public static void waitForJdtIndex(IProgressMonitor monitor) { JavaModelManager.getIndexManager().waitForIndex(true, monitor); } + + /** + * Waits until PDE has computed the "Plug-in Dependencies" classpath container of plug-in projects. + * + * @since 2.45 + */ + @SuppressWarnings("restriction") + public static void waitForPdeClasspathUpdate() { + if (Job.getJobManager().currentRule() != null) { + return; + } + try { + Job.getJobManager().join(ClasspathComputer.class, null); + Job.getJobManager().join(PluginModelManager.class, null); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } catch (NoClassDefFoundError e) { + // org.eclipse.pde.core is optional dependency + } + } } diff --git a/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/TestedWorkspaceWithJDT.java b/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/TestedWorkspaceWithJDT.java index 7af6927ad1f..4b8fee76aea 100644 --- a/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/TestedWorkspaceWithJDT.java +++ b/org.eclipse.xtext.ui.testing/src/org/eclipse/xtext/ui/testing/util/TestedWorkspaceWithJDT.java @@ -150,6 +150,7 @@ protected void joinUpdateClasspathJob() { if (joinMe != null) { joinMe.join(); } + IResourcesSetupUtil.waitForPdeClasspathUpdate(); } catch (Exception e) { Exceptions.throwUncheckedException(e); } diff --git a/org.eclipse.xtext.ui.tests/tests/org/eclipse/xtext/ui/tests/editor/hover/AbstractProblemHoverTest.java b/org.eclipse.xtext.ui.tests/tests/org/eclipse/xtext/ui/tests/editor/hover/AbstractProblemHoverTest.java index 2816d870316..eec8e14258b 100644 --- a/org.eclipse.xtext.ui.tests/tests/org/eclipse/xtext/ui/tests/editor/hover/AbstractProblemHoverTest.java +++ b/org.eclipse.xtext.ui.tests/tests/org/eclipse/xtext/ui/tests/editor/hover/AbstractProblemHoverTest.java @@ -25,6 +25,7 @@ import org.eclipse.xtext.ui.editor.hover.AbstractProblemHover; import org.eclipse.xtext.ui.editor.model.IXtextDocument; import org.eclipse.xtext.ui.editor.validation.MarkerCreator; +import org.eclipse.xtext.ui.refactoring.ui.SyncUtil; import org.eclipse.xtext.ui.testing.AbstractEditorTest; import org.eclipse.xtext.ui.testing.util.IResourcesSetupUtil; import org.eclipse.xtext.ui.tests.internal.TestsActivator; @@ -67,6 +68,8 @@ public List exec(XtextResource state) throws Exception { for (Issue issue : issues) { markerCreator.createMarker(issue, file, MarkerTypes.forCheckType(issue.getType())); } + TestsActivator.getInstance().getInjector(getEditorId()).getInstance(SyncUtil.class).waitForReconciler(editor); + waitForEventProcessing(); } @Override diff --git a/org.eclipse.xtext.xtext.ui.tests/src/org/eclipse/xtext/xtext/ui/editor/contentassist/XtextContentAssistTest.java b/org.eclipse.xtext.xtext.ui.tests/src/org/eclipse/xtext/xtext/ui/editor/contentassist/XtextContentAssistTest.java index b94072a1687..2776332f29e 100644 --- a/org.eclipse.xtext.xtext.ui.tests/src/org/eclipse/xtext/xtext/ui/editor/contentassist/XtextContentAssistTest.java +++ b/org.eclipse.xtext.xtext.ui.tests/src/org/eclipse/xtext/xtext/ui/editor/contentassist/XtextContentAssistTest.java @@ -27,6 +27,7 @@ import org.eclipse.xtext.ui.refactoring.ui.SyncUtil; import org.eclipse.xtext.ui.shared.SharedStateModule; import org.eclipse.xtext.ui.testing.ContentAssistProcessorTestBuilder; +import org.eclipse.xtext.ui.testing.util.IResourcesSetupUtil; import org.eclipse.xtext.ui.testing.util.ResourceLoadHelper; import org.eclipse.xtext.ui.util.PluginProjectFactory; import org.eclipse.xtext.util.Modules2; @@ -72,6 +73,7 @@ public void doSetupProject() throws Exception{ XtextProjectHelper.NATURE_ID, JavaCore.NATURE_ID, "org.eclipse.pde.PluginNature"); projectFactory.addRequiredBundles(Lists.newArrayList("org.eclipse.xtext")); project = projectFactory.createProject(new NullProgressMonitor(), null); + IResourcesSetupUtil.waitForPdeClasspathUpdate(); get(SyncUtil.class).waitForBuild(new NullProgressMonitor()); } } @@ -80,6 +82,7 @@ public void doSetupProject() throws Exception{ public static void doDeleteProject() throws CoreException { if(project != null && project.exists()) project.delete(true, new NullProgressMonitor()); + project = null; } public ISetup doGetSetup() {