So +1 .. and please update the CCC

-phil.

On 2/9/17, 8:51 PM, Jayathirth D V wrote:

Hi,

Phil & Jim thanks for your review.

I have modified the code to remove the unneeded import of import java.util.Objects.

Please find the updated webrev :

http://cr.openjdk.java.net/~jdv/7107905/webrev.19/ <http://cr.openjdk.java.net/%7Ejdv/7107905/webrev.19/>

Thanks,

Jay

*From:*Phil Race
*Sent:* Friday, February 10, 2017 3:35 AM
*To:* Jim Graham; Jayathirth D V; 2d-dev@openjdk.java.net
*Subject:* Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905: ColorModel subclasses are missing hashCode() or equals() or both methods

Oh .. my reply was to an off-list email. I did not notice that.
So I should repeat that here :

On 2/9/17 12:38 PM, Phil Race wrote:

    32 import java.util.Objects;

    This is now un-used, isn't it ? Yet all 3 subclasses still have
    this import.

    I don't need to "approve" a new webrev containing that but it would
    be good to publish one.

    +1


-phil.

On 02/09/2017 01:59 PM, Jim Graham wrote:

    From my end this looks good.  +1 except for 2 outstanding review
    issues:

    - Would like to hear back final comments from Joe Darcy on the new
    doc changes/CCC request
    - Phil pointed out that there is an unneeded import in some of the
    files.  I agree that we should make a final webrev to delete them,
    but I don't need to approve it if that is the only change...

                ...jim

    On 2/8/17 11:56 PM, Jayathirth D V wrote:

        Hello All,

        There was a closed test which was failing because of
        identity-as-equals approach for ColorModel equals() method.
        I have modified it and added in the webrev. Along with this we
        are now using colorspace.hashCode() in hashCode() functions
        instead of Objects.hashCode(this.colorspace). Reverted using
        Arrays.equals() in IndexColorModel equals() method because
        Arrays.copyOf() takes lot of time.

        Please find updated webrev for review :
        http://cr.openjdk.java.net/~jdv/7107905/webrev.18/
        <http://cr.openjdk.java.net/%7Ejdv/7107905/webrev.18/>

        Ran jtreg test and JCK there are no additional test case
        failures because of the above change. Only 4 JCK tests are
        failing as it was happening previously.

        Just copy pasted my observation regarding JCK failures so that
        we can trace it easily:

        1)api/java_awt/Image/ColorModel/index.html#Constructor:
        Failed. test cases: 4; passed: 3; failed: 1; first test case
        failure: ColorModel2001

            This test fails because getComponentSize() returned an
        array with length 3 but it expects the length to be 4. In the
        test case they have bits per component array     of length 4
        like {8, 8, 8, 8}. But in the test case wherever they are
        passing "has Alpha" as "false" we omit the alpha component
        bit. This is because of tighter check     that we have in
        ColorModel class as "nBits = Arrays.copyOf(bits,
        numComponents);" . "numComponents" will be 3 if hasAlpha is
        false.

        2)api/java_awt/Image/ColorModel/index.html#Equals: Failed.
        test cases: 3; passed: 2; failed: 1; first test case failure:
        ColorModel0004

            Here they check for equality between 2 ColorModel objects
        having same values, but it fails because now we are using
        identity-as-equals check in ColorModel.

        3)api/java_awt/Image/ColorModel/index.html#HashCode: Failed.
        test cases: 2; passed: 1; failed: 1; first test case failure:
        ColorModel2006

            Here they check for hashCode equality between 2 ColorModel
        objects having same values, but it fails since we don't have
        hashCode check in ColorModel and it     will be different
        between 2 Objects.

        
