示例#1
0
        public void BeginReferenceSourceParsing()
        {
            if (_backgroundParseStarted)
            {
                return;
            }

            lock (_backgroundParseSyncObject)
            {
                if (_backgroundParseStarted)
                {
                    return;
                }

                _backgroundParseStarted = true;
            }

            JavaLanguagePackage package = JavaLanguagePackage.Instance ?? GlobalServiceProvider.GetShell().LoadPackage <JavaLanguagePackage>();

            if (!package.IntellisenseOptions.ParseJreSource || !Directory.Exists(package.IntellisenseOptions.JreSourcePath))
            {
                _backgroundParseStarted = false;
                return;
            }

            var task = Task.Factory.StartNew(QueueReferenceSourceParseTasks, package.IntellisenseOptions.JreSourcePath, CancellationToken.None, TaskCreationOptions.None, ProjectCacheIntelliSenseTaskScheduler);

            task.HandleNonCriticalExceptions();
        }
        private static List <string> GetSourcePaths()
        {
            List <string> sourcePaths = new List <string>();
            //sourcePaths.Add(@"C:\dev\jrockitsrc");

            var serviceProvider = (IServiceProvider)Package.GetGlobalService(typeof(IServiceProvider));

            if (serviceProvider == null)
            {
                serviceProvider = new ServiceProvider((IOleServiceProvider)Package.GetGlobalService(typeof(IOleServiceProvider)));
            }

            var vsServiceProvider = serviceProvider.AsVsServiceProvider();

            // TODO: make the JRE source directory part of the user project configuration since it varies with the VM in use
            JavaLanguagePackage package = JavaLanguagePackage.Instance ?? vsServiceProvider.GetShell().LoadPackage <JavaLanguagePackage>();

            if (package.IntellisenseOptions.ParseJreSource && Directory.Exists(package.IntellisenseOptions.JreSourcePath))
            {
                sourcePaths.Add(package.IntellisenseOptions.JreSourcePath);
            }

            IVsSolution solution = vsServiceProvider.GetSolution();

            IVsHierarchy[]    projectHierarchies = solution.GetProjectHierarchies(__VSENUMPROJFLAGS.EPF_ALLPROJECTS).ToArray();
            object[]          automationObjects  = projectHierarchies.Select(i => i.GetExtensibilityObjectOrDefault(VSConstants.VSITEMID_ROOT)).ToArray();
            JavaProjectNode[] projects           = automationObjects.OfType <OAProject>().Select(i => i.Project).OfType <JavaProjectNode>().ToArray();
            foreach (var project in projects)
            {
                List <MSBuild.ProjectItem> sourceFolders = new List <MSBuild.ProjectItem>();
                sourceFolders.AddRange(project.BuildProject.GetItems(JavaProjectFileConstants.SourceFolder));
                sourceFolders.AddRange(project.BuildProject.GetItems(JavaProjectFileConstants.TestSourceFolder));

                foreach (var folder in sourceFolders)
                {
                    sourcePaths.Add(Path.Combine(project.ProjectFolder, folder.EvaluatedInclude));
                }
            }

            return(sourcePaths);
        }