Migrating plug-ins from Eclipse 3.x to Eclipse 4 - getting ready for Eclipse 4

1 minute read

To migrate your Views and Editors to Eclipse 4 you can choice to use org.eclipse.e4.tools.compat plug-in from the e4 tooling projects. This bridge was developed by Tom Schindl a while ago.

To use this bridge in Eclipse 4.2 or Eclipse 3.8 install the org.eclipse.e4.tools.e3x.bridge feature into your Eclipse IDE.

Afterwards add the following plug-ins to your MANIFEST.MF.

org.eclipse.e4.tools.compat;bundle-version=”0.12.0”, org.eclipse.e4.core.contexts;bundle-version=”1.1.0”

You can now develop your Parts as Pojos:

package example.compat.parts;

import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.di.Focus; 
import org.eclipse.jface.viewers.ArrayContentProvider; 
import org.eclipse.jface.viewers.ColumnLabelProvider; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.viewers.TableViewerColumn; 
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite;

public class View { 
	public static final String ID = "example.compat.view";
	private TableViewer viewer;
	@PostConstruct public void createPartControl(Composite parent) { 
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H\_SCROLL | SWT.V\_SCROLL); 
		viewer.setContentProvider(ArrayContentProvider.getInstance()); 
		TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE); 
		column.getColumn().setWidth(100); 
		column.setLabelProvider(new ColumnLabelProvider() { 
			@Override public String getText(Object element) { 
				return element.toString(); 
			} 
		}); // Provide the input to the ContentProvider 
		viewer.setInput(new String\[\] { 
			"One", "Two", "Three" 
		}); 
	}

	@Focus public void setFocus() { 
		viewer.getControl().setFocus(); 
	} 
}

You only have to wrap them into an instance of DIViewPart:

package example.compat;

import org.eclipse.e4.tools.compat.parts.DIViewPart;
import example.compat.parts.View;

public class ViewWrapper extends DIViewPart<View> {
	public ViewWrapper() { 
		super(View.class);
	}
}

In your plugin.xml you use ViewWrapper to define your Views.

This way you can use the dependency injection already in your Eclipse 3.x plugin, have a better possibility to test your user interface components in plain JUnit test (they are just POJO) and get ready for for a full Eclipse 4 migration.

Updated: