以下のコードで一応関数やメソッドの定義部分を抽出することができました。
void set(String code){
String[] str=code.split("\n");
Vector<String> codes=new Vector<String>();
for(int n=0;n<str.length;n++){
codes.add(str[n]);
}
Vector<Integer> tab=new Vector<Integer>();
DefaultMutableTreeNode top=null;
for(int n=0;n<codes.size();n++){
if(codes.get(n).indexOf("class")!=-1){
tab.add(codes.get(n).lastIndexOf("\t"));
top = new DefaultMutableTreeNode(codes.get(n).substring(0, codes.get(n).indexOf("{")));
list.put(codes.get(n).substring(0, codes.get(n).indexOf("{")), n);
codes.remove(n);
n--;
createNodes(tab, top, codes);
break;
}
else{
codes.remove(n);
n--;
}
}
tree=new JTree(top);
setViewportView(tree);
}
private void createNodes(Vector<Integer> tab,DefaultMutableTreeNode tree, Vector<String> codes) {
for(int n=0;n<codes.size();n++){
if(codes.get(n).indexOf("class")!=-1){
tab.add(codes.get(n).lastIndexOf("\t"));
DefaultMutableTreeNode subtree = new DefaultMutableTreeNode(codes.get(n).substring(codes.get(n).lastIndexOf("\t")+1, codes.get(n).indexOf("{")));
codes.remove(n);
n--;
createNodes(tab, subtree, codes);
list.put(codes.get(n).substring(0, codes.get(n).indexOf("{")), n);
tree.add(subtree);
}
else if(tab.size()>0 && codes.get(n).lastIndexOf("\t")==tab.get(tab.size()-1)){
tab.remove(tab.size()-1);
codes.remove(n);
n--;
}
else if(codes.get(n).indexOf("{")!=-1 && codes.get(n).indexOf("else")==-1 &&
codes.get(n).substring(codes.get(n).lastIndexOf("\t"), codes.get(n).indexOf("{")).indexOf(" ")!=-1){
DefaultMutableTreeNode subtree = new DefaultMutableTreeNode(codes.get(n).substring(codes.get(n).lastIndexOf("\t")+1, codes.get(n).indexOf("{")));
tree.add(subtree);
list.put(codes.get(n).substring(codes.get(n).lastIndexOf("\t")+1, codes.get(n).indexOf("{")), n);
codes.remove(n);
n--;
}
else{
codes.remove(n);
n--;
}
}
}
あとはとりあえず変数や配列の定義が抽出できればいいのですが、配列は何となくできそうですが変数のほうが見当もつきません。
もし何かアイデアがあれば教えてください。