本文整理汇总了C#中SyntaxGenerator.ThisExpression方法的典型用法代码示例。如果您正苦于以下问题:C# SyntaxGenerator.ThisExpression方法的具体用法?C# SyntaxGenerator.ThisExpression怎么用?C# SyntaxGenerator.ThisExpression使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SyntaxGenerator
的用法示例。
在下文中一共展示了SyntaxGenerator.ThisExpression方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetMethodStatementsSyntax
private static IEnumerable<SyntaxNode> GetMethodStatementsSyntax(
SyntaxGenerator syntaxGenerator,
SemanticModel semanticModel,
IMethodSymbol methodSymbol)
{
// GENERATED CODE (for every ref or out parameter):
//
// string someOutParameter;
// var someRefParameter = default(int);
for (var i = 0; i < methodSymbol.Parameters.Length; ++i)
{
var parameter = methodSymbol.Parameters[i];
if (parameter.RefKind == RefKind.Out)
{
yield return syntaxGenerator
.LocalDeclarationStatement(
syntaxGenerator.TypeExpression(parameter.Type),
GetNameForParameter(methodSymbol, parameter));
}
else if (parameter.RefKind == RefKind.Ref)
{
yield return syntaxGenerator
.LocalDeclarationStatement(
GetNameForParameter(methodSymbol, parameter),
initializer: syntaxGenerator.DefaultExpression(syntaxGenerator.TypeExpression(parameter.Type)));
}
}
var arguments = methodSymbol
.Parameters
.Select(x =>
syntaxGenerator
.Argument(
x.RefKind,
syntaxGenerator.IdentifierName(GetNameForParameter(methodSymbol, x))))
.ToList();
var typeArguments = methodSymbol
.TypeArguments
.Select(x => syntaxGenerator.TypeExpression(x))
.ToList();
var lambdaParameterName = GetUniqueName(methodSymbol);
var lambdaInvocation = syntaxGenerator
.MemberAccessExpression(
syntaxGenerator.IdentifierName(lambdaParameterName),
methodSymbol.Name);
if (typeArguments.Count > 0)
{
lambdaInvocation = syntaxGenerator
.WithTypeArguments(
lambdaInvocation,
typeArguments);
}
// GENERATED CODE (for every ref or out parameter):
//
// someOutParameter = this.GetOutParameterValue<string>(x => x.TheMethod(out someOutParameter), parameterIndex: 0);
// someRefParameter = this.GetRefParameterValue<int>(x => x.TheMethod(ref someRefParameter), parameterIndex: 0);
for (var i = 0; i < methodSymbol.Parameters.Length; ++i)
{
var parameter = methodSymbol.Parameters[i];
if (parameter.RefKind == RefKind.Out || parameter.RefKind == RefKind.Ref)
{
var nameOfMethodToCall = parameter.RefKind == RefKind.Out ? "GetOutParameterValue" : "GetRefParameterValue";
yield return syntaxGenerator
.AssignmentStatement(
syntaxGenerator.IdentifierName(parameter.Name),
syntaxGenerator
.InvocationExpression(
syntaxGenerator.MemberAccessExpression(
syntaxGenerator.ThisExpression(),
syntaxGenerator.GenericName(
nameOfMethodToCall,
typeArguments: syntaxGenerator.TypeExpression(parameter.Type))),
arguments: new[]
{
syntaxGenerator.ValueReturningLambdaExpression(
lambdaParameterName,
syntaxGenerator.InvocationExpression(
lambdaInvocation,
arguments: arguments)),
syntaxGenerator.LiteralExpression(i)
}));
}
}
// GENERATED CODE:
//
// [return] this.Apply(x => x.SomeMethod(param1, param2));
var applyInvocation = syntaxGenerator
.InvocationExpression(
syntaxGenerator.MemberAccessExpression(
syntaxGenerator.ThisExpression(),
"Apply"),
//.........这里部分代码省略.........
示例2: CreateDisposeMethods
private IEnumerable<SyntaxNode> CreateDisposeMethods(Compilation compilation, SyntaxGenerator g, GenerationNameTable nameTable, bool suppressWarningComments)
{
yield return g.AddWarningCommentIf(!suppressWarningComments,
g.MethodDeclaration(
"Dispose",
accessibility: Accessibility.Public,
statements: new SyntaxNode[]
{
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
"Dispose"
),
g.TrueLiteralExpression()
),
g.InvocationExpression(
g.MemberAccessExpression(
g.TypeExpression(compilation.RequireTypeByMetadataName("System.GC")),
"SuppressFinalize"
),
g.ThisExpression()
)
}
))
.PrependLeadingTrivia(g.CreateRegionTrivia("IDisposable"));
yield return g.AddWarningCommentIf(!suppressWarningComments, g.MethodDeclaration(
"Dispose",
parameters: new SyntaxNode[] { g.ParameterDeclaration("disposing", g.TypeExpression(SpecialType.System_Boolean)) },
accessibility: Accessibility.Private,
statements: new SyntaxNode[]
{
g.IfStatement(
g.ValueEqualsExpression(
g.IdentifierName("disposing"),
g.TrueLiteralExpression()
),
new SyntaxNode[]
{
g.TryCatchStatement(
new SyntaxNode[]
{
g.ExpressionStatement(
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CloseProxyMethod]
),
g.FalseLiteralExpression()
)
)
},
new SyntaxNode[]
{
g.CatchClause(new SyntaxNode [0])
}
)
}
)
}
)).AddTrailingTrivia(g.CreateEndRegionTrivia());
}
示例3: GetPropertySetAccessorsSyntax
private static IEnumerable<SyntaxNode> GetPropertySetAccessorsSyntax(
SyntaxGenerator syntaxGenerator,
SemanticModel semanticModel,
IPropertySymbol propertySymbol)
{
if (propertySymbol.SetMethod == null)
{
yield break;
}
var lambdaParameterName = GetUniqueName(propertySymbol);
if (!propertySymbol.IsIndexer)
{
// GENERATED CODE:
//
// this.ApplyPropertySet(x => x.PropertyName, value);
yield return syntaxGenerator
.InvocationExpression(
syntaxGenerator.MemberAccessExpression(
syntaxGenerator.ThisExpression(),
"ApplyPropertySet"),
syntaxGenerator.ValueReturningLambdaExpression(
lambdaParameterName,
syntaxGenerator.MemberAccessExpression(
syntaxGenerator.IdentifierName(lambdaParameterName),
syntaxGenerator.IdentifierName(propertySymbol.Name))),
syntaxGenerator.IdentifierName("value"));
}
else
{
// GENERATED CODE:
//
// this.ApplyPropertySet(x => x[first, second], value);
var arguments = propertySymbol
.Parameters
.Select(x => syntaxGenerator.Argument(syntaxGenerator.IdentifierName(x.Name)))
.ToList();
yield return syntaxGenerator
.InvocationExpression(
syntaxGenerator.MemberAccessExpression(
syntaxGenerator.ThisExpression(),
"ApplyPropertySet"),
syntaxGenerator.ValueReturningLambdaExpression(
lambdaParameterName,
syntaxGenerator.ElementAccessExpression(
syntaxGenerator.IdentifierName(lambdaParameterName),
arguments)),
syntaxGenerator.IdentifierName("value"));
}
}
示例4: CreateEnsureProxyMethod
private SyntaxNode CreateEnsureProxyMethod(Compilation compilation, SyntaxGenerator g, GenerationNameTable nameTable, bool asAsync)
{
/*
private async System.Threading.Tasks.Task EnsureProxyAsync()
{
if (m_cachedProxy != null && (
((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Faulted ||
((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Closed))
{
await CloseProxyAsync().ConfigureAwait(false);
}
if (m_cachedProxy == null)
{
var proxy = m_proxyFactory();
await System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)proxy).BeginOpen, ((System.ServiceModel.ICommunicationObject)proxy).EndOpen, null).ConfigureAwait(false);
m_cachedProxy = proxy;
}
}
*/
return
g.MethodDeclaration(
asAsync ? nameTable[MemberNames.EnsureProxyAsyncMethod] : nameTable[MemberNames.EnsureProxyMethod],
returnType: asAsync ? g.TypeExpression(compilation.RequireType<Task>()) : null,
accessibility: Accessibility.Private,
modifiers: asAsync ? DeclarationModifiers.Async : DeclarationModifiers.None,
statements: new SyntaxNode[]
{
//if (m_cachedProxy != null && (
// ((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Faulted ||
// ((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Closed))
g.IfStatement(
g.LogicalAndExpression(
// m_cachedProxy != null
g.ReferenceNotEqualsExpression(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
),
g.NullLiteralExpression()
),
g.LogicalOrExpression(
// ((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Faulted
g.ValueEqualsExpression(
g.MemberAccessExpression(
g.CastExpression(
compilation.RequireTypeByMetadataName("System.ServiceModel.ICommunicationObject"),
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
)
),
"State"
),
g.DottedName("System.ServiceModel.CommunicationState.Faulted")
),
// ((System.ServiceModel.ICommunicationObject)m_cachedProxy).State == System.ServiceModel.CommunicationState.Faulted
g.ValueEqualsExpression(
g.MemberAccessExpression(
g.CastExpression(
compilation.RequireTypeByMetadataName("System.ServiceModel.ICommunicationObject"),
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
)
),
"State"
),
g.DottedName("System.ServiceModel.CommunicationState.Closed")
)
)
),
new SyntaxNode[]
{
// await CloseProxyAsync(false).ConfigureAwait(false);
// or
// CloseProxy(false);
AwaitExpressionIfAsync(g, asAsync,
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
asAsync ? nameTable[MemberNames.CloseProxyAsyncMethod] : nameTable[MemberNames.CloseProxyMethod]
),
g.FalseLiteralExpression()
)
)
}
),
g.IfStatement(
g.ReferenceEqualsExpression(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
),
g.NullLiteralExpression()
),
new SyntaxNode[]
{
g.LocalDeclarationStatement(
"proxy",
//.........这里部分代码省略.........
示例5: CreateCloseProxyMethod
private SyntaxNode CreateCloseProxyMethod(Compilation compilation, SyntaxGenerator g, GenerationNameTable nameTable, bool asAsync)
{
return
g.MethodDeclaration(
asAsync ? nameTable[MemberNames.CloseProxyAsyncMethod] : nameTable[MemberNames.CloseProxyMethod],
returnType: asAsync ? g.TypeExpression(compilation.RequireType<Task>()) : null,
parameters: new SyntaxNode[] { g.ParameterDeclaration("alwaysAbort", g.TypeExpression(SpecialType.System_Boolean)) },
modifiers: asAsync ? DeclarationModifiers.Async : DeclarationModifiers.None,
accessibility: Accessibility.Private,
statements: new SyntaxNode[]
{
g.IfStatement(
g.ReferenceNotEqualsExpression(
g.IdentifierName(nameTable[MemberNames.CachedProxyField]),
g.NullLiteralExpression()
),
new SyntaxNode[]
{
g.LocalDeclarationStatement(
"proxy",
g.TryCastExpression(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
),
compilation.RequireTypeByMetadataName("System.ServiceModel.ICommunicationObject")
)
),
g.TryFinallyStatement(
new SyntaxNode[]
{
AwaitExpressionIfAsync(g, asAsync,
g.InvocationExpression(
g.IdentifierName(asAsync ? nameTable[MemberNames.CloseProxyAsyncMethod] : nameTable[MemberNames.CloseProxyMethod]),
g.IdentifierName("proxy"),
g.IdentifierName("alwaysAbort")
)
)
},
new SyntaxNode[]
{
g.AssignmentStatement(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
),
g.NullLiteralExpression()
)
}
)
}
)
}
);
}
示例6: GenerateClientClass
public Task<ClassDeclarationSyntax> GenerateClientClass(SemanticModel semanticModel, SyntaxGenerator gen, INamedTypeSymbol proxyInterface, string name, Accessibility accessibility, bool includeCancellableAsyncMethods, bool suppressWarningComments, MemberAccessibility constructorAccessibility, bool withInternalProxy)
{
if (name == null)
{
if (proxyInterface.Name.StartsWith("I"))
name = proxyInterface.Name.Substring(1);
if (name.EndsWith("Proxy"))
name = name.Substring(0, name.Length - "Proxy".Length);
if (!name.EndsWith("Client"))
name = name + "Client";
}
SyntaxNode targetClass = gen.ClassDeclaration(name,
baseType: gen.TypeExpression(semanticModel.Compilation.RequireType<MarshalByRefObject>()),
accessibility: accessibility,
modifiers: DeclarationModifiers.Sealed);
targetClass = gen.AddWarningCommentIf(!suppressWarningComments, targetClass);
targetClass = gen.AddInterfaceType(targetClass, gen.TypeExpression(semanticModel.Compilation.GetSpecialType(SpecialType.System_IDisposable)));
targetClass = gen.AddInterfaceType(targetClass, gen.TypeExpression(proxyInterface));
IEnumerable<IMethodSymbol> methods = GetOperationContractMethods(semanticModel.Compilation, proxyInterface).ToArray();
GenerationNameTable nameTable = new GenerationNameTable(methods.Select(m => m.Name).Concat(new[] { name }));
#region Private Fields
// ==> private IProxy m_cachedProxy;
SyntaxNode cachedProxyField =
gen.FieldDeclaration(nameTable[MemberNames.CachedProxyField], gen.TypeExpression(proxyInterface), Accessibility.Private, DeclarationModifiers.None)
.PrependLeadingTrivia(gen.CreateRegionTrivia("Private Fields"));
targetClass = gen.AddMembers(targetClass, cachedProxyField);
// ==> private readonly Func<IProxy> m_proxyFactory;
SyntaxNode proxyFactoryTypeExpression = gen.TypeExpression(semanticModel.Compilation.RequireTypeByMetadataName("System.Func`1").Construct(proxyInterface));
targetClass = gen.AddMembers(targetClass, gen.FieldDeclaration(nameTable[MemberNames.ProxyFactoryField], proxyFactoryTypeExpression, Accessibility.Private, DeclarationModifiers.ReadOnly)
.AddTrailingTrivia(gen.CreateEndRegionTrivia()).AddNewLineTrivia());
#endregion
#region Constructors
// Constructor
SyntaxNode constructor = gen.ConstructorDeclaration(
parameters: new[] { gen.ParameterDeclaration("proxyFactory", proxyFactoryTypeExpression) },
accessibility: withInternalProxy ? Accessibility.Private : ToAccessibility(constructorAccessibility)
);
constructor = gen.AddWarningCommentIf(!suppressWarningComments, constructor);
constructor = constructor.PrependLeadingTrivia(gen.CreateRegionTrivia("Constructors"));
constructor = gen.WithStatements(constructor,
new[]
{
// ==> if (proxyFactory == null)
// ==> throw new System.ArgumentNullException("proxyFactory");
gen.ThrowIfNullStatement("proxyFactory"),
// ==> m_proxyFactory = proxyFactory
gen.AssignmentStatement(
gen.MemberAccessExpression(
gen.ThisExpression(),
gen.IdentifierName(nameTable[MemberNames.ProxyFactoryField])),
gen.IdentifierName("proxyFactory")
)
}
).AddNewLineTrivia();
if (!withInternalProxy)
constructor = constructor.AddTrailingTrivia(gen.CreateEndRegionTrivia()).AddNewLineTrivia();
targetClass = gen.AddMembers(targetClass, constructor);
ClassDeclarationSyntax proxyClass = null;
if (withInternalProxy)
{
IEnumerable<IMethodSymbol> ctors;
proxyClass = GenerateProxyClass(semanticModel, gen, proxyInterface, nameTable[MemberNames.ProxyClass], Accessibility.Private, suppressWarningComments, MemberAccessibility.Public, out ctors)
.PrependLeadingTrivia(gen.CreateRegionTrivia("Proxy Class").Insert(0, gen.NewLine()))
.AddTrailingTrivia(gen.CreateEndRegionTrivia());
// Generate one constructor for each of the proxy's constructors.
foreach (var ctorEntry in ctors.AsSmartEnumerable())
{
var ctor = ctorEntry.Value;
var targetCtor = gen.ConstructorDeclaration(ctor);
var lambda = gen.ValueReturningLambdaExpression(
gen.ObjectCreationExpression(gen.IdentifierName(gen.GetName(proxyClass)), ctor.Parameters.Select(p => gen.IdentifierName(p.Name)))
);
targetCtor = gen.WithThisConstructorInitializer(targetCtor, new[] { lambda });
//.........这里部分代码省略.........
示例7: CreateGetProxyMethod
private SyntaxNode CreateGetProxyMethod(Compilation compilation, SyntaxGenerator g, INamedTypeSymbol proxyInterface, GenerationNameTable nameTable, bool isAsync)
{
//private IProxy GetProxy()
//{
// EnsureProxy();
// return m_cachedProxy;
//}
return g.MethodDeclaration(
isAsync ? nameTable[MemberNames.GetProxyAsyncMethod] : nameTable[MemberNames.GetProxyMethod],
returnType: g.TypeExpression(isAsync ? compilation.RequireType(typeof(Task<>)).Construct(proxyInterface) : proxyInterface),
accessibility: Accessibility.Private,
modifiers: isAsync ? DeclarationModifiers.Async : DeclarationModifiers.None,
statements: new SyntaxNode[]
{
g.ExpressionStatement(
AwaitExpressionIfAsync(g, isAsync,
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
isAsync ? nameTable[MemberNames.EnsureProxyAsyncMethod] : nameTable[MemberNames.EnsureProxyMethod]
)
)
)
),
g.ReturnStatement(
g.MemberAccessExpression(
g.ThisExpression(),
nameTable[MemberNames.CachedProxyField]
)
)
}
);
}
示例8: CreateProxyVaraibleDeclaration
private SyntaxNode CreateProxyVaraibleDeclaration(SyntaxGenerator g, GenerationNameTable nameTable, bool isAsync)
{
// var proxy = this.GetProxy();
if (!isAsync)
{
return g.LocalDeclarationStatement(nameTable[MemberNames.ProxyVariable],
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
g.IdentifierName(nameTable[MemberNames.GetProxyMethod])
)
)
);
}
else
{
// var proxy = await this.GetProxyAsync().ConfigureAwait(false);
return
g.LocalDeclarationStatement(nameTable[MemberNames.ProxyVariable],
g.AwaitExpression(
g.InvocationExpression(
g.MemberAccessExpression(
g.InvocationExpression(
g.MemberAccessExpression(
g.ThisExpression(),
g.IdentifierName(nameTable[MemberNames.GetProxyAsyncMethod])
)
), "ConfigureAwait"),
g.FalseLiteralExpression()
)
)
);
}
}