From 1c95ddf086c1db910acdba6a9888fd7d8ac4e6ca Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 07:30:36 +0000 Subject: [PATCH 1/4] Initial plan From 9b6a560d390dfb4567e9f3331fbc62f9cf4adccf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 07:36:38 +0000 Subject: [PATCH 2/4] Add version constraint [5,6) to junit-jupiter-api bundle Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> --- .../internal/ui/correction/java/JavaResolutionFactory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java index f375b54d604..ab91aee4020 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java @@ -223,6 +223,10 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co } IPluginImport impt = base.getPluginFactory().createImport(); impt.setId(pluginId); + // Add version constraint for junit-jupiter-api to restrict to version 5.x + if ("junit-jupiter-api".equals(pluginId)) { //$NON-NLS-1$ + impt.setVersion("[5,6)"); //$NON-NLS-1$ + } base.getPluginBase().add(impt); } else { IPluginImport[] imports = base.getPluginBase().getImports(); From 131a3051a4f509df28d52252b572ae5d467b94dd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 07:43:48 +0000 Subject: [PATCH 3/4] Use explicit version format [5.0.0,6.0.0) for consistency Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> --- .../pde/internal/ui/correction/java/JavaResolutionFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java index ab91aee4020..5c8b79d0c4c 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java @@ -225,7 +225,7 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co impt.setId(pluginId); // Add version constraint for junit-jupiter-api to restrict to version 5.x if ("junit-jupiter-api".equals(pluginId)) { //$NON-NLS-1$ - impt.setVersion("[5,6)"); //$NON-NLS-1$ + impt.setVersion("[5.0.0,6.0.0)"); //$NON-NLS-1$ } base.getPluginBase().add(impt); } else { From db1bb684ae8a8c72c2d38c80873de6a2f493ae0f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 09:24:48 +0000 Subject: [PATCH 4/4] Refactor to use structured bundle info with versions for JUnit 5 Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com> --- .../java/JavaResolutionFactory.java | 59 ++++++++++++++++--- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java index 5c8b79d0c4c..932026df2d3 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java @@ -198,10 +198,15 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co if (!(model instanceof IPluginModelBase base)) { return; } - String[] pluginIdStrings = null; if ("JUnit 5 bundles".equals(getChangeObject())) { //$NON-NLS-1$ - pluginIdStrings = getJUnit5Bundles(); + if (!isUndo()) { + addJUnit5Bundles(base); + } else { + removeJUnit5Bundles(base); + } + return; } + String[] pluginIdStrings = null; if (getChangeObject() instanceof ExportPackageDescription) { pluginIdStrings = new String[1]; pluginIdStrings[0] = ((ExportPackageDescription) getChangeObject()).getSupplier() @@ -223,10 +228,6 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co } IPluginImport impt = base.getPluginFactory().createImport(); impt.setId(pluginId); - // Add version constraint for junit-jupiter-api to restrict to version 5.x - if ("junit-jupiter-api".equals(pluginId)) { //$NON-NLS-1$ - impt.setVersion("[5.0.0,6.0.0)"); //$NON-NLS-1$ - } base.getPluginBase().add(impt); } else { IPluginImport[] imports = base.getPluginBase().getImports(); @@ -239,8 +240,50 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co } } - private String[] getJUnit5Bundles() { - return new String[] { "org.junit", "junit-jupiter-api" }; //$NON-NLS-1$ //$NON-NLS-2$ + private void addJUnit5Bundles(IPluginModelBase base) throws CoreException { + String[][] bundles = getJUnit5Bundles(); + for (String[] bundleInfo : bundles) { + String pluginId = bundleInfo[0]; + String version = bundleInfo.length > 1 ? bundleInfo[1] : null; + + IPluginImport[] imports = base.getPluginBase().getImports(); + boolean duplicate = false; + for (IPluginImport iPluginImport : imports) { + if (iPluginImport.getId().equals(pluginId)) { + duplicate = true; + break; + } + } + if (duplicate) { + continue; + } + IPluginImport impt = base.getPluginFactory().createImport(); + impt.setId(pluginId); + if (version != null) { + impt.setVersion(version); + } + base.getPluginBase().add(impt); + } + } + + private void removeJUnit5Bundles(IPluginModelBase base) throws CoreException { + String[][] bundles = getJUnit5Bundles(); + for (String[] bundleInfo : bundles) { + String pluginId = bundleInfo[0]; + IPluginImport[] imports = base.getPluginBase().getImports(); + for (IPluginImport pluginImport : imports) { + if (pluginImport.getId().equals(pluginId)) { + base.getPluginBase().remove(pluginImport); + } + } + } + } + + private String[][] getJUnit5Bundles() { + return new String[][] { + { "org.junit" }, //$NON-NLS-1$ + { "junit-jupiter-api", "[5.0.0,6.0.0)" } //$NON-NLS-1$ //$NON-NLS-2$ + }; } }, new NullProgressMonitor());