Ejemplo n.º 1
0
        public ImmutableArray <ObjectListItem> GetProjectListItems(Solution solution, string languageName, uint listFlags, CancellationToken cancellationToken)
        {
            var projectIds = solution.ProjectIds;

            if (!projectIds.Any())
            {
                return(ImmutableArray <ObjectListItem> .Empty);
            }

            var projectListItemBuilder   = ImmutableArray.CreateBuilder <ObjectListItem>();
            var referenceListItemBuilder = ImmutableArray.CreateBuilder <ObjectListItem>();
            HashSet <AssemblyIdentity> assemblyIdentitySet = null;

            foreach (var projectId in projectIds)
            {
                var project = solution.GetProject(projectId);
                if (project.Language != languageName)
                {
                    continue;
                }

                if (project.IsVenus())
                {
                    continue;
                }

                projectListItemBuilder.Add(new ProjectListItem(project));

                if (Helpers.IsObjectBrowser(listFlags))
                {
                    if (assemblyIdentitySet == null)
                    {
                        assemblyIdentitySet = new HashSet <AssemblyIdentity>();
                    }

                    foreach (var reference in project.MetadataReferences)
                    {
                        var portableExecutableReference = reference as PortableExecutableReference;
                        if (portableExecutableReference != null)
                        {
                            var assemblyIdentity = AssemblyIdentityUtils.TryGetAssemblyIdentity(portableExecutableReference.FilePath);
                            if (assemblyIdentity != null && !assemblyIdentitySet.Contains(assemblyIdentity))
                            {
                                assemblyIdentitySet.Add(assemblyIdentity);

                                var referenceListItem = new ReferenceListItem(projectId, assemblyIdentity.Name, reference);
                                referenceListItemBuilder.Add(referenceListItem);
                            }
                        }
                    }
                }
            }

            projectListItemBuilder.AddRange(referenceListItemBuilder);

            return(projectListItemBuilder.ToImmutable());
        }
Ejemplo n.º 2
0
        private AssemblyIdentity GetOrAddAssemblyIdentity(string fullPath)
        {
            Debug.Assert(PathUtilities.IsAbsolute(fullPath));

            lock (_guard) {
                if (_loadedAssemblyIdentitiesByPath.TryGetValue(fullPath, out var existingIdentity))
                {
                    return(existingIdentity);
                }
            }

            var identity = AssemblyIdentityUtils.TryGetAssemblyIdentity(fullPath);

            return(AddToCache(fullPath, identity));
        }
Ejemplo n.º 3
0
        protected override bool TryGetBrowseContainerData(uint index, ref VSCOMPONENTSELECTORDATA data)
        {
            var listItem = GetListItem(index);

            var projectListItem = listItem as ProjectListItem;

            if (projectListItem != null)
            {
                var hierarchy = this.LibraryManager.Workspace.GetHierarchy(projectListItem.ProjectId);
                if (hierarchy == null)
                {
                    return(false);
                }

                var vsSolution = this.LibraryManager.ServiceProvider.GetService(typeof(SVsSolution)) as IVsSolution;
                if (vsSolution == null)
                {
                    return(false);
                }

                if (ErrorHandler.Failed(vsSolution.GetProjrefOfProject(hierarchy, out var projectRef)))
                {
                    return(false);
                }

                var project = this.LibraryManager.Workspace.CurrentSolution.GetProject(projectListItem.ProjectId);
                if (project == null)
                {
                    return(false);
                }

                data.bstrFile    = project.FilePath;
                data.bstrProjRef = projectRef;
                data.bstrTitle   = projectListItem.DisplayText;
                data.type        = VSCOMPONENTTYPE.VSCOMPONENTTYPE_Project;
            }
            else
            {
                var referenceListItem = listItem as ReferenceListItem;
                if (referenceListItem == null)
                {
                    return(false);
                }

                var portableExecutableReference = referenceListItem.MetadataReference as PortableExecutableReference;
                if (portableExecutableReference == null)
                {
                    return(false);
                }

                var assemblyIdentity = AssemblyIdentityUtils.TryGetAssemblyIdentity(portableExecutableReference.FilePath);
                if (assemblyIdentity == null)
                {
                    return(false);
                }

                data.bstrFile = portableExecutableReference.FilePath;
                data.type     = VSCOMPONENTTYPE.VSCOMPONENTTYPE_ComPlus;

                data.wFileMajorVersion   = (ushort)assemblyIdentity.Version.Major;
                data.wFileMinorVersion   = (ushort)assemblyIdentity.Version.Minor;
                data.wFileBuildNumber    = (ushort)assemblyIdentity.Version.Build;
                data.wFileRevisionNumber = (ushort)assemblyIdentity.Version.Revision;
            }

            return(true);
        }