本文整理汇总了C#中IMethod.GetDeclaration方法的典型用法代码示例。如果您正苦于以下问题:C# IMethod.GetDeclaration方法的具体用法?C# IMethod.GetDeclaration怎么用?C# IMethod.GetDeclaration使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMethod
的用法示例。
在下文中一共展示了IMethod.GetDeclaration方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetConstructorBaseOrThisInvocation2
//InvocationExpression GetConstructorBaseOrThisInvocation(IMethod ctor)
//{
// var ctorNode = (ConstructorDeclaration)ctor.GetDeclaration();
// InvocationExpression node = null;
// if (ctorNode != null && ctorNode.Initializer != null && !ctorNode.Initializer.IsNull)
// {
// var xxx = (CSharpInvocationResolveResult)ctorNode.Initializer.Resolve();
// //throw new NotImplementedException();
// //danel
// var baseCtor = xxx.Member;
// var id = new IdentifierExpression(baseCtor.Name);
// id.SetResolveResult(new MemberResolveResult(null, baseCtor));
// node = new InvocationExpression(id);
// node.SetResolveResult(xxx);
// //{ entity = ctorNode.invoked_method, Target = ctorNode.invoked_method.Access() };
// //node.SetResolveResult(
// // node.Arguments.AddRange(ctorNode.Initializer.Arguments);
// }
// else
// {
// var ce = ctor.GetDeclaringTypeDefinition();
// if (Sk.OmitInheritance(ce))
// return null;
// var baseType = GetBaseClassIfValid(ce, true);
// if (baseType != null)
// {
// var baseCtor = baseType.GetConstructor();
// if (baseCtor != null)
// {
// //danel
// //throw new NotImplementedException();
// var id = new IdentifierExpression(baseCtor.Name);
// id.SetResolveResult(new MemberResolveResult(null, baseCtor));
// node = new InvocationExpression(id);// { entity = baseCtor, expression = baseCtor.Access() };
// node.SetResolveResult(new CSharpInvocationResolveResult(null, baseCtor, null));
// }
// }
// }
// return node;
//}
InvocationResolveResult GetConstructorBaseOrThisInvocation2(IMethod ctor)
{
var ctorNode = (ConstructorDeclaration)ctor.GetDeclaration();
InvocationResolveResult node = null;
if (ctorNode != null && ctorNode.Initializer != null && !ctorNode.Initializer.IsNull)
{
var xxx = (CSharpInvocationResolveResult)ctorNode.Initializer.Resolve();
return xxx;
}
else
{
var ce = ctor.GetDeclaringTypeDefinition();
if (Sk.OmitInheritance(ce))
return null;
var baseType = GetBaseClassIfValid(ce, true);
if (baseType != null)
{
var baseCtor = baseType.GetConstructors(t => t.Parameters.Count == 0, GetMemberOptions.IgnoreInheritedMembers).Where(t => !t.IsStatic).FirstOrDefault();
if (baseCtor != null)
{
return baseCtor.AccessSelf().Invoke();
}
}
}
return node;
}
示例2: ExportConstructorBody
protected JsBlock ExportConstructorBody(IMethod ctor)
{
var ctorNode = (ConstructorDeclaration)ctor.GetDeclaration();
BlockStatement ccc = null;
if (ctorNode != null)
ccc = ctorNode.Body;
//var ccc = ctor.GetDefinition();//.decl as CsConstructor;
//var ccc = ctor.GetDefinition();
var block2 = (JsBlock)AstNodeConverter.Visit(ccc);
if (block2 == null)
block2 = new JsBlock { Statements = new List<JsStatement>() };
var ce = ctor.GetDeclaringTypeDefinition();
var isClr = Sk.IsClrType(ce);
var isPrototype = Sk.IsNativeType(ce);
var statements = new List<JsStatement>();
//instance fields initializations
if (!Sk.InlineFields(ce))
{
var isGlobal = Sk.IsGlobalType(ce);
var fields = GetExportedDeclaredAndGeneratedFields(ce, ctor.IsStatic);
//var fields = ctor.GetDeclaringTypeDefinition().GetFields(null, GetMemberOptions.IgnoreInheritedMembers).Where(t => t.IsStatic() == ctor.IsStatic).ToList();
//fields = fields.Where(ShouldExportField).ToList();
//fields.AddRange(GeneratePropertyFields(ctor.DeclaringTypeDefinition, ctor.IsStatic));
//var props = ctor.GetDeclaringTypeDefinition().GetProperties(null, GetMemberOptions.IgnoreInheritedMembers).Where(t => t.IsStatic() == ctor.IsStatic).ToList();
//props = props.Where(t=>Sk.IsNativeField(t)).ToList();
//props = props.Where(t => Sk.IsJsExported(t)).ToList();
//var fieldsAndProperties = fields.Cast<IEntity>().Concat(props.Cast<IEntity>());
var initializers = fields.Select(fe => ExportInitializer(fe, null, isGlobal, false)).Cast<JsStatement>().ToList();
if (initializers.Contains(null))
Log.Warn("Some field initializers were not exported");
statements.AddRange(initializers.Where(t => t != null));
}
if (!ctor.IsStatic)
{
//base/this ctor invocation
var invocation = GetConstructorBaseOrThisInvocation2(ctor);
if (invocation != null)
{
var baseThisCe = invocation.Member.DeclaringType;
var isBaseClr = Sk.IsClrType(baseThisCe.GetDefinition());
var isBasePrototype = Sk.IsNativeType(baseThisCe.GetDefinition()) && !Sk.IsJsonMode(baseThisCe.GetDefinition()) && !Sk.IsGlobalType(baseThisCe.GetDefinition());//happens when prototype inherits from json
if (isBaseClr == isClr && isBasePrototype == isPrototype) //base and derived are both prototype, or both are clr
{
var newObjExp2 = AstNodeConverter.VisitExpression(invocation);
JsInvocationExpression invocation2;
if (newObjExp2 is JsNewObjectExpression)
{
var newObjExp = (JsNewObjectExpression)newObjExp2;
invocation2 = newObjExp.Invocation;
}
else if (newObjExp2 is JsInvocationExpression)
{
invocation2 = (JsInvocationExpression)newObjExp2;
}
else
{
throw new Exception("Unexpected node: " + newObjExp2);
}
if (Sk.IsExtJsType(ce))
{
var invocation3 = Js.This().Member("callParent").Invoke();
if (invocation2.Arguments.IsNotNullOrEmpty())
invocation3.Arguments = new List<JsExpression> { Js.NewJsonArray(invocation2.Arguments.NotNull().ToArray()) };
statements.Add(invocation3.Statement());
}
else
{
JsRefactorer.ToCallWithContext(invocation2, new JsThis());
statements.Add(invocation2.Statement());
}
}
}
}
if (block2.Statements == null)
block2.Statements = new List<JsStatement>();
block2.Statements.InsertRange(0, statements);
return block2;
}