예제 #1
0
        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;
        }
예제 #2
0
 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);
         }
 }
예제 #3
0
 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);
         }
 }