diff --git a/e4tools/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java b/e4tools/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java index f66bd71c7f3..ce38b7d4e1c 100644 --- a/e4tools/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java +++ b/e4tools/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java @@ -253,6 +253,7 @@ public void createControl(Composite parent) { WidgetProperties.text().observe(t), BeanProperties.value(FRAGMENT_ROOT, IPackageFragmentRoot.class).observe(clazz), new UpdateValueStrategy() + .setConverter(new StringToPackageFragmentRootConverter(fWorkspaceRoot)) .setBeforeSetValidator(new PFRootValidator()), UpdateValueStrategy.create(new PackageFragmentRootToStringConverter())); @@ -585,4 +586,37 @@ public IPackageFragment convert(String fromObject) { } } + + static class StringToPackageFragmentRootConverter extends Converter { + + private final IWorkspaceRoot workspaceRoot; + + public StringToPackageFragmentRootConverter(IWorkspaceRoot workspaceRoot) { + super(String.class, IPackageFragmentRoot.class); + this.workspaceRoot = workspaceRoot; + } + + @Override + public IPackageFragmentRoot convert(String fromObject) { + if (fromObject == null || fromObject.isEmpty()) { + return null; + } + + try { + IJavaModel javaModel = JavaCore.create(workspaceRoot); + // Try to find the package fragment root by its path + for (IJavaProject javaProject : javaModel.getJavaProjects()) { + for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) { + if (root.getPath().makeRelative().toString().equals(fromObject)) { + return root; + } + } + } + } catch (JavaModelException e) { + // Return null if conversion fails + } + + return null; + } + } }