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); }