On Thu, Jul 3, 2008 at 5:39 PM, Dave Thompson <[EMAIL PROTECTED]> wrote:
>
> Tom Morris wrote:
>>
>> - A corollary to the above, but complicated by our peculiar API
>> design, are warnings for untyped collections.  Since all of our model
>> elements are opaque Objects, we have lots of these.  I won't change a
>> List to a List<Object> because that's just silly when it's a
>> List<ModelElement> and I won't add an annotation to turn off the
>> warnings because I want to be able to find them if the API ever gets
>> fixed, so we've got lots of these polluting the source code.
>
> There are many many warnings of this kind.  In this instance, what is wrong
> with changing 'List' to 'List<ModelElement>'?

It won't compile.  To preserve the opaqueness of the interface, the
JMI, MDR, and even the OMG types (a la
org.omg.uml.foundation.core.ModelElement) aren't visible through the
API.  Everything's a lang.Object and nothing more.  That's why I used
the word "peculiar."

Arguably the API should have been designed differently, but that's
before my time and ancient history by now.  Using wrapper objects
might have been considered too heavyweight, but I bet something fancy
could have been done with reflection or byte code manipulation to
inject a org.argouml.uml.core.ModelElement interface and set of
wrapper methods.  This would have had all kinds of benefits including
better type  safety, a more friendly programming experience, etc, etc,
but it's probably not worth the effort at this point.  If you were
going to go to this amount of work, you'd want to clean up the API,
split the enormous implementation modules, take into account
portability to UML 2.x, and a bunch of other things that would just
make it a giant task.  The time to do it would have been when the API
facade was first put in place.

Tom

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to