Example #1
0
        private bool HasAdditionalFile(ProjectItem projectItem, string additionalFileName, out string conflictingAdditionalFilePath)
        {
            if (additionalFileName.Equals(Path.GetFileName(projectItem.FileNames[0]), StringComparison.OrdinalIgnoreCase))
            {
                var itemTypeProperty         = VsShellUtils.FindProperty(projectItem.Properties, Constants.ItemTypePropertyKey);
                var isMarkedAsAdditionalFile = Constants.AdditionalFilesItemTypeName.Equals(itemTypeProperty.Value?.ToString(), StringComparison.OrdinalIgnoreCase);

                if (isMarkedAsAdditionalFile)
                {
                    var pathProperty = VsShellUtils.FindProperty(projectItem.Properties, Constants.FullPathPropertyKey);
                    conflictingAdditionalFilePath = pathProperty.Value.ToString();
                    return(true);
                }
            }

            foreach (ProjectItem subItem in projectItem.ProjectItems)
            {
                if (HasAdditionalFile(subItem, additionalFileName, out conflictingAdditionalFilePath))
                {
                    return(true);
                }
            }

            conflictingAdditionalFilePath = string.Empty;
            return(false);
        }
Example #2
0
        void IProjectSystemHelper.AddFileToProject(Project project, string file, string itemType)
        {
            bool addFileToProject = !project.ProjectItems.OfType <ProjectItem>().Any(pi => StringComparer.OrdinalIgnoreCase.Equals(pi.Name, file));

            if (addFileToProject)
            {
                var      item             = project.ProjectItems.AddFromFile(file);
                Property itemTypeProperty = VsShellUtils.FindProperty(item.Properties, Constants.ItemTypePropertyKey);
                if (itemTypeProperty != null)
                {
                    itemTypeProperty.Value = itemType;
                }
            }
        }
        public bool IsReferenced(Project project, string additionalFilePath)
        {
            var fileItem = projectSystemHelper.FindFileInProject(project, additionalFilePath);

            if (fileItem == null)
            {
                return(false);
            }

            var property = VsShellUtils.FindProperty(fileItem.Properties, Constants.ItemTypePropertyKey);
            var isMarkedAsAdditionalFile = Constants.AdditionalFilesItemTypeName.Equals(property.Value?.ToString(), StringComparison.OrdinalIgnoreCase);

            return(isMarkedAsAdditionalFile);
        }
        internal /* for testing */ static void EnsureItemTypeIsCorrect(ProjectItem projectItem)
        {
            try
            {
                var property = VsShellUtils.FindProperty(projectItem.Properties, Constants.ItemTypePropertyKey);
                if (!Constants.AdditionalFilesItemTypeName.Equals(property.Value?.ToString(), StringComparison.OrdinalIgnoreCase))
                {
                    // This will fail if the existing item ref isn't in the main project file e.g. if it is in a Directory.Build.props file.
                    // We can't do much about this, other than catch and log the error higher up.
                    property.Value = Constants.AdditionalFilesItemTypeName;
                }
            }
            catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex))
            {
                var message = string.Format(BindingStrings.CSharpVB_FailedToSetSonarLintXmlItemType, projectItem.ContainingProject.FileName,
                                            Constants.AdditionalFilesItemTypeName, ex.Message);

                throw new SonarLintException(message, ex);
            }
        }