コード例 #1
0
 /// <summary>
 /// Execute checking up.
 /// </summary>
 public IEnumerable <ProjectReference> Execute(IProjectEvaluator evaluator)
 {
     using (var checker = ProjectCheckerType.Create(evaluator))
     {
         return(checker.Check());
     }
 }
コード例 #2
0
        /// <summary>
        /// Check imported interfaces.
        /// </summary>
        /// <param name="checkerData">Used types and assemblies candidates.</param>
        /// <param name="evaluator">The project evaluator.</param>
        private void CheckImportedInterfaces(CheckerSharedData checkerData, IProjectEvaluator evaluator)
        {
            IEnumerable <TypeReference> typeReferences = evaluator.ProjectImportedTypesDefinitions
                                                         .SelectMany(item => item.GetInterfaces());

            IMetadataScope forwardedFrom;

            foreach (TypeReference typeRef in typeReferences)
            {
                try
                {
                    TypeDefinition typeDef = typeRef.Resolve(out forwardedFrom);
                    checkerData.RemoveFromCandidates(forwardedFrom);
                    if (typeDef != null)
                    {
                        _helper.Check(typeDef, checkerData);
                    }

                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }
                }
                catch (Exception ex)
                {
                    throw Error.CheckType(typeRef.AssemblyQualifiedName(),
                                          string.Format(Resources.CleanExecutor_CheckInteropTypeException, typeRef.AssemblyQualifiedName()), ex);
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// Dispose object.
 /// </summary>
 protected virtual void Dispose(bool disposing)
 {
     if (disposing && _evaluator != null)
     {
         _evaluator = null;
     }
 }
コード例 #4
0
 /// <summary>
 /// Performs checking of attributes of types of assembly.
 /// </summary>
 /// <param name="sharedData">Used types and assemblies candidates.</param>
 /// <param name="evaluator">The project evaluator.</param>
 public void Check(CheckerSharedData sharedData, IProjectEvaluator evaluator)
 {
     foreach (TypeDefinition type in evaluator.ProjectTypesDefinitions)
     {
         _helper.Check(type, sharedData);
         if (!sharedData.HasCandidateReferences)
         {
             return;
         }
     }
 }
コード例 #5
0
        /// <summary>
        /// Performs assembly's types checking.
        /// </summary>
        /// <param name="sharedData">Used types and assemblies candidates.</param>
        /// <param name="evaluator">The project evaluator.</param>
        public void Check(CheckerSharedData sharedData, IProjectEvaluator evaluator)
        {
            var query = (from reference in sharedData.CandidateReferences
                         join assemblyRef in evaluator.ManifestAssemblies
                         on reference.FullName.ToUpper() equals assemblyRef.FullName.ToUpper()
                         select reference).ToList();

            foreach (var reference in query)
            {
                sharedData.RemoveFromCandidates(reference);
            }
        }
コード例 #6
0
 /// <summary>
 /// Performs assembly's types checking.
 /// </summary>
 /// <param name="sharedData">Used types and assemblies candidates.</param>
 /// <param name="evaluator">The project evaluator.</param>
 public void Check(CheckerSharedData sharedData, IProjectEvaluator evaluator)
 {
     try
     {
         var reader = new ResourcesReader(evaluator);
         CheckXamlDeclaredTypes(sharedData, evaluator, reader.GetXamlDeclaredTypes());
     }
     catch (Exception ex)
     {
         throw Error.CheckType(evaluator.ProjectAssembly.FullName,
                               Resources.BamlTypesChecker_CheckTypeException, ex);
     }
 }
コード例 #7
0
 /// <summary>
 /// Check imported classes.
 /// </summary>
 /// <param name="checkerData">Used types and assemblies candidates.</param>
 /// <param name="evaluator">The project evaluator.</param>
 private void CheckImportedClasses(CheckerSharedData checkerData, IProjectEvaluator evaluator)
 {
     foreach (TypeDefinition typeDef in evaluator.ProjectImportedTypesDefinitions)
     {
         try
         {
             _helper.Check(typeDef, checkerData);
         }
         catch (Exception ex)
         {
             throw Error.CheckType(typeDef.AssemblyQualifiedName(),
                                   string.Format(Resources.CleanExecutor_CheckInteropTypeException, typeDef.AssemblyQualifiedName()), ex);
         }
     }
 }
コード例 #8
0
 /// <summary>
 /// Performs dependent assemblies checking.
 /// </summary>
 /// <param name="sharedData">Used types and assemblies candidates.</param>
 /// <param name="evaluator">The project evaluator.</param>
 public void Check(CheckerSharedData sharedData, IProjectEvaluator evaluator)
 {
     foreach (AssemblyDefinition manifestAssemblyDefinition in evaluator.ManifestAssemblies)
     {
         try
         {
             CheckAssemblyTypes(manifestAssemblyDefinition, sharedData, evaluator);
             if (!sharedData.HasCandidateReferences)
             {
                 break;
             }
         }
         catch (Exception ex)
         {
             ex.Data.Add("AssemblyDefinition", manifestAssemblyDefinition.FullName);
             throw;
         }
     }
 }
コード例 #9
0
        /// <summary>
        /// Checking assembly's types which are used in BAML.
        /// </summary>
        /// <param name="sharedData">Used types and assemblies candidates.</param>
        /// <param name="evaluator">The project evaluator.</param>
        /// <param name="declaredTypes">Declared in BAML types.</param>
        private void CheckXamlDeclaredTypes(CheckerSharedData sharedData, IProjectEvaluator evaluator, IEnumerable <XamlTypeDeclaration> declaredTypes)
        {
            var xamlTypeResolver = new XamlTypeResolver(evaluator);

            foreach (var type in declaredTypes)
            {
                var typeDef = xamlTypeResolver.Resolve(type);
                if (typeDef != null && !sharedData.IsUsedTypeExists(typeDef.AssemblyQualifiedName()))
                {
                    _classChecher.Check(typeDef, sharedData);
                    _interfaceChecker.Check(typeDef, sharedData);
                    sharedData.RemoveFromCandidates(typeDef.Scope);

                    if (!sharedData.HasCandidateReferences)
                    {
                        return;
                    }
                }
            }
        }
コード例 #10
0
        /// <summary>
        /// Create a new instance of a project checker class.
        /// </summary>
        /// <param name="evaluator">The project evaluator.</param>
        /// <returns>Returns created project checker.</returns>
        public static ProjectChecker Create(IProjectEvaluator evaluator)
        {
            switch (evaluator.ProjectInfo.Type.ToString("D"))
            {
            case CSharpProjectChecker.ProjectTypeString:
                return(new CSharpProjectChecker(evaluator));

            case VisualBasicProjectChecker.ProjectTypeString:
                return(new VisualBasicProjectChecker(evaluator));

            case VisualCppCliProjectChecker.ProjectTypeString:
                return(new VisualCppCliProjectChecker(evaluator));

            case FSharpProjectChecker.ProjectTypeString:
                return(new FSharpProjectChecker(evaluator));

            default:
                return(new DefaultProjectChecker(evaluator));
            }
        }
コード例 #11
0
        /// <summary>
        /// Performs checking of referenced members of the specified type.
        /// </summary>
        /// <param name="type">The specified type.</param>
        /// <param name="sharedData">Used types and assemblies candidates.</param>
        /// <param name="evaluator">The project evaluator.</param>
        public void Check(TypeReference typeRef, CheckerSharedData sharedData, IProjectEvaluator evaluator)
        {
            try
            {
                foreach (MemberReference memberRef in GetMemberReferences(typeRef, evaluator))
                {
                    EvaluateMemberReference(memberRef, sharedData);

                    if (!sharedData.HasCandidateReferences)
                    {
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                throw Error.CheckType(typeRef.AssemblyQualifiedName(),
                                      string.Format(Resources.MemberReferencesCheckHelper_CheckTypeException, typeRef.AssemblyQualifiedName()), ex);
            }
        }
コード例 #12
0
        /// <summary>
        /// Performs assembly's types checking.
        /// </summary>
        /// <param name="sharedData">Used types and assemblies candidates.</param>
        /// <param name="evaluator">The project evaluator.</param>
        public void Check(CheckerSharedData sharedData, IProjectEvaluator evaluator)
        {
            if (sharedData == null)
            {
                throw Error.ArgumentNull("sharedData");
            }

            if (evaluator == null)
            {
                throw Error.ArgumentNull("evaluator");
            }

            _assemblyDefinitions.Clear();

            CheckImportedClasses(sharedData, evaluator);

            if (sharedData.HasCandidateReferences)
            {
                CheckImportedInterfaces(sharedData, evaluator);
            }
        }
コード例 #13
0
        /// <summary>
        /// Inspect references.
        /// </summary>
        /// <param name="evaluator">The project evaluator.</param>
        /// <returns>Not used project references.</returns>
        public IProjectInspectResult Inspect(IProjectEvaluator evaluator)
        {
            try
            {
                AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

                var checkExecutor = (CheckExecutor)_executorDomain.CreateInstanceFromAndUnwrap(
                    Assembly.GetExecutingAssembly().Location,
                    CheckExecutorTypeName,
                    true,
                    BindingFlags.CreateInstance,
                    null,
                    null,
                    null,
                    null);

                return(new ProjectInspectResult(evaluator.ProjectInfo, checkExecutor.Execute(evaluator)));
            }
            finally
            {
                AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
            }
        }
コード例 #14
0
 /// <summary>
 /// Initialize a new instance of a <see cref="CSharpProjectChecker"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 public CSharpProjectChecker(IProjectEvaluator evaluator)
     : base(evaluator)
 {
 }
コード例 #15
0
 /// <summary>
 /// Initialize a new instance of a <see cref="VisualCppCliProjectChecker"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 public VisualCppCliProjectChecker(IProjectEvaluator evaluator)
     : base(evaluator)
 {
 }
コード例 #16
0
        /// <summary>
        /// Check assembly types.
        /// </summary>
        /// <param name="assemblyDefinition">The assembly.</param>
        private void CheckAssemblyTypes(AssemblyDefinition assemblyDefinition, CheckerSharedData checkerData, IProjectEvaluator evaluator)
        {
            var referencedAssemblyTypes = evaluator.ProjectTypesReferences
                                          .Select(projectTypeRef => projectTypeRef)
                                          .Join(assemblyDefinition.Modules.GetTypesDefinitions().Where(moduleType => moduleType.BaseType != null),
                                                projectTypeRef => projectTypeRef.FullName.ToLower(),
                                                moduleType => moduleType.FullName.ToLower(),
                                                (projectTypeRef, moduleType) => projectTypeRef);

            foreach (TypeDefinition referencedType in referencedAssemblyTypes)
            {
                if (checkerData.UsedTypes.Contains(referencedType.AssemblyQualifiedName()))
                {
                    _memberRefsCheckHelper.Check(referencedType, checkerData, evaluator);
                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }
                }
                else
                {
                    checkerData.RemoveFromCandidates(referencedType.Scope);
                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }

                    _classCheckHeper.Check(referencedType, checkerData);
                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }

                    _interfaceCheckHelper.Check(referencedType, checkerData);
                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }

                    _memberRefsCheckHelper.Check(referencedType, checkerData, evaluator);
                    if (!checkerData.HasCandidateReferences)
                    {
                        break;
                    }
                }
            }
        }
