Why not adopt a strategy where all org.eclipse.ui.* EP's are wrapped in an injectable part?
In August I proposed that we modify the class template / byte code to include the annotations (probably because that's when I first learned you could do something like that). If that is still a viable option I'm not sure it would be worth the amount of work.
What I was really trying to get at with that proposal is using the existing API to treat all workbench contributions (o.e.u.* EP's) as E4 parts. Then there isn't an issue of mixing 3.x parts with 4.x parts because the workbench sees them all as 4.x parts. At the same point, if a 3.x part requests a separate workbench part (view / perspective / etc. ), it is relatively straight forward to provide it with a 3.x part. Even if the requested part is defined within a fragment, we can "mach-up" a bridge for the 4.x part to make it appear as a 3.x part.
In my mind this provides a *true* compatibility layer. The migration story becomes simple at that point: migrate what you want, when you want. To migrate a view all you would have to do is break the inheritance from ViewPart (which wouldn't even be necessary) and add a couple of annotations. Maybe we create an optional @E4Part annotation. This way when we look to wrap the contributed part in an injectable E4 part, if any of @E4Part, @PostConstruct, @Focus, etc... are present the contribution isn't wrapped and treated as a raw E4 part. Then you wouldn't have to change *any* code except for adding a couple of annotations. This would also allow you to have 3.x & 4.x parts contributed from the same bundle.
I have been working on something that demo's this functionality, but I recently started with a new company and haven't had much time. Hopefully in the next couple of weeks I will have something I can share.
JD