LUCENE-9730: cleaned up temp. folder management in hunspell.

This commit is contained in:
Dawid Weiss 2021-02-04 09:26:47 +01:00
parent 04167b27f5
commit 894d0bbb59
1 changed files with 30 additions and 33 deletions

View File

@ -87,15 +87,22 @@ public class Dictionary {
FST<IntsRef> suffixes; FST<IntsRef> suffixes;
Breaks breaks = Breaks.DEFAULT; Breaks breaks = Breaks.DEFAULT;
// all condition checks used by prefixes and suffixes. these are typically re-used across /**
// many affix stripping rules. so these are deduplicated, to save RAM. * All condition checks used by prefixes and suffixes. these are typically re-used across many
* affix stripping rules. so these are deduplicated, to save RAM.
*/
ArrayList<CharacterRunAutomaton> patterns = new ArrayList<>(); ArrayList<CharacterRunAutomaton> patterns = new ArrayList<>();
// the entries in the .dic file, mapping to their set of flags. /**
// the fst output is the ordinal list for flagLookup * The entries in the .dic file, mapping to their set of flags. the fst output is the ordinal list
* for flagLookup.
*/
FST<IntsRef> words; FST<IntsRef> words;
// the list of unique flagsets (wordforms). theoretically huge, but practically
// small (e.g. for polish this is 756), otherwise humans wouldn't be able to deal with it either. /**
* The list of unique flagsets (wordforms). theoretically huge, but practically small (for Polish
* this is 756), otherwise humans wouldn't be able to deal with it either.
*/
BytesRefHash flagLookup = new BytesRefHash(); BytesRefHash flagLookup = new BytesRefHash();
// the list of unique strip affixes. // the list of unique strip affixes.
@ -126,8 +133,11 @@ public class Dictionary {
// st: morphological entries (either directly, or aliased from AM) // st: morphological entries (either directly, or aliased from AM)
private String[] stemExceptions = new String[8]; private String[] stemExceptions = new String[8];
private int stemExceptionCount = 0; private int stemExceptionCount = 0;
// we set this during sorting, so we know to add an extra FST output.
// when set, some words have exceptional stems, and the last entry is a pointer to stemExceptions /**
* we set this during sorting, so we know to add an extra FST output. when set, some words have
* exceptional stems, and the last entry is a pointer to stemExceptions
*/
boolean hasStemExceptions; boolean hasStemExceptions;
boolean ignoreCase; boolean ignoreCase;
@ -1481,34 +1491,21 @@ public class Dictionary {
return ignoreCase; return ignoreCase;
} }
private static Path DEFAULT_TEMP_DIR;
/** Used by test framework */
@SuppressWarnings("unused")
public static void setDefaultTempDir(Path tempDir) {
DEFAULT_TEMP_DIR = tempDir;
}
/** /**
* Returns the default temporary directory. By default, java.io.tmpdir. If not accessible or not * Returns the default temporary directory pointed to by {@code java.io.tmpdir}. If not accessible
* available, an IOException is thrown * or not available, an IOException is thrown.
*/ */
static synchronized Path getDefaultTempDir() throws IOException { static Path getDefaultTempDir() throws IOException {
if (DEFAULT_TEMP_DIR == null) { String tmpDir = System.getProperty("java.io.tmpdir");
// Lazy init if (tmpDir == null) {
String tempDirPath = System.getProperty("java.io.tmpdir"); throw new IOException("No temporary path (java.io.tmpdir)?");
if (tempDirPath == null) {
throw new IOException("Java has no temporary folder property (java.io.tmpdir)?");
} }
Path tempDirectory = Paths.get(tempDirPath); Path tmpPath = Paths.get(tmpDir);
if (!Files.isWritable(tempDirectory)) { if (!Files.isWritable(tmpPath)) {
throw new IOException( throw new IOException(
"Java's temporary folder not present or writeable?: " + tempDirectory.toAbsolutePath()); "Temporary path not present or writeable?: " + tmpPath.toAbsolutePath());
} }
DEFAULT_TEMP_DIR = tempDirectory; return tmpPath;
}
return DEFAULT_TEMP_DIR;
} }
/** Possible word breaks according to BREAK directives */ /** Possible word breaks according to BREAK directives */