コード例 #17
0
 /// <summary>
 /// Initialize a new instance of a <see cref="ProjectChecker"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 protected ProjectChecker(IProjectEvaluator evaluator)
 {
     _evaluator = evaluator;
 }
コード例 #18
0
 /// <summary>
 /// Initialize a new instance of a <see cref="DefaultProjectChecker"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 public DefaultProjectChecker(IProjectEvaluator evaluator)
     : base(evaluator)
 {
 }
コード例 #19
0
        /// <summary>
        /// Get list of referenced members of the specified type.
        /// </summary>
        /// <param name="typeRef">The type reference.</param>
        /// <param name="evaluator">The project evaluator.</param>
        /// <returns>Returns list of members references.</returns>
        private IEnumerable <MemberReference> GetMemberReferences(TypeReference typeRef, IProjectEvaluator evaluator)
        {
            var typeName = typeRef.FullName;

            return(evaluator.MemberReferences
                   .Where(item => item.DeclaringType.FullName.Equals(typeName, StringComparison.OrdinalIgnoreCase)));
        }
コード例 #20
0
 public ResourcesReader(IProjectEvaluator evaluator)
 {
     _evaluator = evaluator;
 }
コード例 #21
0
 /// <summary>
 /// Initialize a new instance of a <see cref="VisualBasicProjectChecker"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 public VisualBasicProjectChecker(IProjectEvaluator evaluator)
     : base(evaluator)
 {
 }
コード例 #22
0
 /// <summary>
 /// Initialize a new instance of the <see cref="XamlTypeResolver"/> class.
 /// </summary>
 /// <param name="evaluator">The project evaluator.</param>
 public XamlTypeResolver(IProjectEvaluator evaluator)
 {
     _evaluator = evaluator;
     _cache     = new ProjectReferenceCache(_evaluator);
 }
コード例 #23
0
 public ProjectReferenceCache(IProjectEvaluator evaluator)
 {
     _evaluator = evaluator;
 }