4)api/java_awt/Image/ComponentColorModel/index.html#ConstructorTesttestCase1:
        Failed. test cases: 2; passed: 1; failed: 1; first test case
        failure: testCase1

            Throws "java.lang.ArrayIndexOutOfBoundsException: 3". This
        is also happening because of same reason as why the first JCK
        test is failing. We omit alpha bit if     hasAlpha is false
        but JCK test tries to call getComponentSize() with index 3
        which throws ArrayIndexOutOfBoundsException.

        Thanks,
        Jay
        -----Original Message-----
        From: Jayathirth D V
        Sent: Wednesday, February 08, 2017 3:41 PM
        To: Jim Graham; Philip Race; 2d-dev@openjdk.java.net
        <mailto:2d-dev@openjdk.java.net>
        Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905:
        ColorModel subclasses are missing hashCode() or equals() or
        both methods

        Hello All,

        I have updated the webrev to include the following changes.

            1) Have identity as equals check in equals() method of
        ColorModel but elaborate the specification of equals() and
        hashCode() in ColorModel on what properties to          check
        in subclasses of ColorModel.
            2) Made changes to test case to have single helper method
        wherever we have same equals/hashCode() check.
            3) Updated IndexColorModel equals() method to use
        Arrays.equals() for rgb[] data.
            4) Add comment on why we are not using validBits to
        calculate hashCode() in IndexColorModel hashCode() method.

        Please find updated webrev for review :
        http://cr.openjdk.java.net/~jdv/7107905/webrev.17/
        <http://cr.openjdk.java.net/%7Ejdv/7107905/webrev.17/>

        Thanks,
        Jay

        -----Original Message-----
        From: Jim Graham
        Sent: Thursday, February 02, 2017 2:51 AM
        To: Phil Race; Jayathirth D V; 2d-dev@openjdk.java.net
        <mailto:2d-dev@openjdk.java.net>
        Subject: Re: [OpenJDK 2D-Dev] Review Request for JDK-7107905:
        ColorModel subclasses are missing hashCode() or equals() or
        both methods

        I think we should move this issue (array size returned from
        getCompSizes) into a separate bug entry and a separate fix.
        I don't think we need to fix the clone() in the constructor
        and the getter just to get hashcode/equals right...

                    ...jim

        On 1/31/17 2:34 PM, Jim Graham wrote:

            For an application to run into this same issue they'd have
            to expect
            getCompSizes() to return data for components that don't
            exist.  It's
            unlikely they would use that data if they really
            understand the
            objects.  While that would be odd, I guess I can see
            someone might be
            constructing all of their CM's from an array of 4 components
            regardless of the number of actual components and we'd be
            happily
            remembering the useless extra components and returning an
            array of 4
            from getCompSizes().  As I said, they shouldn't really be
            reading and
            interpreting those extra components for any image
            processing, but I can imagine that they might do something
            like create a variant CM by calling the CompSizes() and
            copying them into a new array to construct a new CM with
            modifications.  They might just robotically always copy 4
            values without really checking how many are valid.  That's
            a stretch, and their code is weak.  I can conceive of how
            this might happen, but I really have no idea how likely it
            is...

                        ...jim

            On 1/30/17 3:56 PM, Phil Race wrote:

                Sounds like we should at least try to get the tests
                updated so they only test what the spec. says.
                Although it does indicate that there is at least a
                chance that
                application code might also fail due to similar
                assumptions.
                Does #1 not fail with the previous iteration of this
                change too ?

                -phil.

                On 01/30/2017 01:40 PM, Jim Graham wrote:

                    Hmmm.  Sounds like the test cases were written
                    based on bugs in the
                    implementation.  I'm not sure what the best tactic
                    is here for the
                    short term for getting this in, but many of these
                    changes should eventually be considered bugs in
                    the tests.  Is it acceptable to break API tests
                    like this at the last minute even if the tests are
                    at fault?  Phil?

                    Notes on specific instances below...

                    On 1/30/17 2:22 AM, Jayathirth D V wrote:

                        Hi Phil,

1)api/java_awt/Image/ColorModel/index.html#Constructor:
                        Failed.
                        test cases: 4; passed: 3; failed: 1; first
                        test case failure:
                        ColorModel2001

                            This test fails because getComponentSize()
                        returned an array with length 3 but it expects
                        the length to be 4. In
                        the test case they have bits per component
                        array     of length 4 like {8, 8, 8, 8}. But
                        in the test case wherever
                        they are passing "has Alpha" as "false" we
                        omit the alpha component bit. This is because
                        of tighter check     that we
                        have in ColorModel class as "nBits =
                        Arrays.copyOf(bits,
                        numComponents);" . "numComponents" will be 3
                        if hasAlpha is false.


                    This is a bug in the test then, especially if the
                    size of our array matches the return value of
                    getNumComponents.


2)api/java_awt/Image/ColorModel/index.html#Equals:
                        Failed. test
                        cases: 3; passed: 2; failed: 1; first test case
                        failure: ColorModel0004

                            Here they check for equality between 2
                        ColorModel objects
                        having same values, but it fails because now
                        we are using identity-as-equals check in
                        ColorModel.


                    How do they accomplish this when the CM class is
                    abstract?  Do they
                    create a relatively empty subclass and instantiate
                    that?

                    The documentation for the equals() method does not
                    document the
                    conditions under which it returns true, it uses a
                    vague concept of "equals this ColorModel".  I
                    don't see how they could test anything given that
                    documentation.


3)api/java_awt/Image/ColorModel/index.html#HashCode:
                        Failed.
                        test cases: 2; passed: 1; failed: 1; first
                        test case
                        failure: ColorModel2006

                            Here they check for hashCode equality
                        between 2 ColorModel objects having same
                        values, but it fails since we
                        don't have hashCode check in ColorModel and
                        it     will be different between 2 Objects.


                    Same as above, there are no promises documented.



                        
4)api/java_awt/Image/ComponentColorModel/index.html#ConstructorTest

                        testCase1: Failed. test cases: 2; passed: 1;
                        failed: 1; first test case failure: testCase1

                            Throws
                        "java.lang.ArrayIndexOutOfBoundsException: 3".
                        This is also happening because of same reason
                        as why the
                        first JCK test is failing. We omit alpha bit
                        if     hasAlpha is false but JCK test tries to
                        call getComponentSize()
                        with index 3 which throws
                        ArrayIndexOutOfBoundsException.


                    Same assessment as #1 above...

                    Again, while these are my recommendations about
                    the correctness of
                    these tests, the question remains whether we want
                    to introduce a
                    change at this point in the release cycle that
                    will essentially invalidate a number of tests that
have been working for several releases already. I'll leave that tactic issue to Phil...

                                    ...jim

Reply via email to