JavaIdentifierApp.go 1.6 KB
Newer Older
P
Phodal HUANG 已提交
1
package identifier
P
Phodal HUANG 已提交
2 3

import (
P
Phodal Huang 已提交
4 5
	"coca/src/adapter/models"
	parser2 "coca/src/language/java"
P
Phodal HUANG 已提交
6 7 8 9 10 11 12
	"fmt"
	"github.com/antlr/antlr4/runtime/Go/antlr"
	"os"
	"path/filepath"
	"strings"
)

P
Phodal Huang 已提交
13
var nodeInfos []models.JsonIdentifier = nil
P
Phodal HUANG 已提交
14

P
Phodal HUANG 已提交
15
type JavaIdentifierApp struct {
P
Phodal HUANG 已提交
16 17
}

P
Phodal Huang 已提交
18
func (j *JavaIdentifierApp) AnalysisPath(codeDir string) []models.JsonIdentifier {
P
Phodal HUANG 已提交
19
	nodeInfos = nil
P
Phodal HUANG 已提交
20 21 22
	files := (*JavaIdentifierApp)(nil).javaFiles(codeDir)
	for index := range files {
		file := files[index]
P
Phodal Huang 已提交
23
		node := models.NewJsonIdentifier()
P
Phodal HUANG 已提交
24 25 26 27 28 29 30

		displayName := filepath.Base(file)
		fmt.Println("Start parse java call: " + displayName)

		parser := (*JavaIdentifierApp)(nil).processFile(file)
		context := parser.CompilationUnit()

P
Phodal Huang 已提交
31
		clzInfo := models.NewJIdentifier()
P
Phodal HUANG 已提交
32
		listener := new(JavaIdentifierListener)
P
Phodal HUANG 已提交
33
		listener.InitNode(clzInfo)
P
Phodal HUANG 已提交
34 35

		antlr.NewParseTreeWalker().Walk(listener, context)
P
Phodal HUANG 已提交
36

P
Phodal HUANG 已提交
37
		if clzInfo.Name != "" {
P
Phodal Huang 已提交
38
			node = &models.JsonIdentifier{clzInfo.Pkg, clzInfo.Name, clzInfo.Type, clzInfo.GetMethods()}
P
Phodal HUANG 已提交
39
			nodeInfos = append(nodeInfos, *node)
P
Phodal HUANG 已提交
40
		}
P
Phodal HUANG 已提交
41
	}
P
Phodal HUANG 已提交
42 43

	return nodeInfos
P
Phodal HUANG 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56
}

func (j *JavaIdentifierApp) javaFiles(codeDir string) []string {
	files := make([]string, 0)
	_ = filepath.Walk(codeDir, func(path string, fi os.FileInfo, err error) error {
		if strings.HasSuffix(path, ".java") && !strings.Contains(path, "Test.java") {
			files = append(files, path)
		}
		return nil
	})
	return files
}

P
Phodal Huang 已提交
57
func (j *JavaIdentifierApp) processFile(path string) *parser2.JavaParser {
P
Phodal HUANG 已提交
58
	is, _ := antlr.NewFileStream(path)
P
Phodal Huang 已提交
59
	lexer := parser2.NewJavaLexer(is)
P
Phodal HUANG 已提交
60
	stream := antlr.NewCommonTokenStream(lexer, 0);
P
Phodal Huang 已提交
61
	parser := parser2.NewJavaParser(stream)
P
Phodal HUANG 已提交
62 63
	return parser
}