/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.lang.psi.impl;
import com.intellij.openapi.vfs.VirtualFile;
import gw.lang.reflect.module.IModule;
import gw.plugin.ij.util.FileUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class GosuClassParseDataCache {
private static final ConcurrentHashMap<IModule, Map<String, GosuClassParseData>> _cache = new ConcurrentHashMap<>();
private static boolean isValid(@NotNull GosuClassParseData parseData) {
return _cache.containsKey(parseData.getModule());
}
@Nullable
public static GosuClassParseData getParseData(@Nullable GosuClassParseData parseData, VirtualFile virtualFile, IModule module) {
if (parseData == null || !isValid(parseData)) {
return createParseData(virtualFile, module);
} else {
return parseData;
}
}
private static GosuClassParseData createParseData(VirtualFile file, IModule module) {
Map<String, GosuClassParseData> moduleCache = _cache.get(module);
if (moduleCache == null) {
moduleCache = new ConcurrentHashMap<>();
_cache.put(module, moduleCache);
}
final String qualifiedName = FileUtil.getSourceQualifiedName(file, module);
GosuClassParseData data = moduleCache.get(qualifiedName);
if (data == null) {
data = new GosuClassParseData(module);
moduleCache.put(qualifiedName, data);
}
return data;
}
public static void clear() {
_cache.clear();
}
public static void clear(IModule module) {
_cache.remove(module);
}
}