Make the spell checker re-entrant.

Until the dictionary itself is re-entrant, unfortunately we have
to synchronize accesses to it.

Bug: 5156851
Change-Id: I1629a160d707e6fa1ad80cba828798abb24b68b1
This commit is contained in:
Jean Chalard 2011-08-16 13:58:37 +09:00
parent 8f7f406c5b
commit 70b9c5d991

View file

@ -126,7 +126,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
// Note : this must be reentrant // Note : this must be reentrant
/** /**
* Gets a list of suggestions for a specific string. This returns a list of possible * Gets a list of suggestions for a specific string. This returns a list of possible
* corrections for the text passed as an arguments. It may split or group words, and * corrections for the text passed as an argument. It may split or group words, and
* even perform grammatical analysis. * even perform grammatical analysis.
*/ */
@Override @Override
@ -153,9 +153,14 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
composer.add(character, proximities, composer.add(character, proximities,
WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE); WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE);
} }
dictionary.getWords(composer, suggestionsGatherer, mProximityInfo); final boolean isInDict;
final boolean isInDict = dictionary.isValidWord(text); final String[] suggestions;
final String[] suggestions = suggestionsGatherer.getGatheredSuggestions(); synchronized(dictionary) {
// TODO: make the dictionary reentrant so that we don't have to synchronize here
dictionary.getWords(composer, suggestionsGatherer, mProximityInfo);
isInDict = dictionary.isValidWord(text);
suggestions = suggestionsGatherer.getGatheredSuggestions();
}
final int flags = final int flags =
(isInDict ? SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY : 0) (isInDict ? SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY : 0)