python-javalang抽象语法树

1 基本使用

相关demo

GitHub - c2nes/javalang: Pure Python Java parser and tools

 迭代Node

 for path, node in tree:
     print path, node

输出

() CompilationUnit
(CompilationUnit,) PackageDeclaration
(CompilationUnit, [ClassDeclaration]) ClassDeclaration

按类型过滤

这里过滤类相关声明ClassDeclaration,得到结果与上面(CompilationUnit, [ClassDeclaration]) ClassDeclaration 一致

也可以只获取node信息

 >>> for path, node in tree.filter(javalang.tree.ClassDeclaration):
...     print(node)
...
ClassDeclaration(annotations=[], body=[], documentation=None, extends=None, implements=None, modifiers=set(), name=Test, type_parameters=None)

然后从node信息中选择我们想要的,如node.name

>>> for path, node in tree.filter(javalang.tree.ClassDeclaration):
...     print(node.name)
...
Test

2 查找符合条件的类

查询我们想查询的信息,如MethodDeclaration

for path, node in tree:
    if isinstance(node, MethodDeclaration):
        print(node)

方法调用:MethodInvocation

for path, node in tree:
    if isinstance(node, MethodInvocation):
        print(node)

 

传入ClassDeclaration.methods,查看里面的方法调用

def getfitmethods2(method_node):
        # 判断是否是MethodDeclaration对象
        if isinstance(method_node,MethodDeclaration):
            print(method_node.name)
            # 找方法调用
            for path, node in method_node:
                if isinstance(node, MethodInvocation):
                    print("-----"+node.member)

参考:

python 解析 java文件 --- javalang 模块_high_tea的博客-CSDN博客_python解析java文件python 的 javalang 库【2】_Attribute47的博客-CSDN博客

python 的 javalang 库【1】_Attribute47的博客-CSDN博客_python的javalang

 python 解析 java文件 --- javalang 模块 - PythonTechWorld

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值