FST Builder methods need fixing,documentation,or improved type safety
---------------------------------------------------------------------
Key: LUCENE-3695
URL: https://issues.apache.org/jira/browse/LUCENE-3695
Project: Lucene - Java
Issue Type: Bug
Reporter: Robert Muir
Its confusing the way an FST Builder has 4 add() methods, and you get assertion
errors (what happens if assertions are disabled?) if you use the wrong one:
For reference we have 3 FST input types:
* BYTE1 (byte)
* BYTE2 (char)
* BYTE4 (int)
For the builder add() method signatures we have:
* add(BytesRef)
* add(char[], int offset, int len)
* add(CharSequence)
* add(IntsRef)
But certain methods only work with certain FST input types, and these mappings
are not the ones you think.
For example, you would think that if you have a char-based FST you should use
add(char[]) or add(CharSequence), but this is not the case: those add methods
actually only work with int-based FST (they use codePointAt() to extract
codepoints). Instead, you have to use add(IntsRef) for the char-based one.
The worst is if you use the wrong one, you get an assertion error, but i'm not
sure what happens if assertions are disabled.
Maybe the ultimate solution is to parameterize FST's generics on input too
(FST<input,output>) and just require BytesRef/CharsRef/IntsRef as the
parameter? Then you could just have add(), and this might clean up FSTEnum too
(it would no longer need that InputOutput class but maybe could use
Map.Entry<input,output> or something?
I think the documentation is improving but i still notice add(BytesRef) has no
javadoc at all, and it only works with BYTE1, so I think we still have some
work to do even if we want to just pursue a documentation fix.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]