public override EnvDTE.FileCodeModel GetFileCodeModel(DocumentId documentId) { if (documentId == null) { throw new ArgumentNullException(nameof(documentId)); } var project = ProjectTracker.GetProject(documentId.ProjectId); if (project == null) { throw new ArgumentException(ServicesVSResources.DocumentIdNotFromWorkspace, nameof(documentId)); } var document = project.GetDocumentOrAdditionalDocument(documentId); if (document == null) { throw new ArgumentException(ServicesVSResources.DocumentIdNotFromWorkspace, nameof(documentId)); } var provider = project as IProjectCodeModelProvider; if (provider != null) { var projectCodeModel = provider.ProjectCodeModel; if (projectCodeModel.CanCreateFileCodeModelThroughProject(document.FilePath)) { return((EnvDTE.FileCodeModel)projectCodeModel.CreateFileCodeModelThroughProject(document.FilePath)); } } return(null); }
internal override bool RenameFileCodeModelInstance(DocumentId documentId, string newFilePath) { if (documentId == null) { return(false); } var project = ProjectTracker.GetProject(documentId.ProjectId); if (project == null) { return(false); } var document = project.GetDocumentOrAdditionalDocument(documentId); if (document == null) { return(false); } var codeModelProvider = project as IProjectCodeModelProvider; if (codeModelProvider == null) { return(false); } var codeModelCache = codeModelProvider.ProjectCodeModel.GetCodeModelCache(); if (codeModelCache == null) { return(false); } codeModelCache.OnSourceFileRenaming(document.FilePath, newFilePath); return(true); }
private void ValidateReferencesCore() { // can happen when project is unloaded and reloaded or in Venus (aspx) case if (ProjectFilePath == null || BinOutputPath == null || ObjOutputPath == null) { return; } object property = null; if (ErrorHandler.Failed(Hierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out property))) { return; } var dteProject = property as EnvDTE.Project; if (dteProject == null) { return; } var vsproject = dteProject.Object as VSProject; if (vsproject == null) { return; } var noReferenceOutputAssemblies = new List <string>(); var factory = this.ServiceProvider.GetService(typeof(SVsEnumHierarchyItemsFactory)) as IVsEnumHierarchyItemsFactory; IEnumHierarchyItems items; if (ErrorHandler.Failed(factory.EnumHierarchyItems(Hierarchy, (uint)__VSEHI.VSEHI_Leaf, (uint)VSConstants.VSITEMID.Root, out items))) { return; } uint fetched; VSITEMSELECTION[] item = new VSITEMSELECTION[1]; while (ErrorHandler.Succeeded(items.Next(1, item, out fetched)) && fetched == 1) { // ignore ReferenceOutputAssembly=false references since those will not be added to us in design time. var storage = Hierarchy as IVsBuildPropertyStorage; string value; storage.GetItemAttribute(item[0].itemid, "ReferenceOutputAssembly", out value); object caption; Hierarchy.GetProperty(item[0].itemid, (int)__VSHPROPID.VSHPROPID_Caption, out caption); if (string.Equals(value, "false", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "off", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "0", StringComparison.OrdinalIgnoreCase)) { noReferenceOutputAssemblies.Add((string)caption); } } var projectReferences = GetCurrentProjectReferences(); var metadataReferences = GetCurrentMetadataReferences(); var set = new HashSet <string>(vsproject.References.OfType <Reference>().Select(r => PathUtilities.IsAbsolute(r.Name) ? Path.GetFileNameWithoutExtension(r.Name) : r.Name), StringComparer.OrdinalIgnoreCase); var delta = set.Count - noReferenceOutputAssemblies.Count - (projectReferences.Length + metadataReferences.Length); if (delta == 0) { return; } // okay, two has different set of dlls referenced. check special Microsoft.VisualBasic case. if (delta != 1) { //// Contract.Requires(false, "different set of references!!!"); return; } set.ExceptWith(noReferenceOutputAssemblies); set.ExceptWith(projectReferences.Select(r => ProjectTracker.GetProject(r.ProjectId).DisplayName)); set.ExceptWith(metadataReferences.Select(m => Path.GetFileNameWithoutExtension(m.FilePath))); //// Contract.Requires(set.Count == 1); var reference = set.First(); if (!string.Equals(reference, "Microsoft.VisualBasic", StringComparison.OrdinalIgnoreCase)) { //// Contract.Requires(false, "unknown new reference " + reference); return; } #if DEBUG // when we are missing microsoft.visualbasic reference, make sure we have embedded vb core option on. Contract.Requires(Debug_VBEmbeddedCoreOptionOn); #endif }