package org.jetbrains.plugins.ruby.motion.bridgesupport;
import org.jetbrains.plugins.ruby.ruby.lang.psi.impl.RNameUtilCore;
import java.util.*;
/**
* @author Dennis.Ushakov
*/
public class Class extends FunctionHolder {
private String myName;
private Map<String, Class> mySubClasses;
public Class(final String name) {
myName = name;
mySubClasses = new HashMap<>();
}
public String getName() {
return myName;
}
public Collection<Class> getSubClasses() {
return mySubClasses.values();
}
public Class getSubClass(String name) {
return mySubClasses.get(name);
}
public static Map<String, Class> mergeClasses(Collection<Class> classes) {
final Map<String, Class> result = new HashMap<>();
for (Class clazz : classes) {
final String name = clazz.getName();
final int i = name.indexOf(RNameUtilCore.SYMBOL_DELIMITER);
if (i < 0) {
result.put(name, clazz);
continue;
}
final String containerName = name.substring(0, i);
Class container = result.get(containerName);
if (container == null) {
container = new Class(containerName);
result.put(containerName, container);
}
clazz.myName = name.substring(i + 2);
container.mySubClasses.put(clazz.getName(), clazz);
}
for (Class container : result.values()) {
container.mySubClasses = mergeClasses(container.mySubClasses.values());
}
return result;
}
}