Browse Source

T4 template now handles project not returning a CodeDomProvider.

Default to using C# code dom provider and add warning to Errors
window instead of failing to pre-processing a template.
newNRvisualizers
Matt Ward 13 years ago
parent
commit
0daa6cf063
  1. 26
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs
  2. 4
      src/AddIns/Misc/TextTemplating/Test/Helpers/TestableProject.cs
  3. 23
      src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs

26
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs

@ -6,7 +6,10 @@ using System.CodeDom.Compiler; @@ -6,7 +6,10 @@ using System.CodeDom.Compiler;
using System.IO;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.CSharp;
namespace ICSharpCode.TextTemplating
{
@ -72,7 +75,7 @@ namespace ICSharpCode.TextTemplating @@ -72,7 +75,7 @@ namespace ICSharpCode.TextTemplating
outputFileName,
Encoding.UTF8,
out language,
out references);
out references);
} catch (Exception ex) {
AddCompilerErrorToTemplatingHost(ex, inputFileName);
DebugLogException(ex, inputFileName);
@ -88,10 +91,23 @@ namespace ICSharpCode.TextTemplating @@ -88,10 +91,23 @@ namespace ICSharpCode.TextTemplating
string CreateValidClassName(string className)
{
return TemplateFile
.Project
.CreateCodeDomProvider()
.CreateValidIdentifier(className);
return CreateCodeDomProvider().CreateValidIdentifier(className);
}
CodeDomProvider CreateCodeDomProvider()
{
CodeDomProvider provider = TemplateFile.Project.CreateCodeDomProvider();
if (provider != null) {
return provider;
}
AddMissingCodeDomProviderTask();
return new CSharpCodeProvider();
}
void AddMissingCodeDomProviderTask()
{
string message = "Project does not provide a CodeDomProvider. Using C# provider by default";
Context.AddTask(new SDTask(null, message, 0, 0, TaskType.Warning));
}
}
}

4
src/AddIns/Misc/TextTemplating/Test/Helpers/TestableProject.cs

@ -35,9 +35,11 @@ namespace TextTemplating.Tests.Helpers @@ -35,9 +35,11 @@ namespace TextTemplating.Tests.Helpers
set { rootNamespace = value; }
}
public CodeDomProvider CodeDomProviderToReturn = new CSharpCodeProvider();
public override CodeDomProvider CreateCodeDomProvider()
{
return new CSharpCodeProvider();
return CodeDomProviderToReturn;
}
}
}

23
src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs

@ -263,5 +263,28 @@ namespace TextTemplating.Tests @@ -263,5 +263,28 @@ namespace TextTemplating.Tests
Assert.AreEqual("_class", templatingHost.ClassNamePassedToPreprocessTemplate);
}
[Test]
public void PreprocessTemplate_ProjectHasNoCodeDomProvider_CSharpCodeDomProviderUsedByDefaultAndClassNameChangedToValidClassName()
{
TestableFileProjectItem projectFile = CreatePreprocessor(@"d:\class.tt");
projectFile.TestableProject.CodeDomProviderToReturn = null;
preprocessor.PreprocessTemplate();
Assert.AreEqual("_class", templatingHost.ClassNamePassedToPreprocessTemplate);
}
[Test]
public void PreprocessTemplate_ProjectHasNoCodeDomProvider_WarningTaskAdded()
{
TestableFileProjectItem projectFile = CreatePreprocessor(@"d:\test.tt");
projectFile.TestableProject.CodeDomProviderToReturn = null;
preprocessor.PreprocessTemplate();
SDTask task = customToolContext.FirstTaskAdded;
Assert.AreEqual(TaskType.Warning, task.TaskType);
}
}
}

Loading…
Cancel
Save