<commit_before>package model.experiment.zeroCrossing;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * Фактори для создания юстировочного класса
 * 
 * @author Mikey
 *
 */
public class ZeroCrossingFactory {

	private static Map<File, ZeroCrossing> cache = new HashMap<>();

	/**
	 * Выдаёт файл юстировки. Если файл уже открывался, то берется файл из кэша,
	 * иначе считывается новый файл
	 * 
	 * @param file
	 *            файл с юстировкой
	 * @return новый объект класса юстировки или уже существующий объект из кэша
	 */
	public synchronized static ZeroCrossing forFile(File file) {
		if (file == null) {
			throw new NullPointerException();
		}
		if (cache != null) {
			synchronized (cache) {
				if (cache.containsKey(file) && cache.get(file) != null) {
					return cache.get(file);
				}
				cache.remove(file);
				if (!file.exists()) {
					return null;
				}
				try {
					System.out.println("Actually opening a file " + file);
					ZeroCrossing crossing = new ZeroCrossing(file);

					cache.put(file, crossing);

					return crossing;
				} catch (IllegalArgumentException e) {
					return null;
				}
			}
		}
		return null;
	}

}
<commit_msg>Изменение доступа к файлам юстировки.<commit_after>package model.experiment.zeroCrossing;

import static java.util.Collections.synchronizedMap;

import java.io.File;
import java.util.Hashtable;
import java.util.Map;

/**
 * Фактори для создания юстировочного класса
 * 
 * @author Mikey
 *
 */
public class ZeroCrossingFactory {

	private static Map<File, ZeroCrossing> cache = synchronizedMap(
			new Hashtable<>());

	/**
	 * Выдаёт файл юстировки. Если файл уже открывался, то берется файл из кэша,
	 * иначе считывается новый файл
	 * 
	 * @param file
	 *            файл с юстировкой
	 * @return новый объект класса юстировки или уже существующий объект из кэша
	 */
	public static ZeroCrossing forFile(File file) {
		if (file == null) throw new NullPointerException();
		if (cache == null) return null;

		return cache.computeIfAbsent(file, ZeroCrossing::new);
	}

}

{'fraction_non_alphanumeric': 0.099488609948861, 'fraction_numerical': 0.0, 'mean_word_length': 2.842857142857143, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '934603', 'n_tokens_mistral': 832, 'n_tokens_neox': 784, 'n_words': 190}