// 获取元素集合 private Dictionary <string, ABnfElement> GetElementMap(ALittleScriptUtility.ClassAttrType attr_type, ALittleScriptUtility.ClassAccessType access_type) { if (!m_element_map.TryGetValue(access_type, out Dictionary <ALittleScriptUtility.ClassAttrType, Dictionary <string, ABnfElement> > map)) { return(null); } if (!map.TryGetValue(attr_type, out Dictionary <string, ABnfElement> sub_map)) { return(null); } return(sub_map); }
// 添加新元素 public void AddClassChildDec(ABnfElement dec) { // 模板定义特殊处理 if (dec is ALittleScriptTemplateDecElement) { var template_dec = dec as ALittleScriptTemplateDecElement; var pair_dec_list = template_dec.GetTemplatePairDecList(); foreach (var pair_dec in pair_dec_list) { AddClassChildDec(pair_dec); } return; } ALittleScriptUtility.ClassAccessType access_type = ALittleScriptUtility.ClassAccessType.PRIVATE; ALittleScriptUtility.ClassAttrType attr_type; string name; // 处理模板参数 if (dec is ALittleScriptTemplatePairDecElement) { var pair_dec = dec as ALittleScriptTemplatePairDecElement; name = pair_dec.GetTemplateNameDec().GetElementText(); access_type = ALittleScriptUtility.ClassAccessType.PUBLIC; attr_type = ALittleScriptUtility.ClassAttrType.TEMPLATE; } else if (dec is ALittleScriptClassElementDecElement) { var element_dec = dec as ALittleScriptClassElementDecElement; access_type = ALittleScriptUtility.CalcAccessType(element_dec.GetModifierList()); // 处理成员变量 if (element_dec.GetClassVarDec() != null) { var var_dec = element_dec.GetClassVarDec(); var name_dec = var_dec.GetClassVarNameDec(); if (name_dec == null) { return; } name = name_dec.GetElementText(); attr_type = ALittleScriptUtility.ClassAttrType.VAR; dec = element_dec.GetClassVarDec(); } // 处理成员函数 else if (element_dec.GetClassMethodDec() != null) { var method_dec = element_dec.GetClassMethodDec(); var name_dec = method_dec.GetMethodNameDec(); if (name_dec == null) { return; } dec = name_dec; name = name_dec.GetElementText(); attr_type = ALittleScriptUtility.ClassAttrType.FUN; } // 处理getter函数 else if (element_dec.GetClassGetterDec() != null) { var method_dec = element_dec.GetClassGetterDec(); var name_dec = method_dec.GetMethodNameDec(); if (name_dec == null) { return; } dec = name_dec; name = name_dec.GetElementText(); attr_type = ALittleScriptUtility.ClassAttrType.GETTER; } // 处理setter函数 else if (element_dec.GetClassSetterDec() != null) { var method_dec = element_dec.GetClassSetterDec(); var name_dec = method_dec.GetMethodNameDec(); if (name_dec == null) { return; } dec = name_dec; name = name_dec.GetElementText(); attr_type = ALittleScriptUtility.ClassAttrType.SETTER; } // 处理静态函数 else if (element_dec.GetClassStaticDec() != null) { var method_dec = element_dec.GetClassStaticDec(); var name_dec = method_dec.GetMethodNameDec(); if (name_dec == null) { return; } dec = name_dec; name = name_dec.GetElementText(); attr_type = ALittleScriptUtility.ClassAttrType.STATIC; } else { return; } } else { return; } if (!m_element_map.TryGetValue(access_type, out Dictionary <ALittleScriptUtility.ClassAttrType, Dictionary <string, ABnfElement> > map)) { map = new Dictionary <ALittleScriptUtility.ClassAttrType, Dictionary <string, ABnfElement> >(); m_element_map.Add(access_type, map); } if (!map.TryGetValue(attr_type, out Dictionary <string, ABnfElement> sub_map)) { sub_map = new Dictionary <string, ABnfElement>(); map.Add(attr_type, sub_map); } if (!sub_map.ContainsKey(name)) { sub_map.Add(name, dec); } }