I think the JFace API is "sufficiently cool as-is" and does not need to be made "cooler" by utilizing generics.
2014-07-30 16:46 GMT+02:00 Ed Merks <ed.me...@gmail.com>: > Dani, > > As I've made pretty clear in the past, I'm a huge non-fan of this > effort. I find it ironic that the platform is rife with raw types (List), > and rather than investing an effort to eliminate those, effort will be > invested on generifying things that just aren't screaming to be generified, > and to do so in a context that is heavily dominated by Object[], which > interacts exceedingly poorly with generics. Thought I've made that > argument already, I think it bears repeating... > > Anywhere you see something like T[] where T is a type parameter, you > already have to get suspicious. Of course we see this in > java.util.Collection: > > <T> T[] toArray(T[] a); > > But note that T is derived from the argument, and argument my not be null, > so even in an erased runtime environment we can determine a reasonable T > from "a", so suspicion alleviated and that's why we can have generic > collection implementations... > > Note that however nice it would have been that toArray() method looked > like this: > > E[] toArray() > > rather than > > Object[] toArray > > because you can't implement this generically, unless you provide some > object with the necessary *runtime *information about E to the > constructor of an implementation class... > > So consider this: > > public interface IStructuredContentProvider extends IContentProvider { > public Object[] getElements(Object inputElement); > } > > there's no relationship between the input element's type and the type of > the array, so if someone proposes > > public interface IStructuredContentProvider<X, Y> extends > IContentProvider<X> { > public Y[] getElements(X inputElement); > } > > I'm going to be very suspicious. What this tells me is there must be some > sensible way of being sure that I'll be getting back a real Y[] instance > and not an Object[] instance. What could that sensible way be? > > Of course directly implementing that interface in a sensible way is a good > solution, but what about generic solutions? > > Consider org.eclipse.jface.viewers.ArrayContentProvider (and note that EMF > generally has *only *content provider implementations analogous to > this). This existing implementation just don't work. You can just forget > about org.eclipse.jface.viewers.ArrayContentProvider.instance, you can just > deprecate org.eclipse.jface.viewers.ArrayContentProvider.getInstance(), and > you'd better add a public constructor and deprecate it while your at it, > because this implementation > > public Object[] getElements(Object inputElement) { > if (inputElement instanceof Object[]) { > return (Object[]) inputElement; > } > if (inputElement instanceof Collection) { > return ((Collection) inputElement).toArray(); > } > return new Object[0]; > } > > simply doesn't work for collections. You'll need new constructors and > new getInstance methods each of which specify the array type, either as > java.lang.Class or as an array prototype, as in the first form to toArray > above. You'd have to provide that even for the constructor that takes a > collection, just the collection instance will not suffice. > > Great, so much for adding generics to JFace being erasure compatible, > counter to what was the case when Java's collection library was > generified. Nothing in the collections library was deprecated and no new > methods were added. In other words, for JFace's changes, you can't just > turn off warnings about raw types, you must deal with the deprecations and > API changes. So if you're trying to maintain something that works with old > versions of Eclipse (i.e., EMF is compatible with Eclipse 3.5), you're > completely hosed. You can't add generics, because you can't compile > against an older target platform that does have it, so you simply have to > live with a sea of raw type warnings (or turn them all off and lose the > value of even having such warnings). Also, you can't start using the new > methods instead of the deprecated ones, so you have to live with that sea > of warning as well, or just turn them off too. Nor you can you exploit any > of it to provide value to clients (given the premise there is value), > because you can't reasonably address this ArrayContentProvider problem > without inflicting the same pain on the clients (who actually have better > things to do, go figure). > > Even the premise that this effort has value is questionable. Granted, > someone writing their first content provider might find it useful, if (and > only if) it's one that's concrete and if (and only if) it doesn't need to > deal with several input types that have no common super type (and even in > that case they'll still typically end up with instanceof tests to return > subtype-appropriate results). That's on the argument side of the > getElements. On the return type side, it's of no benefit to the author; > they just pass this content provider into a generic viewer that doesn't > care whether it's Object[] or X[]. So in fact it's just a burden with which > one must conform. > > So is the value of this whole exercise eliminating instance of checks for > the arguments of the provider implementations? Does this tangible (but > small) benefit justify the impact on the long established community? Do we > expect that community to eliminate their deprecations and generify all > their code? (Sorry guys and girls, all your existing toArray() calls are > invalid, or, don't worry about it, just sprinkle <Object, Object> > everywhere.) I wonder, will JDT and PDE do that? If not, why expect the > rest of the community to do it? And if you don't expect that, what exactly > are you expecting will come from this? > > I suggest folks carefully weight the benefits against the disruptive > nature of this type of change. > > Regards, > Ed > > > > > On 30/07/2014 11:42 AM, Daniel Megert wrote: > > Just for the records, here are some constraints that I required in order > to agree to continue that work: > > - Some stuff just doesn't make sense to be generified because it often > contains various kinds of objects, e.g. (tree) viewers. See also > *http://dev.eclipse.org/mhonarc/lists/platform-ui-dev/msg05459.html* > <http://dev.eclipse.org/mhonarc/lists/platform-ui-dev/msg05459.html>. > - If generified types cannot be plugged together unless everything is > again just Object or Class, it's not worth to generify those types. > - The generified code must be in a shape so that clients can start to fix > their code by invoking Refactor > Infer Generic Type Arguments... This > needs to be validate on existing Platform UI code. > > Dani > > > > From: Lars Vogel <lars.vo...@gmail.com> <lars.vo...@gmail.com> > To: cross-project-issues-dev@eclipse.org, Jeanderson Candido > <jeanderso...@gmail.com> <jeanderso...@gmail.com>, Hendrik Still > <gamm...@gmail.com> <gamm...@gmail.com> > Date: 30.07.2014 11:23 > Subject: [cross-project-issues-dev] Information about the > "Generifing JFace viewers" project > Sent by: cross-project-issues-dev-boun...@eclipse.org > ------------------------------ > > > > Hi, > > as some of you probably remember, the platform.ui team started a GSoC > project last year to generify the JFace viewer framework. We (platform.ui > team together with John Arthone and Dani Megert) decided that it is worth > to finish this project and started a new GSoC project. > > Jeanderson Barros Candido (cc) is working on this project with Hendrik > Still (cc) (GSoC student from last year) and me as mentor. > > I personally think the work looks already very good and plan to integrated > it soon into the master. We are trying to learn from the experience from > last year, therefore: > > - We plan to integrate it as a whole, not piece wise so people can fix > warning messages created by this change > - We reworking the JFace snippets and tests at the same time to have a > first proof-point > - We plan to use it for platform views to validate that it works > > > Of course generifying an existing API, will result in certain limitations > and some suggested a complete rewrite of the JFace viewer framework but > this is currently not the scope of this project. > > The implementation is currently done at Github: > *https://github.com/jeandersonbc/eclipse.platform.ui* > <https://github.com/jeandersonbc/eclipse.platform.ui> and we do our > planning in *https://github.com/jeandersonbc/gsoc14-eclipse-planning* > <https://github.com/jeandersonbc/gsoc14-eclipse-planning>. > > If someone wants to test the new implementation and provide feedback, > please let us know. > > Best regards, Lars_______________________________________________ > cross-project-issues-dev mailing list > cross-project-issues-dev@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev > > > _______________________________________________ > cross-project-issues-dev mailing listcross-project-issues-...@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe from > this list, > visithttps://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev > > > > _______________________________________________ > cross-project-issues-dev mailing list > cross-project-issues-dev@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev >
_______________________________________________ cross-project-issues-dev mailing list cross-project-issues-dev@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev