package org.jetbrains.plugins.ruby.motion.bridgesupport;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.ruby.ruby.RubyUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author Dennis.Ushakov
*/
public class InheritanceInfoHolder {
private static final Logger LOG = Logger.getInstance(InheritanceInfoHolder.class);
private Map<String, Map<String, String>> myInheritanceInfo = new HashMap<>();
public static InheritanceInfoHolder getInstance() {
return ServiceManager.getService(InheritanceInfoHolder.class);
}
public InheritanceInfoHolder() {
final String path = RubyUtil.getScriptFullPath("rb/motion");
final File file = new File(path);
if (file.exists() && file.isDirectory()) {
for (File child : file.listFiles()) {
final String name = child.getName();
if (name.endsWith(".yaml") && name.startsWith("inheritance.")) {
try {
final FileInputStream is = new FileInputStream(child);
try {
final Map map = RubyUtil.loadYaml(is);
final Map<String, String> result = new HashMap<>();
for (Object key : map.keySet()) {
result.put(key.toString(), map.get(key).toString());
}
myInheritanceInfo.put(name.replaceAll("inheritance.", "").replaceAll(".yaml", ""), result);
} finally {
is.close();
}
} catch (IOException e) {
LOG.error(e);
}
}
}
}
}
@Nullable
public String getInheritance(final String className, final String frameworkVersion) {
final Map<String, String> info = myInheritanceInfo.get(frameworkVersion);
if (info == null) return null;
return info.get(className);
}
}