Lightweight peer implementation
Bryce McKinlay
bryce@mckinlay.net.nz
Sun Aug 10 04:16:00 GMT 2003
On Saturday, Aug 9, 2003, at 15:27 Pacific/Auckland, Thomas Fitzsimmons
wrote:
> On Fri, 2003-08-08 at 15:38, Scott Gilbertson Onsite wrote:
>> I claim that lightweights are not platform-specific, which is why I
>> submitted the following patch (which has not been comitted) a while
>> back.
>> http://gcc.gnu.org/ml/java-patches/2003-q2/msg00140.html
Yup, I agree. Lightweights should be implemented entirely in the
"generic" part of the code, not in the peer code.
> I've adopted your approach and implemented some of the ComponentPeer
> methods. I tried to copy the behaviour of the corresponding Component
> calls when peer == null. My rational is that maybe we can eventually
> remove the peer != null checks in Component.java, and assume that a
> component always has a non-null peer, whether it be lightweight or
> heavyweight.
I think the null peer checks in Component are required because the
peers do not get created until the component is added to a container.
> In the original thread, Tom mentioned that returning a gnu.java.awt
> class from a java.awt class might not be a good idea. What about
> implementing LightweightPeer as a private inner class of
> Component.java? This approach would have the advantage that the peer
> would have direct access to Component's fields.
I don't see a problem with returning a gnu.* class from getPeer(). Sun
calls it sun.awt.NullComponentPeer (obtained via getPeer().getClass())
so our name is analogous to that. Having direct access to the fields
would be nice (note that they are package-private), the problem of
course is that clients can override the get/set methods, and matching
the JREs behaviour with regard to what public methods it calls at what
times might be important to some (badly written) applications. Does
anyone have an idea on how much this matters in the real world?
Regards
Bryce.
More information about the Java-patches
mailing list