--- old/src/java.desktop/share/classes/java/awt/image/IndexColorModel.java 2016-04-13 13:49:40.954553000 +0530 +++ new/src/java.desktop/share/classes/java/awt/image/IndexColorModel.java 2016-04-13 13:49:40.374263000 +0530 @@ -28,6 +28,8 @@ import java.awt.Transparency; import java.awt.color.ColorSpace; import java.math.BigInteger; +import java.util.Arrays; +import java.util.Objects; /** * The {@code IndexColorModel} class is a {@code ColorModel} @@ -1532,4 +1534,81 @@ + " isAlphaPre = "+isAlphaPremultiplied ); } + + /** + * Tests if the specified {@code Object} is an instance + * of {@code IndexColorModel} and equals this + * {@code IndexColorModel}. + * @param obj the {@code Object} to test for equality + * @return {@code true} if the specified {@code Object} + * is an instance of {@code IndexColorModel} and equals this + * {@code IndexColorModel}; {@code false} otherwise. + */ + @Override + public boolean equals(Object obj) { + + if (!(obj instanceof IndexColorModel)) { + return false; + } + + IndexColorModel cm = (IndexColorModel) obj; + if (this == cm) { + return true; + } + + if (!super.equals(obj)) { + return false; + } + + if (map_size != cm.map_size || + transparent_index != cm.transparent_index) + { + return false; + } + + // verify whether we have to check equality of all bits in validBits + boolean testValidBits; + if (validBits == cm.validBits) { + testValidBits = false; + } else if (validBits == null || cm.validBits == null) { + return false; + } else if (validBits.equals(cm.validBits)) { + testValidBits = false; + } else { + testValidBits = true; + } + + if (testValidBits) { + for (int i = 0; i < map_size; i++) { + if (rgb[i] != cm.rgb[i] || + validBits.testBit(i) != cm.validBits.testBit(i)) + { + return false; + } + } + } else { + for (int i = 0; i < map_size; i++) { + if (rgb[i] != cm.rgb[i]) { + return false; + } + } + } + return true; + } + + /** + * Returns the hash code for IndexColorModel. + * + * @return a hash code for IndexColorModel + */ + @Override + public int hashCode() { + int hash = 7; + hash = 43 * hash + super.hashCode(); + hash = 43 * hash + Arrays.hashCode(this.rgb); + hash = 43 * hash + this.map_size; + hash = 43 * hash + this.transparent_index; + hash = 43 * hash + Objects.hashCode(this.validBits); + return hash; + } }