func (parser *Parser) parseExceptions(method *ast.Method) { token := parser.peek() if token.Type != lexer.KeyThrows { return } parser.next() parser.expectf(lexer.TokenType('('), "method exception table must start with (") for { typeDecl := parser.expectTypeDecl("expect exception type") exception := method.NewException(typeDecl) start, end := Pos(typeDecl) _setNodePos(exception, start, end) token := parser.peek() if token.Type != lexer.TokenType(',') { break } parser.next() } parser.expectf(lexer.TokenType(')'), "method exception table must end with )") }
func (codegen *_CodeGen) methodRPC(method *ast.Method) string { var buff bytes.Buffer if codegen.notVoid(method.Return) { buff.WriteString(fmt.Sprintf("com.gsrpc.Future<%s> %s(", codegen.objTypeName(method.Return), methodName(method.Name()))) } else { if gslang.IsAsync(method) { buff.WriteString(fmt.Sprintf("void %s(", methodName(method.Name()))) } else { buff.WriteString(fmt.Sprintf("com.gsrpc.Future<Void> %s(", methodName(method.Name()))) } } for _, v := range method.Params { buff.WriteString(fmt.Sprintf("%s arg%d, ", codegen.typeName(v.Type), v.ID)) } if !gslang.IsAsync(method) { buff.WriteString("final int timeout)") } else { buff.WriteString(")") } return strings.Replace(buff.String(), ", )", ")", -1) }
func (codegen *_CodeGen) methodcall(method *ast.Method) string { var buff bytes.Buffer if !codegen.notVoid(method.Return) { buff.WriteString(fmt.Sprintf("this.service.%s(", methodName(method.Name()))) } else { buff.WriteString(fmt.Sprintf("%s ret = this.service.%s(", codegen.typeName(method.Return), methodName(method.Name()))) } for i := range method.Params { buff.WriteString(fmt.Sprintf("arg%d, ", i)) } buff.WriteString(");") return strings.Replace(buff.String(), ", );", ");", -1) }
func (codegen *_CodeGen) methodDecl(method *ast.Method) string { var stream bytes.Buffer stream.WriteString(fmt.Sprintf("- (%s)", codegen.typeName(method.Return))) if len(method.Params) > 0 { stream.WriteString(fmt.Sprintf(" %s:(%s)arg0", method.Name(), codegen.typeName(method.Params[0].Type))) for i := 1; i < len(method.Params); i++ { stream.WriteString(fmt.Sprintf(" withArg%d:(%s)arg%d", i, codegen.typeName(method.Params[i].Type), i)) } } else { stream.WriteString(fmt.Sprintf(" %s", method.Name())) } return stream.String() }
func (parser *Parser) parseParams(method *ast.Method) { parser.expectf(lexer.TokenType('('), "method param table must start with (") for { token := parser.peek() if token.Type == lexer.TokenType(')') { break } for parser.parseAnnotation() { } typeDecl := parser.expectTypeDecl("expect method param type declare") nameToken := parser.expectf(lexer.TokenID, "expect method param name") name := nameToken.Value.(string) param, ok := method.NewParam(name, typeDecl) parser.attachAnnotation(param) if !ok { parser.errorf(token.Start, "duplicate method(%s) param(%s)", method, name) } _setNodePos(param, token.Start, nameToken.End) token = parser.peek() if token.Type != lexer.TokenType(',') { break } parser.next() } parser.expectf(lexer.TokenType(')'), "method param table must end with )") }
func (codegen *_CodeGen) rpcMethodDecl(method *ast.Method) string { var stream bytes.Buffer if gslang.IsAsync(method) { stream.WriteString("- (NSError*)") } else { stream.WriteString("- (id<GSPromise>)") } if len(method.Params) > 0 { stream.WriteString(fmt.Sprintf(" %s:(%s) arg0 ", method.Name(), codegen.typeName(method.Params[0].Type))) for i := 1; i < len(method.Params); i++ { stream.WriteString(fmt.Sprintf(" withArg%d:(%s) arg%d ", i, codegen.typeName(method.Params[i].Type), i)) } } else { stream.WriteString(fmt.Sprintf(" %s", method.Name())) } return stream.String() }
func (codegen *_CodeGen) methodCall(method *ast.Method) string { var stream bytes.Buffer if codegen.notVoid(method.Return) { stream.WriteString(fmt.Sprintf("%s ret = ", codegen.typeName(method.Return))) } if len(method.Params) > 0 { stream.WriteString(fmt.Sprintf("[ _service %s: arg0 ", method.Name())) for i := 1; i < len(method.Params); i++ { stream.WriteString(fmt.Sprintf(" withArg%d:arg%d ", i, i)) } } else { stream.WriteString(fmt.Sprintf(" [ _service %s", method.Name())) } stream.WriteString("];") return stream.String() }