Esempio n. 1
0
        bool IsUsedInMethod(IField analyzedField, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
        {
            if (method.MetadataToken.IsNil)
            {
                return(false);
            }
            var module = method.ParentModule.PEFile;

            foreach (var part in mappingInfo.GetMethodParts((MethodDefinitionHandle)method.MetadataToken))
            {
                var md = module.Metadata.GetMethodDefinition(part);
                if (!md.HasBody())
                {
                    continue;
                }
                MethodBodyBlock body;
                try
                {
                    body = module.Reader.GetMethodBody(md.RelativeVirtualAddress);
                }
                catch (BadImageFormatException)
                {
                    return(false);
                }
                if (ScanMethodBody(analyzedField, method, body))
                {
                    return(true);
                }
            }
            return(false);
        }
Esempio n. 2
0
        /// <summary>
        ///  更新一条数据
        /// </summary>
        public static bool Update(CodeMappingInfo model)
        {
            try
            {
                int            rowsAffected = 0;
                SqlParameter[] parameters   =
                {
                    new SqlParameter("@id",        SqlDbType.Int,      4),
                    new SqlParameter("@pmodeCode", SqlDbType.VarChar, 20),
                    new SqlParameter("@suppId",    SqlDbType.Int,      4),
                    new SqlParameter("@suppCode",  SqlDbType.VarChar, 20)
                };
                parameters[0].Value = model.id;
                parameters[1].Value = model.pmodeCode;
                parameters[2].Value = model.suppId;
                parameters[3].Value = model.suppCode;

                rowsAffected = DataBase.ExecuteNonQuery(CommandType.StoredProcedure, "proc_codemapping_Update", parameters);
                if (rowsAffected > 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
                return(false);
            }
        }
Esempio n. 3
0
        /// <summary>
        ///  增加一条数据
        /// </summary>
        public static int Add(CodeMappingInfo model)
        {
            try
            {
                int            rowsAffected;
                SqlParameter[] parameters =
                {
                    new SqlParameter("@id",        SqlDbType.Int,      4),
                    new SqlParameter("@pmodeCode", SqlDbType.VarChar, 20),
                    new SqlParameter("@suppId",    SqlDbType.Int,      4),
                    new SqlParameter("@suppCode",  SqlDbType.VarChar, 20)
                };
                parameters[0].Direction = ParameterDirection.Output;
                parameters[1].Value     = model.pmodeCode;
                parameters[2].Value     = model.suppId;
                parameters[3].Value     = model.suppCode;

                rowsAffected = DataBase.ExecuteNonQuery(CommandType.StoredProcedure, "proc_codemapping_ADD", parameters);
                return((int)parameters[0].Value);
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
                return(0);
            }
        }
        bool IsUsedInMethod(ITypeDefinition analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
        {
            if (method.MetadataToken.IsNil)
            {
                return(false);
            }
            var module = method.ParentModule.PEFile;
            var md     = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken);

            if (!md.HasBody())
            {
                return(false);
            }
            return(ScanMethodBody(analyzedEntity, method, module.Reader.GetMethodBody(md.RelativeVirtualAddress)));
        }
Esempio n. 5
0
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public static CodeMappingInfo GetModel(int id)
        {
            try
            {
                SqlParameter[] parameters =
                {
                    new SqlParameter("@id", SqlDbType.Int, 4)
                };
                parameters[0].Value = id;

                CodeMappingInfo model = new CodeMappingInfo();
                DataSet         ds    = DataBase.ExecuteDataset(CommandType.StoredProcedure, "proc_codemapping_GetModel", parameters);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    if (ds.Tables[0].Rows[0]["id"].ToString() != "")
                    {
                        model.id = int.Parse(ds.Tables[0].Rows[0]["id"].ToString());
                    }
                    model.pmodeCode = ds.Tables[0].Rows[0]["pmodeCode"].ToString();
                    if (ds.Tables[0].Rows[0]["suppId"].ToString() != "")
                    {
                        model.suppId = int.Parse(ds.Tables[0].Rows[0]["suppId"].ToString());
                    }
                    model.suppCode = ds.Tables[0].Rows[0]["suppCode"].ToString();
                    return(model);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
                return(null);
            }
        }
        void CollectNamespaces(IEntity entity, MetadataModule module, CodeMappingInfo mappingInfo = null)
        {
            if (entity == null || entity.MetadataToken.IsNil)
            {
                return;
            }
            if (mappingInfo == null)
            {
                mappingInfo = CSharpDecompiler.GetCodeMappingInfo(entity.ParentModule.PEFile, entity.MetadataToken);
            }
            switch (entity)
            {
            case ITypeDefinition td:
                namespaces.Add(td.Namespace);
                HandleAttributes(td.GetAttributes());
                HandleTypeParameters(td.TypeParameters);

                foreach (var baseType in td.DirectBaseTypes)
                {
                    CollectNamespacesForTypeReference(baseType);
                }

                foreach (var nestedType in td.NestedTypes)
                {
                    CollectNamespaces(nestedType, module, mappingInfo);
                }

                foreach (var field in td.Fields)
                {
                    CollectNamespaces(field, module, mappingInfo);
                }

                foreach (var property in td.Properties)
                {
                    CollectNamespaces(property, module, mappingInfo);
                }

                foreach (var @event in td.Events)
                {
                    CollectNamespaces(@event, module, mappingInfo);
                }

                foreach (var method in td.Methods)
                {
                    CollectNamespaces(method, module, mappingInfo);
                }
                break;

            case IField field:
                HandleAttributes(field.GetAttributes());
                CollectNamespacesForTypeReference(field.ReturnType);
                break;

            case IMethod method:
                HandleAttributes(method.GetAttributes());
                HandleAttributes(method.GetReturnTypeAttributes());
                CollectNamespacesForTypeReference(method.ReturnType);
                foreach (var param in method.Parameters)
                {
                    HandleAttributes(param.GetAttributes());
                    CollectNamespacesForTypeReference(param.Type);
                }
                HandleTypeParameters(method.TypeParameters);
                var reader = module.PEFile.Reader;
                var parts  = mappingInfo.GetMethodParts((MethodDefinitionHandle)method.MetadataToken).ToList();
                foreach (var part in parts)
                {
                    HandleOverrides(part.GetMethodImplementations(module.metadata), module);
                    var methodDef = module.metadata.GetMethodDefinition(part);
                    if (method.HasBody)
                    {
                        MethodBodyBlock body;
                        try {
                            body = reader.GetMethodBody(methodDef.RelativeVirtualAddress);
                        } catch (BadImageFormatException) {
                            continue;
                        }
                        CollectNamespacesFromMethodBody(body, module);
                    }
                }
                break;

            case IProperty property:
                HandleAttributes(property.GetAttributes());
                CollectNamespaces(property.Getter, module, mappingInfo);
                CollectNamespaces(property.Setter, module, mappingInfo);
                break;

            case IEvent @event:
                HandleAttributes(@event.GetAttributes());
                CollectNamespaces(@event.AddAccessor, module, mappingInfo);
                CollectNamespaces(@event.RemoveAccessor, module, mappingInfo);
                break;
            }
        }
 bool IsUsedInMethod(ITypeDefinition analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
 {
     return(ScanMethodBody(analyzedEntity, method, context.GetMethodBody(method)));
 }