aspnetcore/src/Microsoft.AspNet.Razor/Generator/GeneratedClassContext.cs

178 lines
8.8 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using Microsoft.Internal.Web.Utils;
namespace Microsoft.AspNet.Razor.Generator
{
public struct GeneratedClassContext
{
public static readonly string DefaultWriteMethodName = "Write";
public static readonly string DefaultWriteLiteralMethodName = "WriteLiteral";
public static readonly string DefaultExecuteMethodName = "ExecuteAsync";
public static readonly string DefaultLayoutPropertyName = "Layout";
public static readonly string DefaultWriteAttributeMethodName = "WriteAttribute";
public static readonly string DefaultWriteAttributeToMethodName = "WriteAttributeTo";
public static readonly GeneratedClassContext Default = new GeneratedClassContext(DefaultExecuteMethodName,
DefaultWriteMethodName,
DefaultWriteLiteralMethodName);
public GeneratedClassContext(string executeMethodName, string writeMethodName, string writeLiteralMethodName)
: this()
{
if (String.IsNullOrEmpty(executeMethodName))
{
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture,
CommonResources.Argument_Cannot_Be_Null_Or_Empty,
"executeMethodName"),
"executeMethodName");
}
if (String.IsNullOrEmpty(writeMethodName))
{
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture,
CommonResources.Argument_Cannot_Be_Null_Or_Empty,
"writeMethodName"),
"writeMethodName");
}
if (String.IsNullOrEmpty(writeLiteralMethodName))
{
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture,
CommonResources.Argument_Cannot_Be_Null_Or_Empty,
"writeLiteralMethodName"),
"writeLiteralMethodName");
}
WriteMethodName = writeMethodName;
WriteLiteralMethodName = writeLiteralMethodName;
ExecuteMethodName = executeMethodName;
WriteToMethodName = null;
WriteLiteralToMethodName = null;
TemplateTypeName = null;
DefineSectionMethodName = null;
LayoutPropertyName = DefaultLayoutPropertyName;
WriteAttributeMethodName = DefaultWriteAttributeMethodName;
WriteAttributeToMethodName = DefaultWriteAttributeToMethodName;
}
public GeneratedClassContext(string executeMethodName,
string writeMethodName,
string writeLiteralMethodName,
string writeToMethodName,
string writeLiteralToMethodName,
string templateTypeName)
: this(executeMethodName, writeMethodName, writeLiteralMethodName)
{
WriteToMethodName = writeToMethodName;
WriteLiteralToMethodName = writeLiteralToMethodName;
TemplateTypeName = templateTypeName;
}
public GeneratedClassContext(string executeMethodName,
string writeMethodName,
string writeLiteralMethodName,
string writeToMethodName,
string writeLiteralToMethodName,
string templateTypeName,
string defineSectionMethodName)
: this(executeMethodName, writeMethodName, writeLiteralMethodName, writeToMethodName, writeLiteralToMethodName, templateTypeName)
{
DefineSectionMethodName = defineSectionMethodName;
}
public GeneratedClassContext(string executeMethodName,
string writeMethodName,
string writeLiteralMethodName,
string writeToMethodName,
string writeLiteralToMethodName,
string templateTypeName,
string defineSectionMethodName,
string beginContextMethodName,
string endContextMethodName)
: this(executeMethodName, writeMethodName, writeLiteralMethodName, writeToMethodName, writeLiteralToMethodName, templateTypeName, defineSectionMethodName)
{
BeginContextMethodName = beginContextMethodName;
EndContextMethodName = endContextMethodName;
}
public string WriteMethodName { get; private set; }
public string WriteLiteralMethodName { get; private set; }
public string WriteToMethodName { get; private set; }
public string WriteLiteralToMethodName { get; private set; }
public string ExecuteMethodName { get; private set; }
// Optional Items
public string BeginContextMethodName { get; set; }
public string EndContextMethodName { get; set; }
public string LayoutPropertyName { get; set; }
public string DefineSectionMethodName { get; set; }
public string TemplateTypeName { get; set; }
public string WriteAttributeMethodName { get; set; }
public string WriteAttributeToMethodName { get; set; }
[SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Property is not a URL property")]
public string ResolveUrlMethodName { get; set; }
public bool AllowSections
{
get { return !String.IsNullOrEmpty(DefineSectionMethodName); }
}
public bool AllowTemplates
{
get { return !String.IsNullOrEmpty(TemplateTypeName); }
}
public bool SupportsInstrumentation
{
get { return !String.IsNullOrEmpty(BeginContextMethodName) && !String.IsNullOrEmpty(EndContextMethodName); }
}
public override bool Equals(object obj)
{
if (!(obj is GeneratedClassContext))
{
return false;
}
GeneratedClassContext other = (GeneratedClassContext)obj;
return String.Equals(DefineSectionMethodName, other.DefineSectionMethodName, StringComparison.Ordinal) &&
String.Equals(WriteMethodName, other.WriteMethodName, StringComparison.Ordinal) &&
String.Equals(WriteLiteralMethodName, other.WriteLiteralMethodName, StringComparison.Ordinal) &&
String.Equals(WriteToMethodName, other.WriteToMethodName, StringComparison.Ordinal) &&
String.Equals(WriteLiteralToMethodName, other.WriteLiteralToMethodName, StringComparison.Ordinal) &&
String.Equals(ExecuteMethodName, other.ExecuteMethodName, StringComparison.Ordinal) &&
String.Equals(TemplateTypeName, other.TemplateTypeName, StringComparison.Ordinal) &&
String.Equals(BeginContextMethodName, other.BeginContextMethodName, StringComparison.Ordinal) &&
String.Equals(EndContextMethodName, other.EndContextMethodName, StringComparison.Ordinal);
}
public override int GetHashCode()
{
// TODO: Use HashCodeCombiner
return DefineSectionMethodName.GetHashCode() ^
WriteMethodName.GetHashCode() ^
WriteLiteralMethodName.GetHashCode() ^
WriteToMethodName.GetHashCode() ^
WriteLiteralToMethodName.GetHashCode() ^
ExecuteMethodName.GetHashCode() ^
TemplateTypeName.GetHashCode() ^
BeginContextMethodName.GetHashCode() ^
EndContextMethodName.GetHashCode();
}
public static bool operator ==(GeneratedClassContext left, GeneratedClassContext right)
{
return left.Equals(right);
}
public static bool operator !=(GeneratedClassContext left, GeneratedClassContext right)
{
return !left.Equals(right);
}
}
}