在 JavaParser 中找到 Class 个超级关键字的名称
Find Class name of Super Keyword in JavaParser
我正在开发一个基于 JavaParser 的 Java 应用程序。我不知道如何获取方法主体中使用的 超级关键字 的 class 名称。例如,我需要知道下面代码中的 Super 关键字是指 class A.
class A {
public void bar(){...}
}
class B extends A {}
class C extends B {
void foo(){
super.bar() // I want to find that the super keyword is referred to Class A.
}
}
我检查了 JavaParser 提供的这些函数(1、2 和 3),但其中 none 有效,所有 return 为空。
MethodCallExpr methodCallExpr = ...
Optional<Expression> scope = methodCallExpr.getScope();
SuperExpr superExp = scope.get().asSuperExpr();
1. superExp.findAll(ClassOrInterfaceDeclaration.class); and
2. superExp.getTypeName();
3. superExp.getClassExpr(); //I do not know why this method also returns null
我找到了正确的方法。
ResolvedType resolvedType = superExp.calculateResolvedType();
如果您还将 JavaSymbolSolver 添加到解析器配置中,则此方法可以正常工作。 JavaSymbolSolver 是解析引用和查找节点之间关系所必需的。
TypeSolver reflectionTypeSolver = new ReflectionTypeSolver();
TypeSolver javaParserTypeSolver = new JavaParserTypeSolver(projectSourceDir);
CombinedTypeSolver combinedSolver = new CombinedTypeSolver();
combinedSolver.add(reflectionTypeSolver);
combinedSolver.add(javaParserTypeSolver);
ParserConfiguration parserConfiguration = new ParserConfiguration()
.setSymbolResolver(new JavaSymbolSolver(combinedSolver));
SourceRoot sourceRoot = new SourceRoot(projectSourceDir.toPath());
sourceRoot.setParserConfiguration(parserConfiguration);
我正在开发一个基于 JavaParser 的 Java 应用程序。我不知道如何获取方法主体中使用的 超级关键字 的 class 名称。例如,我需要知道下面代码中的 Super 关键字是指 class A.
class A {
public void bar(){...}
}
class B extends A {}
class C extends B {
void foo(){
super.bar() // I want to find that the super keyword is referred to Class A.
}
}
我检查了 JavaParser 提供的这些函数(1、2 和 3),但其中 none 有效,所有 return 为空。
MethodCallExpr methodCallExpr = ...
Optional<Expression> scope = methodCallExpr.getScope();
SuperExpr superExp = scope.get().asSuperExpr();
1. superExp.findAll(ClassOrInterfaceDeclaration.class); and
2. superExp.getTypeName();
3. superExp.getClassExpr(); //I do not know why this method also returns null
我找到了正确的方法。
ResolvedType resolvedType = superExp.calculateResolvedType();
如果您还将 JavaSymbolSolver 添加到解析器配置中,则此方法可以正常工作。 JavaSymbolSolver 是解析引用和查找节点之间关系所必需的。
TypeSolver reflectionTypeSolver = new ReflectionTypeSolver();
TypeSolver javaParserTypeSolver = new JavaParserTypeSolver(projectSourceDir);
CombinedTypeSolver combinedSolver = new CombinedTypeSolver();
combinedSolver.add(reflectionTypeSolver);
combinedSolver.add(javaParserTypeSolver);
ParserConfiguration parserConfiguration = new ParserConfiguration()
.setSymbolResolver(new JavaSymbolSolver(combinedSolver));
SourceRoot sourceRoot = new SourceRoot(projectSourceDir.toPath());
sourceRoot.setParserConfiguration(parserConfiguration);