是否有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插件。这是否存在,可以免费使用/下载?
编辑:如果存在从一个和一个源文件中提取类名,属性名和方法名的东西,这是一个很好的第二个选项。我可以从那里写出额外的逻辑。
答案 0 :(得分:0)
我创建了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
你应该追求的是什么。