Ejemplo n.º 1
0
 private void PopulateClassOrStructChildren(TypeDefinition objType, MemberItem parentItem)
 {
     PopulateNestedTypes(objType, parentItem);
     PopulateMethods(objType, parentItem);
     PopulateProperties(objType, parentItem);
     PopulateFields(objType, parentItem);
 }
Ejemplo n.º 2
0
        private void PopulateFromMem()
        {
            string[] memFiles;

            if (!DirectoryUtil.TryGetAllMemFiles(out memFiles))
            {
                Console.WriteLine("error getting source files");
                return;
            }

            foreach (var memFile in memFiles)
            {
                // Get member name
                var memberName = Path.GetFileNameWithoutExtension(memFile);
                if (memberName == null)
                {
                    Console.WriteLine("error: could not get file name from {0} ", memFile);
                    continue;
                }

                //HACK SPECIAL CASE
                if (SkipSpecialCaseMember(memberName))
                {
                    continue;
                }

                // Create or find MemberItem
                if (!m_MapNameToItem.ContainsKey(memberName))
                {
                    m_MapNameToItem[memberName] = new MemberItem(memberName, AssemblyType.Unknown);
                }
            }
        }
Ejemplo n.º 3
0
        private void PopulateMethods(TypeDefinition cecilType, MemberItem parentItem)
        {
            foreach (var method in cecilType.Methods)
            {
                if (!m_ScanForPrivateMembers && !method.IsPublic)
                {
                    continue;
                }

                if (method.IsGetter || method.IsSetter)
                {
                    continue;
                }

                AssemblyType asmType = AssemblyType.Method;

                var methodName = method.Name;
                if (method.IsConstructor)
                {
                    methodName = "constructor";
                    asmType    = AssemblyType.Constructor;
                }
                else if (methodName.StartsWith("op_Implicit"))
                {
                    methodName = method.ReturnType.ToString().SimplifyTypes();
                    asmType    = AssemblyType.ImplOperator;
                }
                else if (methodName.StartsWith("op_"))
                {
                    methodName = StringConvertUtils.ConvertOperatorFromAssembly(methodName).Substring(3);                     // Skip the op_ part
                    asmType    = AssemblyType.Operator;
                }

                string modifier = "";
                if (method.IsStatic)
                {
                    modifier = "static";
                }

                var asmEntry = new AsmEntry(methodName, asmType, modifier);
                foreach (var param in method.Parameters)
                {
                    string paramType      = param.ParameterType.ToString().SimplifyTypes();
                    bool   paramAttribute = IsParams(param);
                    string paramModifiers = paramAttribute? "params": "";
                    var    paramElement   = new ParamElement(param.Name, paramType, paramModifiers);
                    asmEntry.ParamList.Add(paramElement);
                }
                foreach (GenericParameter param in method.GenericParameters)
                {
                    string paramType = param.GetElementType().ToString().SimplifyTypes();
                    asmEntry.GenericParamList.Add(paramType);
                }
                asmEntry.ReturnType = method.ReturnType.ToString().SimplifyTypes();

                var signatureName = MemberNameGenerator.SignatureNameFromMethodDefinition(method);
                HandleMemberAndSignature(GetMemberName(method), signatureName, asmEntry, parentItem);
            }
        }
Ejemplo n.º 4
0
        private MemberItem HandleMemberAndSignature(string itemName, string signatureName, AsmEntry asmEntry, MemberItem parentItem)
        {
            asmEntry.Private = m_ScanForPrivateMembers;

            //HACK SPECIAL CASE
            if (SkipSpecialCaseMember(itemName))
            {
                return(null);
            }

            // Create member item if not already existing
            if (!m_MapNameToItem.ContainsKey(itemName))
            {
                if (!m_ScanForPrivateMembers)
                {
                    m_MapNameToItem[itemName] = new MemberItem(itemName, asmEntry.EntryType);
                }
                else
                {
                    return(null);
                }
            }
            else if (!m_ScanForPrivateMembers && !m_MapNameToItem[itemName].MultipleSignaturesPossible)
            {
                Console.WriteLine("Same member name found twice for {0} (multiple signatures should not be possible for this type)", itemName);
            }

            // Get member item
            MemberItem item = m_MapNameToItem[itemName];

            // Create signature
            if (!item.ContainsSignature(signatureName))
            {
                var sigEntry = new SignatureEntry(signatureName);
                sigEntry.AddFromAssembly(asmEntry);
                item.AddSignature(sigEntry);
            }
            else
            {
                if (!m_ScanForPrivateMembers)
                {
                    Console.WriteLine("We should not see the same signature entry twice!! for {0} : {1}.", itemName, signatureName);
                }
                else
                {
                    var sigEntry = item.GetSignature(signatureName, true);
                    if (!sigEntry.InAsm)
                    {
                        sigEntry.AddFromAssembly(asmEntry);
                    }
                }
            }
            if (item != null && parentItem != null && !parentItem.ChildMembers.Contains(item))
            {
                parentItem.ChildMembers.Add(item);
            }
            return(item);            //the item we just populated, may or may not be used
        }
Ejemplo n.º 5
0
        private void PopulateEnumChildren(TypeDefinition enumTypeDef, MemberItem parentItem)
        {
            foreach (var field in enumTypeDef.Fields)
            {
                if (field.Name == "value__")
                {
                    continue;
                }

                AsmEntry asm = new AsmEntry(field.Name, AssemblyType.EnumValue);
                HandleMemberAndSignature(GetMemberName(field), field.Name, asm, parentItem);
            }
        }
Ejemplo n.º 6
0
 private void PopulateNestedTypes(TypeDefinition cecilType, MemberItem parentItem)
 {
     foreach (var nested in cecilType.NestedTypes)
     {
         bool isDelegate = IsDelegate(nested);
         if (isDelegate)
         {
             //treat as a function, even though Cecil sees it as a class
             PopulateDelegate(nested);
         }
         else
         {
             PopulateFromTypeDefinition(nested);
         }
     }
 }
Ejemplo n.º 7
0
        private void PopulateProperties(TypeDefinition cecilType, MemberItem parentItem)
        {
            foreach (PropertyDefinition prop in cecilType.Properties)
            {
                if (!m_ScanForPrivateMembers && (prop.GetMethod != null && !prop.GetMethod.IsPublic))
                {
                    continue;
                }

                var      signatureName = MemberNameGenerator.SignatureNameFromPropertyDefinition(prop);
                AsmEntry asm           = new AsmEntry(signatureName, AssemblyType.Property)
                {
                    ReturnType = prop.PropertyType.ToString().SimplifyTypes()
                };
                HandleMemberAndSignature(GetMemberName(prop), signatureName, asm, parentItem);
            }
        }
Ejemplo n.º 8
0
        private void PopulateFields(TypeDefinition cecilType, MemberItem parentItem)
        {
            foreach (var field in cecilType.Fields)
            {
                bool documentIt = m_ScanForPrivateMembers || (field.Attributes & FieldAttributes.Public) > 0;
                if (!documentIt)
                {
                    continue;
                }

                AsmEntry asm = new AsmEntry(field.Name, AssemblyType.Field)
                {
                    ReturnType = field.FieldType.ToString().SimplifyTypes()
                };
                HandleMemberAndSignature(GetMemberName(field), field.Name, asm, parentItem);
            }
        }