SimpleFeatureTypeImpl has inconsistent iteration order, broken equals/hashCode
------------------------------------------------------------------------------
Key: GEOT-2338
URL: http://jira.codehaus.org/browse/GEOT-2338
Project: GeoTools
Issue Type: Bug
Components: core main
Affects Versions: 2.6-M2
Reporter: Ben Caradoc-Davies
Assignee: Jody Garnett
Attachments: SimpleFeatureTypeImpl.patch
SimpleFeatureTypeImpl returns its internal property descriptor list via
getAttributeDescriptors(), but when accessed via the FeatureType API
getDescriptors(), will return its property descriptors in a different order.
ComplexTypeImpl (grandparent of SimpleFeatureTypeImpl) uses a HashMap to store
descriptors, so getDescriptors(), which iterates over this Map, will return
descriptors in a random order. This is *A Bad Thing*, because descriptor order
is *very* significant for simple feature types. Furthermore, ComplexTypeImpl
uses Map semantics for equals/hashCode, which is guaranteed to be order
independent. This means that two SimpleFeatureTypeImpl instances with the same
properties in a different order must be equal. This is also *A Very Bad Thing*.
Changing ComplexTypeImpl to use LinkedHashMap to fix the the iteration order
will not fix the equals/hashCode problem. It is more straightforward and likely
faster to override getDescriptors() to return the descriptors list. Likewise,
equals and hashCode are easily fixed.
The attached patch:
(1) Fixes iteration order by ensuring getAttributeDescriptors() and
getAttributeDescriptors() return the same immutable object.
(2) Makes these methods final to preserve the contract.
(3) Ensures the descriptors member is immutable by making it an unmodifiable
copy.
(4) Adds unit tests for iteration order and equality.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel