Julian Hyde created CALCITE-4254: ------------------------------------ Summary: ImmutableBeans should make an immutable copy of lists, sets, maps Key: CALCITE-4254 URL: https://issues.apache.org/jira/browse/CALCITE-4254 Project: Calcite Issue Type: Bug Reporter: Julian Hyde
{{ImmutableBeans}} should make an immutable copy of values of type {{List}}, {{Set}} or {{Map}} when they are provided via a setter method. For example, this is how it should work: {code:java} MyBean bean = ImmutableBeans.create(MyBean.class); List<Integer> evens = Arrays.asList(2, 4, 6); bean = bean.withNumbers(evens); assertThat(bean.getNumbers(), equalTo(evens)); assertThat(bean.getNumbers(), isInstanceOf(ImmutableList.class)); {code} Note that {{evens}} has been converted to an {{ImmutableList}} with the same contents. You can control this behavior by setting {{makeImmutable = false}} when you declare the property: {code:java} interface MyBean { @ImmutableBean.Property(makeImmutable = false) List<Integer> getNumbers(); MyBean withNumbers(List<Integer> numbers); } {code} By default, {{makeImmutable}} is true. This will change behavior of a very few existing beans that were assuming that the value that was put in would be the value that came out (see a couple of changes in {{VolcanoPlannerTest}}), but for the vast majority, immutability is the desired behavior. -- This message was sent by Atlassian Jira (v8.3.4#803005)