I'm a little confused. What code did you apply javap to? I dont think I pushed a copy of the newly revised code to any repos so you'd have to build it yourself.

The new code looks like this:

        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SubjectCRIKey that = (SubjectCRIKey) o;

            if (hashcode != that.hashcode) return false;
if (cri != null ? !cri.equals(that.cri) : that.cri != null) return false; if (subject != null ? !subject.equals(that.subject) : that.subject != null) return false;

            return true;
        }


I can believe the old code resembled your deconstruction below with the addition of a "return".

thanks
david jencks

On May 21, 2009, at 12:08 AM, Bert_nor wrote:


I think this is a compiler bug.
javap gives next code:
...........
26:  getfield        #2; //Field subject:Ljavax/security/auth/Subject;
29:  ifnonnull       42
32:  aload_2
33:  getfield        #2; //Field subject:Ljavax/security/auth/Subject;
36:  ifnonnull       91
39:  goto    87
42:  aload_0
43:  getfield        #2; //Field subject:Ljavax/security/auth/Subject;
46:  aload_2
47:  getfield        #2; //Field subject:Ljavax/security/auth/Subject;
50:  invokevirtual   #8; //Method
javax/security/auth/Subject.equals:(Ljava/lang/Object;)Z
53:  ifeq    73         <---------------------
if(subject.equals(o.subject))
56:  aload_0
57:  getfield        #3; //Field
cri:Ljavax/resource/spi/ConnectionRequestInfo;
60:  ifnonnull       73
63:  aload_2
64:  getfield        #3; //Field
cri:Ljavax/resource/spi/ConnectionRequestInfo;
67:  ifnonnull       91
70:  goto    87
73:  aload_0            <----------------------
74:  getfield        #3; //Field
cri:Ljavax/resource/spi/ConnectionRequestInfo;
77:  aload_2
78:  getfield        #3; //Field
cri:Ljavax/resource/spi/ConnectionRequestInfo;
81:  invokevirtual   #9; //Method
java/lang/Object.equals:(Ljava/lang/Object;)Z
84:  ifeq    91
87:  iconst_1
88:  goto    92
91:  iconst_0
92:  ireturn

The result is the following construction

if(subject.equals(o.subject)){
    cri.equals(o.cri);
}



djencks wrote:

I opened GERONIMO-4639 and fixed this in trunk and branches 2.1

I couldn't understand the nested iff statements too well so I just
replaced it with what idea generates for equals :-)

This is a component, not part of geronimo itself.  We'll need to push
a release of at least the 2.1 branch.

thanks
david jencks




--
View this message in context: 
http://www.nabble.com/NullPointerException-MultiPoolConnectionInterceptor%24SubjectCRIKey.equals-tp23634940s134p23648828.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.

Reply via email to