@Override public void addWord(final String word) { // synchronizing is necessary as this is a write access Set<ISpellDictionary> copy; synchronized (fDictionaries) { copy = new HashSet<>(fDictionaries); } final String addable = word.toLowerCase(); for (final Iterator<ISpellDictionary> iterator = copy.iterator(); iterator.hasNext(); ) { ISpellDictionary dictionary = iterator.next(); if (dictionary.acceptsWords()) dictionary.addWord(addable); } }
@Override public boolean acceptsWords() { // synchronizing might not be needed here since acceptWords is // a read-only access and only called in the same thread as // the modifying methods add/checkWord (?) Set<ISpellDictionary> copy; synchronized (fDictionaries) { copy = new HashSet<>(fDictionaries); } ISpellDictionary dictionary = null; for (final Iterator<ISpellDictionary> iterator = copy.iterator(); iterator.hasNext(); ) { dictionary = iterator.next(); if (dictionary.acceptsWords()) return true; } return false; }