public void CreateFileWithinProject([NotNull] TestCopProjectItem projectItem, [NotNull] string targetFile) { var desiredTemplateName = LookupTemplateName(projectItem.Project); var boundSettingsStore = _settingsStore.BindToContextTransient(ContextRange.ApplicationWide); var context = _dataContexts.CreateOnActiveControl(_lifetime); var applicableFileTemplateScopes = _scopeManager.EnumerateRealScopePoints(new TemplateAcceptanceContext(new ProjectFolderWithLocation(projectItem.Project))); applicableFileTemplateScopes = applicableFileTemplateScopes.Distinct().Where(s => s is InLanguageSpecificProject).ToList(); var classTemplate = _storedTemplatesProvider.EnumerateTemplates(boundSettingsStore, TemplateApplicability.File) .Where(x => x.Description == desiredTemplateName && TemplateScopeManager.TemplateIsAvailable(x, applicableFileTemplateScopes)) .Select(x => x) .FirstOrDefault(); if (classTemplate == null) { ResharperHelper.AppendLineToOutputWindow(string.Format("File Template for '{0}' not found with default to 'Class'", desiredTemplateName)); classTemplate = LoadTemplateFromQuickList(context, "Class"); } IProjectFolder folder = (IProjectFolder)projectItem.Project.FindProjectItemByLocation(projectItem.SubNamespaceFolder) ?? GetOrCreateProjectFolder(projectItem); if (folder == null) { ResharperHelper.AppendLineToOutputWindow("Error failed to create/location project folder" + projectItem.SubNamespaceFolder); return; } string extension = Enumerable.First(_fileExtensions.GetExtensions(projectItem.Project.ProjectProperties.DefaultLanguage.DefaultProjectFileType)); FileTemplatesManager.Instance.CreateFileFromTemplate(targetFile + extension, new ProjectFolderWithLocation(folder), classTemplate); }
//------------------------------------------------------------------------------------------------------------------------ public static bool DeriveRelatedFileNameAndAddCreateMenus(IDataContext context, Lifetime lifetime, IProject project, IList <TestCopProjectItem> associatedTargetProjects, IList <SimpleMenuItem> currentMenus, IClrTypeName clrTypeClassName) { bool addedCreateMenuItem = false; if (clrTypeClassName == null) { return(false); } var baseFileName = ResharperHelper.GetBaseFileName(context, project.GetSolution()); var settings = TestCopSettingsManager.Instance.Settings; bool currentFileisTestFile = baseFileName.EndsWith(settings.TestClassSuffixes()); foreach (var testClassSuffix in settings.GetAppropriateTestClassSuffixes(baseFileName)) { var targetFile = ResharperHelper.UsingFileNameGetClassName(baseFileName).RemoveTrailing(testClassSuffix); if (!currentFileisTestFile) { targetFile += testClassSuffix; } foreach (var associatedTargetProjectItem in associatedTargetProjects) { if (currentFileisTestFile == associatedTargetProjectItem.Project.IsTestProject()) { ResharperHelper.AppendLineToOutputWindow( string.Format("Internal Error: Attempted to create '{0}' within project '{1}'" , targetFile, associatedTargetProjectItem.Project.Name)); continue; } string targetFileLocation = associatedTargetProjectItem.SubNamespaceFolder.FullPath + "\\" + targetFile; if (!IsMenuItemPresentForFile(currentMenus, targetFileLocation)) { currentMenus.AddRange(AddCreateFileMenuItem(lifetime, associatedTargetProjectItem, targetFile)); addedCreateMenuItem = true; } } } return(addedCreateMenuItem); }