public IEnumerable<ProjectReference> Execute(AuditEntryParameters parameters)
 {
     var references = new List<ProjectReference>();
     AddUniqueReferences(GetImportedClassesReferences(parameters), references);
     AddUniqueReferences(GetImportedInterfacesReferences(parameters), references);
     yield break;
 }
 private IEnumerable<ProjectReference> GetAssemblyTypesReferences(
     AssemblyDefinition assemblyDefinition, AuditEntryParameters parameters)
 {
     var referencedAssemblyTypes = parameters.ProjectMetadata.TypesReferences.
         Select(typeReference => typeReference).
         Join(Helper.GetTypesDefinitions(assemblyDefinition.Modules),
              typeReference => typeReference.FullName.ToLower(),
              moduleTypeDefinition => moduleTypeDefinition.FullName.ToLower(),
              (typeReference, moduleTypeDefinition) => typeReference);
     foreach(var assemblyType in referencedAssemblyTypes)
     {
         if (!parameters.IsTypeChecked(assemblyType))
         {
             TypeDefinition assemblyBaseType = null;
             assemblyBaseType = assemblyType.BaseType != null ?
                 assemblyType.BaseType.Resolve()
                 : null;
             if (assemblyBaseType != null)
             {
                 var pr = parameters.FindProjectReference(assemblyBaseType.Scope);
                 if (pr != null)
                     yield return pr;
                 foreach(var projectReference in
                         m_classTypeHierarchyWorker.Execute(assemblyBaseType, parameters))
                     yield return projectReference;
                 foreach(var projectReference in
                         m_interfacesTypeWorker.Execute(assemblyBaseType, parameters))
                     yield return projectReference;
             }
         }
         foreach(var projectReference in m_memberReferencesWorker.Execute(assemblyType, parameters))
             yield return projectReference;
     }
 }
 public IEnumerable<ProjectReference> Execute(AuditEntryParameters parameters)
 {
     return
         (from reference in parameters.References
          join assemblyDefinition in parameters.ProjectMetadata.ManifestAssemblies
              on reference.FullName.ToLower() equals assemblyDefinition.FullName.ToLower()
          select reference).ToList();
 }
 public IEnumerable<ProjectReference> Execute(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     foreach(var memberReference in GetTypeMemberReferences(typeDefinition, parameters))
     {
         foreach(var projectReference in GetMemberReferences(memberReference, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetImportedClassesReferences(AuditEntryParameters parameters)
 {
     foreach (var typeDefinition in parameters.ProjectMetadata.ImportedTypesDefinitions)
     {
         var projectReference = m_importedTypeWorker.Execute(typeDefinition, parameters);
         if (projectReference != null)
             yield return projectReference;
     }
 }
 public IEnumerable<ProjectReference> Execute(AuditEntryParameters parameters)
 {
     var references = new List<ProjectReference>();
     foreach (var typeDefinition in parameters.ProjectMetadata.TypesDefinitions)
     {
         references.Union(GetAttributesReferences(typeDefinition, parameters));
     }
     return references;
 }
 private IEnumerable<ProjectReference> GetMemberReferences(
     MemberReference memberReference, AuditEntryParameters parameters)
 {
     if (memberReference is MethodReference)
     {
         var methodReferences = GetOverloadedMethods(
             memberReference.DeclaringType, (memberReference as MethodReference).Name);
         if (methodReferences.Count() > 1)
             return GetOverloadedMethodReferences(methodReferences, parameters);
     }
     return GetMemberParametersReferences(memberReference, parameters);
 }
 public IEnumerable<ProjectReference> Execute(AuditEntryParameters parameters)
 {
     var types =
         from type in parameters.ProjectMetadata.TypesDefinitions
         where type.BaseType != null &&
             type.BaseType.Scope.MetadataScopeType == MetadataScopeType.AssemblyNameReference
         select type;
     var worker = new ClassTypeHierarchyWorker();
     return
         (from type in types
            from reference in worker.Execute(type, parameters)
          select reference).Distinct().ToList();
 }
 public IEnumerable<ProjectReference> Execute(AuditEntryParameters parameters)
 {
     var references = new List<ProjectReference>();
     foreach(var assemblyDefinition in parameters.ProjectMetadata.ManifestAssemblies)
     {
         foreach(var reference in GetAssemblyTypesReferences(assemblyDefinition, parameters))
         {
             if (!references.Contains(reference))
                 references.Add(reference);
         }
     }
     return references;
 }
 private IEnumerable<ProjectReference> GetImportedInterfacesReferences(
     AuditEntryParameters parameters)
 {
     var typeReferences = parameters.ProjectMetadata.ImportedTypesDefinitions.
         SelectMany(item => item.GetInterfacesHierarchy());
     foreach(var typeReference in typeReferences)
     {
         var typeDefinition = typeReference.Resolve();
         if (typeDefinition != null)
         {
             var projectReference = m_importedTypeWorker.Execute(typeDefinition, parameters);
             if (projectReference != null)
                 yield return projectReference;
         }
     }
     yield break;
 }
 public ProjectReference Execute(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     foreach (ProjectReference projectReference in parameters.References)
     {
         var assemblyDefinition = ReadAssembly(projectReference);
         if (assemblyDefinition != null)
         {
             var existType = assemblyDefinition.Modules
                 .SelectMany(module => module.Types)
                 .Count(type => type.FullName.Equals(
                     typeDefinition.FullName, StringComparison.InvariantCultureIgnoreCase)) > 0;
             if (existType)
                 return projectReference;
         }
     }
     return null;
 }
 public IEnumerable<ProjectReference> Execute(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     var importedTypeWorker = new ImportedTypeWorker();
     foreach (var interfaceReference in typeDefinition.GetInterfacesHierarchy())
     {
         var interfaceDefinition = interfaceReference.Resolve();
         if (interfaceDefinition != null)
         {
             ProjectReference projectReference = interfaceDefinition.IsImport ?
                 importedTypeWorker.Execute(interfaceDefinition, parameters)
                 : parameters.FindProjectReference(interfaceDefinition);
             if (projectReference != null)
                 yield return projectReference;
             parameters.AddToCheckedTypes(interfaceDefinition);
         }
     }
 }
 private IEnumerable<ProjectReference> GetCustomAttributeArgumentReferences(
     CustomAttributeArgument customAttributeArgument, AuditEntryParameters parameters)
 {
     TypeDefinition typeDefinition = customAttributeArgument.Value is TypeReference
             ? (customAttributeArgument.Value as TypeReference).Resolve()
             : customAttributeArgument.Type.Resolve();
     if (typeDefinition != null && !parameters.IsTypeChecked(typeDefinition))
     {
         ProjectReference projectReference = parameters.FindProjectReference(typeDefinition.Scope);
         if (projectReference != null)
             yield return projectReference;
         foreach(var pr in
                 m_interfacesTypeWorker.Execute(typeDefinition, parameters))
             yield return pr;
         foreach(var pr in
                 m_classTypeHierarchyWorker.Execute(typeDefinition, parameters))
             yield return pr;
         parameters.AddToCheckedTypes(typeDefinition);
     }
 }
 private IEnumerable<ProjectReference> GetMemberParametersReferences(
     MemberReference memberReference, AuditEntryParameters parameters)
 {
     if (memberReference is MethodReference)
     {
         return GetMethodParametersReferences(memberReference as MethodReference, parameters);
     }
     if (memberReference is PropertyReference)
     {
         return GetPropertyParametersReferences(memberReference as PropertyReference, parameters);
     }
     if (memberReference is FieldReference)
     {
         return GetFieldTypeReferences(memberReference as FieldReference, parameters);
     }
     if (memberReference is EventReference)
     {
         return GetEventTypeReferences(memberReference as EventReference, parameters);
     }
     throw new NotImplementedException();
 }
 public IEnumerable<ProjectReference> Execute(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     if (typeDefinition == null)
         yield break;
     var baseTypeReference = typeDefinition.BaseType;
     if (baseTypeReference == null || parameters.IsTypeChecked(baseTypeReference))
     {
         parameters.AddToCheckedTypes(typeDefinition);
         yield break;
     }
     var baseTypeDefinition = baseTypeReference.Resolve();
     if (baseTypeDefinition != null)
     {
         var projectReference = parameters.FindProjectReference(baseTypeDefinition);
         if (projectReference != null)
             yield return projectReference;
     }
     foreach(var projectReference in Execute(baseTypeDefinition, parameters))
         yield return projectReference;
     parameters.AddToCheckedTypes(typeDefinition);
 }
 private IEnumerable<ProjectReference> GetAttributesReferences(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     var funcs =
         new List<Func<TypeDefinition, AuditEntryParameters, IEnumerable<ProjectReference>>>
     {
         GetTypeAttributesReferences,
         GetMethodsAttributesReferences,
         GetPropertiesAttributesReferences,
         GetFieldsAttributesReferences,
         GetEventsAttributesReferences
     };
     var projectReferences = new List<ProjectReference>();
     foreach (var func in funcs)
     {
         foreach(var projectReference in func(typeDefinition, parameters))
         {
             if (!projectReferences.Contains(projectReference))
                 projectReferences.Add(projectReference);
         }
     }
     return projectReferences;
 }
 private IEnumerable<MemberReference> GetTypeMemberReferences(
     TypeReference typeReference, AuditEntryParameters parameters)
 {
     return parameters.ProjectMetadata.MemberReferences.Where(
         memberReference => memberReference.DeclaringType.FullName.Equals(
             typeReference.Name, StringComparison.InvariantCultureIgnoreCase));
 }
 private IEnumerable<ProjectReference> GetPropertiesAttributesReferences(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     var properties = typeDefinition.Properties.Where(property => property.HasCustomAttributes);
     return GetMembersDefinitionAttributesReferences(properties, parameters);
 }
 private IEnumerable<ProjectReference> GetMethodParametersReferences(
     MethodReference methodReference, AuditEntryParameters parameters)
 {
     foreach(var projectReference in GetTypeReferences(methodReference.ReturnType, parameters))
         yield return projectReference;
     foreach (var paramDefinition in methodReference.Parameters)
     {
         foreach(var projectReference in
                 GetTypeReferences(paramDefinition.ParameterType, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetFieldTypeReferences(
     FieldReference fieldReference, AuditEntryParameters parameters)
 {
     foreach(var projectReference in GetTypeReferences(fieldReference.FieldType, parameters))
         yield return projectReference;
 }
 private IEnumerable<ProjectReference> GetTypeAttributesReferences(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     return GetMemberDefinitionAttributesReferences(typeDefinition, parameters);
 }
 private ProjectReference GetMarshalInfoReference(
     MarshalInfo marshalInfo, AuditEntryParameters parameters)
 {
     var customMarshalInfo = marshalInfo as CustomMarshalInfo;
     if (customMarshalInfo != null && customMarshalInfo.ManagedType != null)
     {
         var typeDefinition = customMarshalInfo.ManagedType.Resolve();
         if (typeDefinition != null)
         {
             parameters.AddToCheckedTypes(typeDefinition);
             return parameters.FindProjectReference(typeDefinition);
         }
     }
     return null;
 }
 private IEnumerable<ProjectReference> GetEventTypeReferences(
     EventReference eventReference, AuditEntryParameters parameters)
 {
     foreach(var projectReference in GetTypeReferences(eventReference.EventType, parameters))
         yield return projectReference;
 }
 private IEnumerable<ProjectReference> GetMethodsAttributesReferences(
     TypeDefinition typeDefinition, AuditEntryParameters parameters)
 {
     var methods =
         typeDefinition.Methods.Where(IsMethodContainsAttribute);
     foreach (var method in methods)
     {
         foreach(var projectReference in GetMemberDefinitionAttributesReferences(method, parameters))
             yield return projectReference;
         foreach(var projectReference in
                 GetMethodReturnAttributesReferences(method.MethodReturnType, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetMembersDefinitionAttributesReferences(
     IEnumerable<IMemberDefinition> membersDefinition, AuditEntryParameters parameters)
 {
     foreach (var member in membersDefinition)
     {
         foreach(var projectReference in GetMemberDefinitionAttributesReferences(member, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetPropertyParametersReferences(
     PropertyReference propertyReference, AuditEntryParameters parameters)
 {
     foreach(var projectReference in GetTypeReferences(propertyReference.PropertyType, parameters))
         yield return projectReference;
     foreach (var paramDefinition in propertyReference.Parameters)
     {
         foreach(var projectReference in
                 GetTypeReferences(paramDefinition.ParameterType, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetOverloadedMethodReferences(
     IEnumerable<MethodReference> methodReferences, AuditEntryParameters parameters)
 {
     foreach(var methodReference in methodReferences)
     {
         foreach(var projectReference in GetMethodParametersReferences(methodReference, parameters))
             yield return projectReference;
     }
 }
 private IEnumerable<ProjectReference> GetMemberDefinitionAttributesReferences(
     IMemberDefinition memberDefinition, AuditEntryParameters parameters)
 {
     return
         memberDefinition.CustomAttributes.SelectMany(ca => GetCustomAttributeReferences(ca, parameters));
 }
 private IEnumerable<ProjectReference> GetTypeReferences(
     TypeReference typeReference, AuditEntryParameters parameters)
 {
     if ((typeReference == null) || (parameters.IsTypeChecked(typeReference)))
         yield break;
     var typeDefinition = typeReference.Resolve();
     if (typeDefinition != null)
     {
         var pr = parameters.FindProjectReference(typeDefinition.Scope);
         if (pr != null)
             yield return pr;
         foreach(var projectReference in
                 m_interfacesTypeWorker.Execute(typeDefinition, parameters))
             yield return projectReference;
         foreach(var projectReference in
                 m_classTypeHierarchyWorker.Execute(typeDefinition, parameters))
             yield return projectReference;
     }
     else
     {
         var pr = parameters.FindProjectReference(typeReference.Scope);
         if (pr != null)
             yield return pr;
     }
     parameters.AddToCheckedTypes(typeReference);
 }
 private IEnumerable<ProjectReference> GetMethodReturnAttributesReferences(
     MethodReturnType methodReturnType, AuditEntryParameters parameters)
 {
     if (methodReturnType.HasCustomAttributes)
     {
         var references = methodReturnType.CustomAttributes.
                     SelectMany(ca => GetCustomAttributeReferences(ca, parameters));
         foreach(var projectReference in references)
             yield return projectReference;
     }
     if (methodReturnType.HasMarshalInfo)
     {
         var projectReference = GetMarshalInfoReference(methodReturnType.MarshalInfo, parameters);
         if (projectReference != null)
             yield return projectReference;
     }
     yield break;
 }