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

fix: fix one class issue in ident

上级 29f9bb65
......@@ -24,16 +24,12 @@ func (j *JavaIdentifierApp) AnalysisPath(codeDir string) []models.JIdentifier {
parser := support.ProcessFile(file)
context := parser.CompilationUnit()
clzInfo := models.NewJIdentifier()
listener := NewJavaIdentifierListener()
listener.InitNode(clzInfo)
antlr.NewParseTreeWalker().Walk(listener, context)
if clzInfo.ClassName != "" {
clzInfo.Methods = clzInfo.GetMethods()
nodeInfos = append(nodeInfos, *clzInfo)
}
identifiers := listener.getNodes()
nodeInfos = append(nodeInfos, identifiers...)
}
return nodeInfos
......
......@@ -9,7 +9,7 @@ import (
func TestJavaIdentifierApp_AnalysisPath(t *testing.T) {
g := NewGomegaWithT(t)
identApp := new(JavaIdentifierApp)
identApp := NewJavaIdentifierApp()
identifiers := identApp.AnalysisPath("../../../_fixtures/call")
g.Expect(len(identifiers)).To(Equal(1))
......@@ -22,9 +22,10 @@ func TestJavaIdentifierApp_AnalysisPath(t *testing.T) {
func TestPolymorphism_Method(t *testing.T) {
g := NewGomegaWithT(t)
identApp := new(JavaIdentifierApp)
identApp := NewJavaIdentifierApp()
identifiers := identApp.AnalysisPath("../../../_fixtures/suggest/polymorphism")
fmt.Println(identifiers)
g.Expect(len(identifiers)).To(Equal(1))
g.Expect(identifiers[0].ClassName).To(Equal("Overload"))
g.Expect(len(identifiers[0].Methods)).To(Equal(3))
......@@ -36,7 +37,7 @@ func TestPolymorphism_Constructor(t *testing.T) {
identApp := new(JavaIdentifierApp)
identifiers := identApp.AnalysisPath("../../../_fixtures/suggest/factory")
fmt.Println(identifiers)
g.Expect(len(identifiers)).To(Equal(1))
g.Expect(identifiers[0].ClassName).To(Equal("Bee"))
g.Expect(len(identifiers)).To(Equal(2))
g.Expect(identifiers[0].ClassName).To(Equal("Insect"))
g.Expect(identifiers[1].ClassName).To(Equal("Bee"))
}
\ No newline at end of file
......@@ -7,7 +7,8 @@ import (
"strings"
)
var node *models.JIdentifier
var currentNode *models.JIdentifier
var nodes []models.JIdentifier
var currentMethod models.JMethod
var hasEnterClass = false
......@@ -15,7 +16,9 @@ var hasEnterMethod = false
var imports []string
func NewJavaIdentifierListener() *JavaIdentifierListener {
hasEnterClass = false
nodes = nil
currentNode = models.NewJIdentifier()
currentMethod = models.NewJMethod()
return &JavaIdentifierListener{}
}
......@@ -29,19 +32,19 @@ func (s *JavaIdentifierListener) EnterImportDeclaration(ctx *parser.ImportDeclar
}
func (s *JavaIdentifierListener) EnterPackageDeclaration(ctx *parser.PackageDeclarationContext) {
node.Package = ctx.QualifiedName().GetText()
currentNode.Package = ctx.QualifiedName().GetText()
}
func (s *JavaIdentifierListener) EnterClassDeclaration(ctx *parser.ClassDeclarationContext) {
hasEnterClass = true
node.ClassType = "Class"
currentNode.ClassType = "Class"
if ctx.IDENTIFIER() != nil {
node.ClassName = ctx.IDENTIFIER().GetText()
currentNode.ClassName = ctx.IDENTIFIER().GetText()
}
if ctx.EXTENDS() != nil {
node.ExtendsName = ctx.TypeType().GetText()
currentNode.ExtendsName = ctx.TypeType().GetText()
}
if ctx.IMPLEMENTS() != nil {
......@@ -50,7 +53,7 @@ func (s *JavaIdentifierListener) EnterClassDeclaration(ctx *parser.ClassDeclarat
typeText := typ.GetText()
for _, imp := range imports {
if strings.HasSuffix(imp, "."+typeText) {
node.Implements = append(node.Implements, imp)
currentNode.Implements = append(currentNode.Implements, imp)
}
}
}
......@@ -59,6 +62,11 @@ func (s *JavaIdentifierListener) EnterClassDeclaration(ctx *parser.ClassDeclarat
func (s *JavaIdentifierListener) ExitClassBody(ctx *parser.ClassBodyContext) {
hasEnterClass = false
if currentNode.ClassName != "" {
currentNode.Methods = currentNode.GetMethods()
nodes = append(nodes, *currentNode)
}
currentNode = models.NewJIdentifier()
}
func (s *JavaIdentifierListener) EnterInterfaceBodyDeclaration(ctx *parser.InterfaceBodyDeclarationContext) {
......@@ -98,7 +106,7 @@ func (s *JavaIdentifierListener) EnterInterfaceMethodDeclaration(ctx *parser.Int
func (s *JavaIdentifierListener) ExitInterfaceMethodDeclaration(ctx *parser.InterfaceMethodDeclarationContext) {
hasEnterMethod = false
node.AddMethod(currentMethod)
currentNode.AddMethod(currentMethod)
currentMethod = models.NewJMethod()
}
......@@ -135,7 +143,7 @@ func (s *JavaIdentifierListener) EnterMethodDeclaration(ctx *parser.MethodDeclar
func (s *JavaIdentifierListener) ExitMethodDeclaration(ctx *parser.MethodDeclarationContext) {
hasEnterMethod = false
node.AddMethod(currentMethod)
currentNode.AddMethod(currentMethod)
currentMethod = models.NewJMethod()
}
......@@ -151,7 +159,7 @@ func (s *JavaIdentifierListener) EnterAnnotation(ctx *parser.AnnotationContext)
currentMethod.Annotations = append(currentMethod.Annotations, annotation)
} else {
annotation := buildAnnotation(ctx)
node.Annotations = append(node.Annotations, annotation)
currentNode.Annotations = append(currentNode.Annotations, annotation)
}
}
......@@ -176,10 +184,10 @@ func buildAnnotation(ctx *parser.AnnotationContext) models.Annotation {
func (s *JavaIdentifierListener) EnterInterfaceDeclaration(ctx *parser.InterfaceDeclarationContext) {
hasEnterClass = true
node.ClassType = "Interface"
node.ClassName = ctx.IDENTIFIER().GetText()
currentNode.ClassType = "Interface"
currentNode.ClassName = ctx.IDENTIFIER().GetText()
}
func (s *JavaIdentifierListener) InitNode(identifier *models.JIdentifier) {
node = identifier
func (s *JavaIdentifierListener) getNodes() []models.JIdentifier {
return nodes
}
......@@ -1624,7 +1624,7 @@ func (p *SqlParser) Error() (localctx IErrorContext) {
localctx.(*ErrorContext)._UNEXPECTED_CHAR = _m
}
throw new RuntimeException("UNEXPECTED_CHAR=" + (func() string { if localctx.(*ErrorContext).Get_UNEXPECTED_CHAR() == nil { return "" } else { return localctx.(*ErrorContext).Get_UNEXPECTED_CHAR().GetText() }}()));
//throw new RuntimeException("UNEXPECTED_CHAR=" + (func() string { if localctx.(*ErrorContext).Get_UNEXPECTED_CHAR() == nil { return "" } else { return localctx.(*ErrorContext).Get_UNEXPECTED_CHAR().GetText() }}()));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册