{"record":{"id":"c259f6d5d9bba85c","repo":"nostra13/Android-Universal-Image-Loader","slug":"filenamegenerator-argument-must-be-not-null","errorCode":null,"errorMessage":"fileNameGenerator argument must be not null","messagePattern":"fileNameGenerator argument must be not null","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/nostra13/universalimageloader/cache/disc/impl/BaseDiskCache.java","lineNumber":83,"sourceCode":"\t * @param cacheDir        Directory for file caching\n\t * @param reserveCacheDir null-ok; Reserve directory for file caching. It's used when the primary directory isn't available.\n\t */\n\tpublic BaseDiskCache(File cacheDir, File reserveCacheDir) {\n\t\tthis(cacheDir, reserveCacheDir, DefaultConfigurationFactory.createFileNameGenerator());\n\t}\n\n\t/**\n\t * @param cacheDir          Directory for file caching\n\t * @param reserveCacheDir   null-ok; Reserve directory for file caching. It's used when the primary directory isn't available.\n\t * @param fileNameGenerator {@linkplain com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator\n\t *                          Name generator} for cached files\n\t */\n\tpublic BaseDiskCache(File cacheDir, File reserveCacheDir, FileNameGenerator fileNameGenerator) {\n\t\tif (cacheDir == null) {\n\t\t\tthrow new IllegalArgumentException(\"cacheDir\" + ERROR_ARG_NULL);\n\t\t}\n\t\tif (fileNameGenerator == null) {\n\t\t\tthrow new IllegalArgumentException(\"fileNameGenerator\" + ERROR_ARG_NULL);\n\t\t}\n\n\t\tthis.cacheDir = cacheDir;\n\t\tthis.reserveCacheDir = reserveCacheDir;\n\t\tthis.fileNameGenerator = fileNameGenerator;\n\t}\n\n\t@Override\n\tpublic File getDirectory() {\n\t\treturn cacheDir;\n\t}\n\n\t@Override\n\tpublic File get(String imageUri) {\n\t\treturn getFile(imageUri);\n\t}\n\n\t@Override","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/nostra13/Android-Universal-Image-Loader/blob/ba33ec64d0daaa881d35852460e78c58d086bc18/library/src/main/java/com/nostra13/universalimageloader/cache/disc/impl/BaseDiskCache.java#L65-L101","documentation":"BaseDiskCache's constructor throws IllegalArgumentException when fileNameGenerator is null. The generator converts URLs into cache file names, so every read/write on the disk cache depends on it; it cannot be defaulted safely at this layer. The check is fail-fast at construction time.","triggerScenarios":"Calling new BaseDiskCache(cacheDir, reserve, null) directly, or a subclass constructor that forwards a null generator. The one- and two-arg convenience constructors avoid it by defaulting to DefaultConfigurationFactory.createFileNameGenerator().","commonSituations":"Custom DiskCache implementations that thread a generator through several layers and forget to initialize it; refactors that removed the generator parameter but left a null passthrough; DI setups where the FileNameGenerator binding is missing.","solutions":["Pass a real generator: new HashCodeFileNameGenerator() (or HashCodeFileNameGenerator via DefaultConfigurationFactory.createFileNameGenerator()).","If you don't need custom naming, use the shorter constructors BaseDiskCache(cacheDir) or BaseDiskCache(cacheDir, reserveCacheDir) which apply the default generator.","Check custom subclasses: ensure no constructor path forwards null."],"exampleFix":"// before\nnew BaseDiskCache(cacheDir, reserveCacheDir, null);\n\n// after\nnew BaseDiskCache(cacheDir, reserveCacheDir, new HashCodeFileNameGenerator());","handlingStrategy":"validation","validationCode":"FileNameGenerator gen = (generator != null) ? generator : new HashCodeFileNameGenerator();\nnew BaseDiskCache(cacheDir, reserveCacheDir, gen);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Prefer the short constructors BaseDiskCache(cacheDir[, reserve]) which install a default generator.","Add Objects.requireNonNull(fileNameGenerator, 'fileNameGenerator') at your own construction wrapper so failures point at your call site.","Keep DI bindings for FileNameGenerator explicit and required, not optional."],"tags":["disk-cache","validation","constructor","null-check","file-naming"],"backgroundTag":null,"analyzedSha":"ba33ec64d0daaa881d35852460e78c58d086bc18","analyzedAt":"2026-08-14T15:41:15.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}