package org.jetbrains.plugins.ruby.motion.bridgesupport; import org.jetbrains.annotations.TestOnly; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.fqn.FQN; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Dennis.Ushakov */ public class Framework extends FunctionHolder { private final Map<String, Struct> myStructs = new HashMap<>(); private Map<String, Class> myClasses = new HashMap<>(); private final Map<String, Class> myProtocols = new HashMap<>(); private final Map<String, Constant> myConstants = new HashMap<>(); private final Map<String, String> myFunctionAliases = new HashMap<>(); private final String myName; private final String myVersion; private final boolean myOSX; public Framework(String name, String version, boolean osx) { myName = name; myVersion = version; myOSX = osx; } public Collection<Class> getClasses() { return myClasses.values(); } void addClass(Class clazz) { checkSeal(); myClasses.put(clazz.getName(), clazz); } @TestOnly public Class getClass(final String name) { return getClass(FQN.Builder.fromString(name).asList()); } public Class getClass(final List<String> name) { if (name.size() == 0) return null; Class current = myClasses.get(name.get(0)); int i = 1; while (i < name.size() && current != null) { current = current.getSubClass(name.get(i)); i++; } return current; } public Collection<Struct> getStructs() { return myStructs.values(); } void addStruct(Struct clazz) { checkSeal(); myStructs.put(clazz.getName(), clazz); } public Struct getStruct(final String name) { return myStructs.get(name); } public Collection<Class> getProtocols() { return myProtocols.values(); } void addProtocol(Class clazz) { checkSeal(); myProtocols.put(clazz.getName(), clazz); } public Class getProtocol(final String name) { return myProtocols.get(name); } public Collection<Constant> getConstants() { return myConstants.values(); } void addConstant(Constant constant) { checkSeal(); myConstants.put(constant.getName(), constant); } public Constant getConstant(final String name) { return myConstants.get(name); } public String getName() { return myName; } public String getVersion() { return myVersion; } public boolean isOSX() { return myOSX; } @Override public String toString() { return "Framework: " + myName + ", v." + myVersion; } public void addFunctionAlias(String name, String original) { checkSeal(); myFunctionAliases.put(name, original); } public Map<String, String> getFunctionAliases() { return myFunctionAliases; } public String getOriginalFunctionName(String name) { return myFunctionAliases.get(name); } void mergeClasses() { if (!"android".equals(myName)) return; checkSeal(); myClasses = Class.mergeClasses(myClasses.values()); } }