public static ICirClass addClass(ICirData cirData, CommonIRDumpClassSymbols csClassSymbols) { ICirClass ccCirClass; if (cirData.dClasses_bySignature.ContainsKey(csClassSymbols.UniqueID)) // check if I need to check for new data (i.e. data that is not already in dClasses.ContainsKey(csClassSymbols.UniqueID) ccCirClass = cirData.dClasses_bySignature[csClassSymbols.UniqueID]; else { ccCirClass = new CirClass { Signature = csClassSymbols.UniqueID, SymbolDef = csClassSymbols.SymbolDef }; cirData.dClasses_bySignature.Add(ccCirClass.Signature, ccCirClass); addSymbol(cirData, ccCirClass.SymbolDef, ccCirClass.Signature); } // add SuperClasses if (ccCirClass.dSuperClasses.Count ==0) mapSuperClasses(cirData, csClassSymbols, ccCirClass); //if (ccCirClass.Name != "") // return ccCirClass; ccCirClass.IsAnonymous = csClassSymbols.Anonymous; ccCirClass.Name = csClassSymbols.Name; /*if (csClassSymbols.Superclasses != null) foreach (CommonIRDumpClassSymbolsSuperclass csSuperClass in csClassSymbols.Superclasses) ccNewCirClass.dSuperClasses.Add(csSuperClass.SymbolRef, csSuperClass.ClassType);*/ // add class fields if (csClassSymbols.ClassFields != null && ccCirClass.dField_Class.Count == 0) foreach (CommonIRDumpClassSymbolsClassField csClassField in csClassSymbols.ClassFields) { var fsFieldClass = new FieldClass { GuaranteedInitBeforeUsed = csClassField.GuaranteedInitBeforeUsed, Name = csClassField.Name, PrintableType = csClassField.PrintableType, SymbolRef = csClassField.SymbolRef, Signature = csClassField.UniqueID }; foreach (PropertyInfo pProperty in csClassField.GetType().GetProperties()) { if (pProperty.Name != "GuaranteedInitBeforeUsed" && pProperty.Name != "Name" && pProperty.Name != "PrintableType" && pProperty.Name != "SymbolRef" && pProperty.Name != "UniqueID") { object oPropertyObject = DI.reflection.getProperty(pProperty.Name, csClassField, false); if (oPropertyObject != null) { object oPropertyValue = DI.reflection.getProperty("Value", oPropertyObject, false); if (oPropertyValue != null) fsFieldClass.dFieldData.Add(pProperty.Name, oPropertyValue.ToString()); else fsFieldClass.dFieldData.Add(pProperty.Name, oPropertyObject.ToString()); } } } ccCirClass.dField_Class.Add(fsFieldClass.Signature, fsFieldClass); } // add member fields if (csClassSymbols.MemberFields != null && ccCirClass.dField_Member.Count == 0) foreach (CommonIRDumpClassSymbolsMemberField csMemberField in csClassSymbols.MemberFields) { var fsFieldMember = new FieldMember { Name = csMemberField.Name, PrintableType = csMemberField.PrintableType, SymbolRef = csMemberField.SymbolRef }; ccCirClass.dField_Member.Add(fsFieldMember.Name, fsFieldMember); addSymbol(cirData, fsFieldMember.SymbolRef, fsFieldMember.PrintableType); } return ccCirClass; }
public static void mapSuperClasses(ICirData cirData, CommonIRDumpClassSymbols csClassSymbols, ICirClass ccNewCirClass) { if (csClassSymbols.Superclasses != null) foreach (CommonIRDumpClassSymbolsSuperclass csSuperClass in csClassSymbols.Superclasses) { // add SuperClasses to current Class ccNewCirClass.dSuperClasses.Add(csSuperClass.SymbolRef, getClass(cirData,csSuperClass.SymbolRef, csSuperClass.ClassType)); // add XRef (i.e. add current class to the SuperClass d...) ICirClass ccCirClass = getClass(cirData,csSuperClass.SymbolRef, csSuperClass.ClassType); ccCirClass.dIsSuperClassedBy.Add(ccNewCirClass.SymbolDef, ccNewCirClass); } }
public static void mapClassesMetadata(ICirData cirData, CommonIRDumpClassSymbols[] acsClassSymbols) { if (acsClassSymbols != null) foreach (CommonIRDumpClassSymbols csClassSymbol in acsClassSymbols) { //addSymbol(cirData, csClassSymbol.SymbolDef, csClassSymbol.UniqueID); //dSymbols_Class.Add(csClassSymbol.SymbolDef, csClassSymbol); addClass(cirData,csClassSymbol); } }