MemberDeclarationSyntax XppCreateMethod(XP.IXPPEntityContext context, SyntaxToken idName, SyntaxList <AttributeListSyntax> attributes, SyntaxList <SyntaxToken> modifiers, ParameterListSyntax parameters, TypeSyntax returnType) { var body = context.Statements.Get <BlockSyntax>(); var oldbody = body; ImplementClipperAndPSZ(context, ref attributes, ref parameters, ref body, ref returnType); if (body != oldbody) { context.Statements.Put(body); } if (context.Info.IsSync) { body = MakeBlock(MakeLock(GenerateSelf(), body)); } if (context.Info.IsProperty) { } MemberDeclarationSyntax m = _syntaxFactory.MethodDeclaration( attributeLists: attributes, modifiers: modifiers, returnType: returnType, explicitInterfaceSpecifier: null, identifier: idName, typeParameterList: null, parameterList: parameters, constraintClauses: null, body: body, expressionBody: null, // TODO: (grammar) expressionBody methods semicolonToken: SyntaxFactory.MakeToken(SyntaxKind.SemicolonToken)); return(m); }
private void implementConstructor([NotNull] XP.IXPPEntityContext context) { var idName = context.ShortName; var classCtor = XSharpString.Compare(idName, XSharpIntrinsicNames.InitClassMethod) == 0; // find method in the declarations and find the visibility var mods = decodeXppMemberModifiers(context.Info.Visibility, classCtor, classCtor ? null : context.Mods?._Tokens); if (mods.Any((int)SyntaxKind.StaticKeyword)) { context.Data.HasClipperCallingConvention = false; } var ctor = createConstructor(context, mods, context.Atts, context.Parameters, context.Statements, (XSharpParserRuleContext)context); if (ctor != null) { context.Put(ctor); } else { context.Statements = null; } }