[ https://issues.apache.org/jira/browse/GROOVY-8416?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King reassigned GROOVY-8416: --------------------------------- Assignee: Paul King > Map-based constructor generated by @Immutable works only with HashMap > --------------------------------------------------------------------- > > Key: GROOVY-8416 > URL: https://issues.apache.org/jira/browse/GROOVY-8416 > Project: Groovy > Issue Type: Bug > Affects Versions: 2.4.13 > Reporter: Andreas Mayer > Assignee: Paul King > Priority: Major > > If you call the map-based constructor of an {{@Immutable}} class with a > non-{{HashMap}}, it will try to set the properties via setters, which causes > a {{ReadOnlyPropertyException}}. Somehow it works with {{HashMap}} or > subclasses like {{LinkedHashMap}}. Why? > {code} > import groovy.transform.Immutable > @Immutable > class Point { > int x > int y > } > def coordinates = [x: 1, y: 2] > assert coordinates instanceof LinkedHashMap > def p1 = new Point(coordinates) > assert p1.x == 1 > def p2 = new Point(new HashMap(coordinates)) > assert p2.x == 1 > try { > new Point(new TreeMap(coordinates)) > } catch (e) { > assert e instanceof ReadOnlyPropertyException > } > try { > new Point(coordinates.asImmutable()) > } catch (e) { > assert e instanceof ReadOnlyPropertyException > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)