有没有一个用于Netbeans的插件或解析器可以从我的Java源代码中创建树结构(或者让我轻松地提取类名、属性和方法)?
编辑:我需要这些名字用于编程目的,而不仅仅是为了得到它们。我需要在运行时将它们返回到我的程序中。
如果我有这个源代码(游戏):
class Main {
Terrain terrain;
TradingSystem currentSystem;
City city;
public static void main(String[] args) {
}
}
class Terrain {
}
class City {
House tavern;
}
class TradingSystem {
Bank cityBank;
Trader npc1;
}
然后我需要一个可以创建类似的解析器
----------Main-------------------
| | |
Terrain City --TradingSystem---
| | |
House Bank Trader
来自我的源代码。我需要一条从Main到分行的路径,比如这个Main->TradingSystem->Bank,或者这个Main->City->House。
我需要能够提取
- 类名称
- 方法名称
- 属性名称
我需要它作为我正在创建的Netbeans插件。这是否存在,免费使用/下载?
编辑:如果有东西可以从一个源文件中提取类名、属性名和方法名,这是一个很好的第二个选项。我可以从那里写出额外的逻辑。
我创建了3个简单的类:
public class A {
B b;
}
public class B {
C c;
public C getC() {
return c;
}
}
public class C {
}
还有一个稍微复杂的:
public class SO {
A a;
B b;
C c;
public static void fooMethod1() {
}
public String fooMethod2() {
return "";
}
private double fooMethod3() {
return 0.0;
}
}
我能够通过这个递归代码提取上面的信息:
public void getData(Map<String, Set<String>> fields, Map<String, Set<String>> methods, Class clazz)
{
if(clazz.isPrimitive())
{
return;
}
for(Method method : clazz.getDeclaredMethods())
{
if(!methods.containsKey(clazz.getName()))
{
Set<String> methodNames = new HashSet<>();
methodNames.add(method.getName());
methods.put(clazz.getName(), methodNames);
}
else
{
methods.get(clazz.getName()).add(method.getName());
}
}
for(Field field : clazz.getDeclaredFields())
{
if(!fields.containsKey(clazz.getName()))
{
Set<String> fieldNames = new HashSet<>();
fieldNames.add(field.getName());
fields.put(clazz.getName(), fieldNames);
}
else
{
fields.get(clazz.getName()).add(field.getName());
}
getData(fields, methods, field.getType());
}
}
I called the code above like so:
SO so = new SO();
Map<String, Set<String>> methods = new HashMap<>();
Map<String, Set<String>> fields = new HashMap<>();
so.getData(fields, methods, SO.class);
并打印出这样的结果:
for(String str : fields.keySet())
{
System.out.println(str);
for(String fieldName : fields.get(str))
{
System.out.print(fieldName + " ");
}
System.out.println();
}
System.out.println("-------------------------------");
for(String str : methods.keySet())
{
System.out.println(str);
for(String methodName : methods.get(str))
{
System.out.print(methodName + " ");
}
System.out.println();
}
结果是这样的:
so.B
c
so.SO
b c a
so.A
b
-------------------------------
so.B
getC
so.SO
fooMethod3 getData fooMethod1 fooMethod2 main
这应该是你想要的。