-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 1.22.0
-
Component/s: None
-
Labels:None
In quite a few places we have immutable config classes, and because they are immutable we have builders. It all gets quite verbose.
I propose to add a utility class, ImmutableBeans, that is able to generate an implementation of a given interface. For example,
interface MyBean { @Property int getAge(); MyBean withAge(int age); @Property String getName(); MyBean withName(String name); } MyBean b = ImmutableBeans.create(MyBean.class); assertThat(b.withAge(37).withName("Fred").getAge(), is(37));
We could replace SqlParser.ConfigBuilder, Frameworks.ConfigBuilder, RelBuilder.ConfigBuilder, quite a few of the associated Config classes, and perhaps quite a few fluent classes that we use in tests.
Work in progress: https://github.com/julianhyde/calcite/tree/3328-immutable-beans