[rules-dev] Declared types - extension
Michael Anstis
michael.anstis at gmail.com
Wed Jul 13 11:28:48 EDT 2011
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 at 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 at gmail.com> wrote:
>
>> https://issues.jboss.org/browse/JBRULES-3133 created.
>>
>>
>> On 12 July 2011 13:08, Michael Anstis <michael.anstis at 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 at 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 at 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 at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> rules-dev mailing list
>>>> rules-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110713/39ffa079/attachment-0001.html
More information about the rules-dev
mailing list