未验证 提交 bd15504d 编写于 作者: P Phodal Huang

feat: add basic api recogize

上级 e03bfbaa
package call
import (
"fmt"
"github.com/antlr/antlr4/runtime/Go/antlr"
. "github.com/phodal/coca/adapter/models"
. "github.com/phodal/coca/language/java"
......@@ -21,6 +22,9 @@ var localVars = make(map[string]string)
var formalParameters = make(map[string]string)
var currentClzExtends = ""
var hasEnterClass = false
var isSpringRestController = false
func NewJavaCallListener() *JavaCallListener {
currentClz = ""
currentPkg = ""
......@@ -47,6 +51,7 @@ func (s *JavaCallListener) EnterImportDeclaration(ctx *ImportDeclarationContext)
}
func (s *JavaCallListener) EnterClassDeclaration(ctx *ClassDeclarationContext) {
hasEnterClass = true
currentType = "Class"
currentClz = ctx.IDENTIFIER().GetText()
......@@ -105,7 +110,7 @@ func (s *JavaCallListener) EnterMethodDeclaration(ctx *MethodDeclarationContext)
methods = append(methods, *method)
if ctx.FormalParameters() != nil {
if ctx.FormalParameters().GetChild(0) == nil {
if ctx.FormalParameters().GetChild(0) == nil || ctx.FormalParameters().GetText() == "()" || ctx.FormalParameters().GetChild(1) == nil {
return
}
......@@ -167,6 +172,64 @@ func (s *JavaCallListener) EnterMethodCall(ctx *MethodCallContext) {
}
}
var baseApiUrlName = ""
type RestApi struct {
Uri string
Method string
ResponseStatus string
Body []string
}
func (s *JavaCallListener) EnterAnnotation(ctx *AnnotationContext) {
annotationName := ctx.QualifiedName().GetText()
if annotationName == "RestController" {
isSpringRestController = true
}
if !hasEnterClass {
if annotationName == "RequestMapping" {
if ctx.ElementValuePairs() != nil {
firstPair := ctx.ElementValuePairs().GetChild(0).(*ElementValuePairContext)
if firstPair.IDENTIFIER().GetText() == "value" {
baseApiUrlName = firstPair.ElementValue().GetText()
}
} else {
baseApiUrlName = "/"
}
}
}
if !(annotationName == "GetMapping" || annotationName == "PutMapping" || annotationName == "PostMapping" || annotationName == "DeleteMapping") {
return
}
uri := ""
if ctx.ElementValuePairs() != nil {
firstPair := ctx.ElementValuePairs().GetChild(0).(*ElementValuePairContext)
if firstPair.IDENTIFIER().GetText() == "value" {
uri = baseApiUrlName + firstPair.ElementValue().GetText()
}
}
restApi := &RestApi{uri, "", "", nil}
if hasEnterClass {
switch annotationName {
case "GetMapping":
restApi.Method = "GET"
case "PutMapping":
restApi.Method = "PUT"
case "PostMapping":
restApi.Method = "POST"
case "DeleteMapping":
restApi.Method = "DELETE"
}
}
fmt.Println(restApi)
}
func (s *JavaCallListener) EnterExpression(ctx *ExpressionContext) {
// lambda BlogPO::of
if ctx.COLONCOLON() != nil {
......
package com.phodal.pholedge.book;
import com.phodal.pholedge.book.model.BookRepresentaion;
import com.phodal.pholedge.book.model.command.CreateBookCommand;
import com.phodal.pholedge.book.model.command.UpdateBookCommand;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import static com.google.common.collect.ImmutableSortedMap.of;
@RestController
@RequestMapping(value = "/books")
public class BookController {
private final BookService applicationService;
public BookController(BookService applicationService) {
this.applicationService = applicationService;
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Map<String, String> createBook(@RequestBody @Valid CreateBookCommand command) {
return of("id", applicationService.createBook(command));
}
@PutMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
public BookRepresentaion updateBook(@PathVariable(name = "id") String id, @RequestBody @Valid UpdateBookCommand command) {
return applicationService.updateBook(id, command);
}
@GetMapping("/")
public List<BookRepresentaion> getBookList() {
return applicationService.getBooksLists();
}
@GetMapping("/{id}")
public BookRepresentaion getBookById(@PathVariable(name = "id") String id) {
return applicationService.getBookById(id);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册