Given a managed model type as followed:
@Managed
public abstract class MyManagedType {
public abstract String getProp1();
public abstract void setProp1(String prop1);
public String getProp2() {
return getProp1.toUpperCase();
}
}
The prop1
property is managed and it’s value can be references in a rule using @Path(<xyz>.prop1)
, but prop2
cannot be referenced using @Path(<xyz>.prop2)
. Similarly in gradle script prop1
can be accessed as $.<xyz>.prop1
while prop2
cannot be accessed as $.<xyz>.prop2
.
The difference between prop1
and prop2
is an implementation detail and should not impact the way these properties are accessed in rules or in a gradle script.
The workaround, I used, is to convert prop2
as a managed property and set it in a @Finalize
rule, but this is not fully satisfying. It adds some boilerplate code and this property is really a read-only property so it shouldn’t have a setter. With this workaround one can, by mistake, mutate prop2
in a @Mutate
rule without error while the value will eventually be replaced by the value set by the @Finalize
rule.