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