@Override public int hashCode() { return Objects.hash(extension, getNamePatterns()); } }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; FileType fileType = (FileType) o; if (!Objects.equals(this.extension, fileType.extension)) { return false; } else { return getNamePatterns().equals(fileType.getNamePatterns()); } }
private boolean doesFileNameMatchType(String nameToTest, FileType fileType) { return fileType .getNamePatterns() .stream() .anyMatch( namePattern -> { RegExp regExp = RegExp.compile(namePattern); return regExp.test(nameToTest); }); } }
@Override public FileType getFileTypeByExtension(String extension) { if (isNullOrEmpty(extension)) { return unknownFileType; } Set<FileType> typesByExtension = fileTypes.stream().filter(type -> extension.equals(type.getExtension())).collect(toSet()); if (typesByExtension.isEmpty()) { return unknownFileType; } String nameToTest = '.' + extension; Optional<FileType> fileType = typesByExtension .stream() .filter(type -> doesFileNameMatchType(nameToTest, type)) .findFirst(); if (fileType.isPresent()) { return fileType.get(); } fileType = typesByExtension.stream().filter(type -> type.getNamePatterns().isEmpty()).findFirst(); return fileType.orElseGet(() -> typesByExtension.iterator().next()); }
private boolean canBeMergedByNamePattern(String namePattern, FileType fileTypeCandidate) { String extensionCandidate = fileTypeCandidate.getExtension(); if (!isNullOrEmpty(extensionCandidate) && RegExp.compile(namePattern).test('.' + extensionCandidate)) { return true; } return fileTypeCandidate .getNamePatterns() .stream() .anyMatch( patternCandidate -> namePattern.equals(patternCandidate) || RegExp.quote(namePattern).equals(patternCandidate)); } }
private Set<FileType> getFileTypesByFile(VirtualFile file) { String name = file.getName(); if (isNullOrEmpty(name)) { return emptySet(); } Set<FileType> typesByNamePattern = fileTypeRegistry .getFileTypes() .stream() .filter( type -> type.getNamePatterns() .stream() .anyMatch(namePattern -> compile(namePattern).test(name))) .collect(toSet()); String fileExtension = getFileExtension(name); if (isNullOrEmpty(fileExtension)) { return typesByNamePattern; } Set<FileType> fileTypes = typesByNamePattern .stream() .filter(type -> fileExtension.equals(type.getExtension())) .collect(toSet()); fileTypes = fileTypes.isEmpty() ? typesByNamePattern : fileTypes; return fileTypes.isEmpty() ? singleton(fileTypeRegistry.getFileTypeByExtension(fileExtension)) : fileTypes; }