Here's some detail from Sotty:-
- It is indeed necessary to declare a legacy class if you want another to
extend it.
- The classFieldAccessor constructor requires both getter and setter to
be present for each field, so there's indeed a bug. A field must be
inherited if and only if it has both getter and setter (right now, only the
getter is checked). I have put an additional condition in the
PackageBuilder: this will allow to extend non-bean "legacy" classes.
- Currently, when you redeclare a field, it is overridden. On a second
and third thought, I do not "like" this behaviour, so I have changed the PB
to prevent fields from being overridden :)
- It is still possible to redeclare a field with the same name if the
type is the same
- Declared metadata is already inherited by extenders
Thanks for the insights Sotty.
Mike
On 13 July 2011 13:00, Michael Anstis <michael.anstis(a)gmail.com> wrote:
Wolfgang, still no news as to the expected behaviour :(
Sotty, I appreciate you are probably busy with other activities, however
any your thoughts on the following would be most welcome:-
- For POJOs is a field only added to the declared type if it has a
getter and setter (something laune said he'd seen; email earlier in this
thread)?
- Are fact-level annotations inherited?
- Are field-level annotations inherited?
- Type erasure on subclasses, if type A declares "myVar : String" and
type B extends A and declaring "myVar : Integer", what should happen?
For others interested, here's some answers already received:
- Can declarative types extend Java POJOs and other declared types?
<sotty> yes
- For POJO's do I need to include an "empty" declaration? So
"declare
java.util.ArrayList end" if I want to "declare MyList extends
ArrayList" in
a java.util package?
<sotty> no, it should be enough to import the fqn or use it in the
"extends".
*<manstis> note this is different to what is documented in the Drools
Expert user-guide
*
Thanks,
Mike
On 12 July 2011 13:12, Michael Anstis <michael.anstis(a)gmail.com> wrote:
>
https://issues.jboss.org/browse/JBRULES-3133 created.
>
>
> On 12 July 2011 13:08, Michael Anstis <michael.anstis(a)gmail.com> wrote:
>
>> There's also a quirk regarding the class resolution:-
>>
>> Given Person class:-
>>
>> package com.guvnor.domain;
>>
>> import java.math.BigDecimal;
>>
>> public class Person {
>>
>> private BigDecimal salary;
>>
>> public BigDecimal getSalary() {
>> return salary;
>> }
>>
>> public void setSalary(BigDecimal salary) {
>> this.salary = salary;
>> }
>>
>> }
>>
>>
>> The following compiles OK:-
>>
>> package com.sample
>>
>> import com.guvnor.domain.Person
>>
>> declare Person
>> end
>>
>> However the following does not (without explicitly importing
>> java.math.BigDecimal - which is a field type in Person):-
>>
>> package com.sample
>>
>> import com.guvnor.domain.Person
>> import com.guvnor.domain.Address
>>
>> declare Person
>> end
>>
>> declare Person2 extends Person
>> flange : String
>> end
>>
>> Error being "Unknown DroolsError class
>> org.drools.compiler.TypeDeclarationError: Unable to find class
'BigDecimal'
>> ".
>>
>> With kind regards,
>>
>> Mike
>>
>>
>> On 11 July 2011 08:41, Wolfgang Laun <wolfgang.laun(a)gmail.com> wrote:
>>
>>> Subsection 5.7.7 discusses 'extends' and describes how it is done
for
>>> types declared in Java.
>>>
>>> One finesse is apparently not documented: Java types must be proper
>>> JavaBeans; otherwise the construction of the accessors will fail. (Try, for
>>> instance, a property with a getter but no matching setter.)
>>>
>>> HTH
>>> -W
>>>
>>>
>>> On 10 July 2011 22:29, Michael Anstis <michael.anstis(a)gmail.com>
wrote:
>>>
>>>> What's the rules around declared types extending another (declared)
>>>> type?
>>>>
>>>> I've been asked to provide for declared type extension in Guvnor (by
>>>> Prakash) but the Expert user-guide doesn't say it exists at the
engine
>>>> level.
>>>>
>>>> I tried "declare MyType extends java.util.ArrayList" and
received a
>>>> parser\compiler error stating "java.util.ArrayList was not a
declared type"
>>>> (or words to that effect) so some form of extension appears possible.
>>>>
>>>> Thanks,
>>>>
>>>> Mike
>>>>
>>>> _______________________________________________
>>>> rules-dev mailing list
>>>> rules-dev(a)lists.jboss.org
>>>>
https://lists.jboss.org/mailman/listinfo/rules-dev
>>>>
>>>>
>>>
>>> _______________________________________________
>>> rules-dev mailing list
>>> rules-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-dev
>>>
>>>
>>
>