Ejemplo n.º 1
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);
                }
            }
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
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;
                    }
                }
            }
        }
Ejemplo n.º 4
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;
                    }
                }
            }
        }