Problems:
FeatureNode doesn't seem to store the original word ??
i.e. plurals are made singular, and future/past are made infinitive. Thus
LinkableView.getWordString()
returns the infinitive form.
Reading this code, I get the impression that the original authors didn't know lisp.
There seems to be a fair amount of effort expended in re-invneting basic lisp
concepts, but with unusual naming conventions. For example, "FeatureNode"
seems to simply be a key-value pair or a frames-n-slots node. A cleaner idea
would have eliminated the need for forceFeatures() and
forceValues(), and the need to throw exceptions whenever
it is accessed incorrectly.
The design of FeatureNode is certainly not orthogonal; its mixing multiple
concepts in an inelegent way. I'm sort of disappointed, this should be
generic code, and not relex-specific.
Notable in thier absence: foreach functions -- there seems to be a lot
of use of iterators in the relex code, and iterators are know non-thread-safe.
As a general rule, foreach is a better programming paradigm!
Fixing 51 compile-time warnings. Almost all of these involve iterators,
which shouldn't be used anyway ...
Maybe I'm being too negative; clearly there's a lot of helper-class work
surrounding FeatureNode, which no generic class would ever have.
Still, its a shame that the helper classes are built on a flawed foundation.