我正在使用 JavaParser(开源)来解析以下代码。
package testfiles.simple.tricky.before;
import testfiles.simple.before.InnerClassSample;
public class InnerClassReference {
public void ref(InnerClassSample.MyInnerClass myInnerClass, java.util.List<Long> list) {
int i = 0;
}
}
在名为的 methodDeclaration 节点下ref
,我得到参数节点层次结构如下:
// myInnerClass
Parameter
ClassOrInterfaceType:
ClassOrInterfaceType:
SimpleName: InnerClassSample
SimpleName: MyInnerClass
SimpleName: myInnerClass
// list
Parameter
ClassOrInterfaceType:
ClassOrInterfaceType:
ClassOrInterfaceType:
SimpleName: java
SimpleName: util
SimpleName: List
SimpleName: list
我需要找到每个参数的完全限定名称。所以myInnerClass
我会得到testfiles.simple.before.InnerClassSample$MyInnerClass
,因为list
它会java.util.List
。
我知道通常人们会编写List<Long>
并放置一个 import 语句而不是write java.util.List<Long>
,但是,我需要处理将 FQN 写入参数的情况。
现在我的问题是,有没有一种方法可以静态区分这种解析树是嵌套类的类型,还是仅仅是类的完全限定名?
我曾考虑通过检查 SimpleName 是否以小写字母开头(这意味着它是一个包名称)来进行区分,但这只是一个约定,因此我们不能安全地假设开发人员总是以小写字母开头的包名称字母,或以大写字母开头的类名,因此我认为这不是一个好方法。
任何关于此事的想法或见解将不胜感激。