Esempio n. 1
0
        public DependencyResolutionResult TryResolveDependencies(IPackageDescriptor packageDescriptor, IEnumerable<IPackageRepository> repositoriesToQuery)
        {
            var packageSelection = new PackageSelectionContext();

                Debug.WriteLine("Resolving descriptor " + packageDescriptor.Dependencies.Select(x => x.ToString()).Join(", "));
            for (int i = 0; i < MAX_RETRIES; i++)
            {
                var exclusionList = packageSelection.IncompatiblePackageVersions.Select(x => x.Key);

                var visitor = new DependencyVisitor(repositoriesToQuery, packageSelection, packageDescriptor.Dependencies, packageDescriptor.Overrides);
                var resolutionSucceeded = visitor.VisitDependencies(packageDescriptor.Dependencies);

                if (resolutionSucceeded == false)
                {
                    var newExclusionList = packageSelection.IncompatiblePackageVersions.Select(x => x.Key);
                    if (newExclusionList.Except(exclusionList).Any())
                    {
                        packageSelection = new PackageSelectionContext(packageSelection.IncompatiblePackageVersions);

                        continue;
                    }
                }
                return Result(packageDescriptor, packageSelection, repositoriesToQuery, visitor.NotFound);
            }
            throw new InvalidOperationException(string.Format("OpenWrap tried {0} times to resolve the tree of dependencies and gave up.", MAX_RETRIES));
        }
Esempio n. 2
0
        public void Max2()
        {
            Expression <Func <Entity, int?> > c = e => e.Range.Max();

            var v = new DependencyVisitor();

            v.Visit(c);
        }
Esempio n. 3
0
        public void Sum()
        {
            Expression <Func <Entity, int> > c = e => e.Collection
                                                 .Where(o => o.Name != "mmm" && o.Number2 < 5)
                                                 .Where(x => x.Number3 < 5)
                                                 .Sum(en => en.Number) + 5;

            var v = new DependencyVisitor();

            v.Visit(c);
        }
Esempio n. 4
0
        public void Min()
        {
            Expression <Func <Entity, int?> > c = e => e.Collection
                                                  .Where(o => o.Name != "mmm" && o.Number2 < 5)
                                                  .Where((o, i) => i < 4)
                                                  .Min(m => m.NullableNumber);

            var v = new DependencyVisitor();

            v.Visit(c);
        }
Esempio n. 5
0
        public void SelectMax()
        {
            Expression <Func <Entity, int> > c = e => e.Collection
                                                 .Where(o => o.Number2 < 5)
                                                 .Select(x => x.Child.Child)
                                                 .Select(x => x.Child)
                                                 .Select(x => x.Name).Select(s => s.Length).Max();

            var v = new DependencyVisitor();

            v.Visit(c);
        }
Esempio n. 6
0
        private static AccessorInfo ParseExpression(Expression expression)
        {
            var checkVisitor      = new SkipCheckVisitor();
            var checkExpression   = checkVisitor.Visit(expression);
            var skipCheckFunction = Expression.Lambda <Func <Func <Type, LambdaExpression, bool>, bool> >(checkExpression, checkVisitor.Parameter).Compile();

            var dependencyVisitor = new DependencyVisitor();

            dependencyVisitor.Visit(expression);

            return(new AccessorInfo(skipCheckFunction, checkVisitor.DependencyPredicates, dependencyVisitor.Dependencies));
        }
Esempio n. 7
0
        public virtual DbCacheKey GenerateQueryKey(Expression expression, DbCachingPolicy policy)
        {
            var hash = GetExpressionHash(expression);

            var key = _keysCache.GetOrAdd(hash.CombinedHash, key =>
            {
                var visitor = new DependencyVisitor();
                visitor.ExtractDependencies(expression);

                return(new DbCacheKey
                {
                    Key = hash.CombinedHashString,
                    EntitySets = visitor.Types.Select(x => GenerateDependencyKey(x)).ToArray()
                });
            });

            return(key);
        }
Esempio n. 8
0
        public IDescribeInterfaceList MakeInterfaces(Configuration config)
        {
            var files = new List <string>();

            foreach (var file in config.NativeFiles)
            {
                if (string.IsNullOrWhiteSpace(file.Path))
                {
                    continue;
                }
                var fullpath = Path.GetFullPath(file.Path);
                if (!File.Exists(fullpath))
                {
                    Console.WriteLine("File does not exist: " + file.Path); continue;
                }
                files.Add(fullpath);
            }

            string[] arr = { "-x", "c++" };
            arr = arr.Concat(config.Includes?.Select(x => "-I" + Path.GetFullPath(x))).ToArray();

            var createIndex = clang.createIndex(0, 0);
            List <CXTranslationUnit> translationUnits = new List <CXTranslationUnit>();

            foreach (var file in files)
            {
                Console.WriteLine($"Parsing: {Path.GetFileName(file)}");
                var translationUnitError = clang.parseTranslationUnit2(createIndex, file, arr, 3, out CXUnsavedFile unsavedFile, 0, 0, out CXTranslationUnit translationUnit);

                if (translationUnitError != CXErrorCode.CXError_Success)
                {
                    Console.WriteLine("Error: " + translationUnitError);
                    var numDiagnostics = clang.getNumDiagnostics(translationUnit);

                    for (uint i = 0; i < numDiagnostics; ++i)
                    {
                        var diagnostic = clang.getDiagnostic(translationUnit, i);
                        Console.WriteLine(clang.getDiagnosticSpelling(diagnostic).ToString());
                        clang.disposeDiagnostic(diagnostic);
                    }
                }
                else
                {
                    translationUnits.Add(translationUnit);
                }
            }
            var classListInfo = new VirtualClassListInfo();

            var baseVisitor = new DependencyVisitor(classListInfo, config);

            foreach (var tu in translationUnits)
            {
                clang.visitChildren(clang.getTranslationUnitCursor(tu), baseVisitor.Visit, new CXClientData(IntPtr.Zero));
            }

            var visitors = new List <Visitor> {
                new DependencyVisitor(classListInfo, config),
                new AbstractClassVisitor(classListInfo, config),
                new StructVisitor(classListInfo, config),
                new EnumVisitor(classListInfo, config),
                new DelegateVisitor(classListInfo, config),
            };

            foreach (var visitor in visitors)
            {
                foreach (var tu in translationUnits)
                {
                    clang.visitChildren(clang.getTranslationUnitCursor(tu), visitor.Visit, new CXClientData(IntPtr.Zero));
                }
            }

            return(classListInfo);
        }