public static JNewAnonymousClassExpression CreateDelegate(JMemberExpression delType, JParameterDeclaration[] prms2, JMemberExpression returnType, JBlock body) { if (prms2 == null) { prms2 = new JParameterDeclaration[0]; } if (returnType == null) { returnType = J.Member("void"); } var ce = NewAnonymousType(delType); var me = new JMethodDeclaration { MethodBody = body, Parameters = prms2.ToList(), Annotations = { new JAnnotationDeclaration { Name = "Override" } }, Type = returnType, Name = "invoke", Modifiers = { IsPublic = true }, }; ce.Declarations.Add(me); return(ce); }
public static JInvocationExpression Typeof(JMemberExpression me) { return(new JInvocationExpression { Member = new JMemberExpression { Name = "typeof" }, Arguments = new List <JExpression> { me } }); }
public static JMemberExpression MemberOrSelf(this JMemberExpression member, string name) { if (name.IsNullOrEmpty()) { return(member); } if (member == null) { return(Member(name)); } return(member.Member(name)); }
public static JMemberExpression Members(string members) { JMemberExpression node = null; foreach (var token in members.Split('.')) { node = new JMemberExpression { PreviousMember = node }; node.Name = token; } return(node); }
public static JVariableDeclarationExpression Var(string variableName, JMemberExpression type, JExpression initializer = null) { if (type == null) { throw new Exception(); } return(new JVariableDeclarationExpression { Type = type, Declarators = new List <JVariableDeclarator> { new JVariableDeclarator { Name = variableName, Initializer = initializer } } }); }
public void VisitMemberExpression(JMemberExpression node) { if (node.PreviousMember != null) { Visit(node.PreviousMember); Write("."); } if (node.Name != null) { Write(node.Name); if (node.GenericArguments.IsNotNullOrEmpty()) { Write("<"); VisitEachJoin(node.GenericArguments, () => Write(",")); Write(">"); } } else if (node.Member != null) { Visit(node.Member); } if (node.TypeRef is ITypeParameter && !IsInTypeParameter && IsInReturnTypeParametersDeclaration) { IsInTypeParameter = true; var tr = (ITypeParameter)node.TypeRef; if (tr.EffectiveInterfaceSet.IsNotNullOrEmpty()) { Write(" extends "); VisitEachJoin(tr.EffectiveInterfaceSet.Select(t => t.JAccess()).ToList(), WriteComma); } IsInTypeParameter = false; } if (node.IsArray) { Write("[]"); } }
public static JCastExpression Cast(JExpression exp, JMemberExpression type) { return(new JCastExpression { Expression = exp, Type = type }); }
public static JMemberExpression AddGenericArg(this JMemberExpression exp, JMemberExpression arg) { exp.GenericArguments.Add(arg); return(exp); }
public static JMemberExpression Member(this JExpression member, JMemberExpression exp) { exp.PreviousMember = member; return(exp); }
public static JNewAnonymousClassExpression CreateFunc(JMemberExpression retType, JBlock body, NProject2 project) { return(CreateActionOrFunc(body, null, retType, project)); }
public static JNewAnonymousClassExpression CreateActionOrFunc(JBlock body, JParameterDeclaration[] prms, JMemberExpression retType, NProject2 project) { if (prms == null) { prms = new JParameterDeclaration[0]; } var argTypes = prms.Select(t => t.Type).ToList(); var delTypeName = "system.Action"; var netTypeName = "System.Action"; if (retType != null) { delTypeName = "system.Func"; netTypeName = "System.Func"; argTypes.Add(retType); } if (prms.Length > 0) { delTypeName += prms.Length; } var delType = CreateTypeRef(delTypeName, argTypes.ToArray()); if (argTypes.Count > 0) { netTypeName += "`" + argTypes.Count; } delType.TypeRef = project.FindType(netTypeName); return(CreateDelegate(delType, prms, retType, body)); }
public static JMemberExpression RemoveGenericArgs(this JMemberExpression exp) { exp.GenericArguments.Clear(); return(exp); }