解析java源文件

尝试从java源文件中解析出类、方法、属性等信息,但下面的代码没有完全实现。

Sub parseJava() Dim package_name as String 'read a file Documents.Open FileName:="f:\CommandCm.java", ConfirmConversions:=False, ReadOnly:=True paraNo = ActiveDocument.Paragraphs.Count For lineNo = 1 To paraNo Set curParaWords = ActiveDocument.Paragraphs(lineNo).Range.Words Dim strCurPara as String strCurPara = ActiveDocument.Paragraphs(lineNo).Range.Text If InStr(strCurPara, "package")=1 Then '包名是package后、分号前的部分 tmpStr = Right(strCurPara,Len(strCurPara)-Len("package")-1) package_name = Left(tmpStr, Len(tmpStr)-2) End If If InStr(strCurPara, "public class")=1 Then '类名是这一行的第三个单词,且不含末尾空格 class_name = RTrim(curParaWords(3).Text) End If If InStr(strCurPara, "public interface")=1 Then '接口名是这一行的第三个单词,且不含末尾空格 class_name = RTrim(curParaWords(3).Text) End If Select Case curParaWords(2).Text Case "public"

Case "private" Case "protected" Case Else End Case If curParaWords(2)="public" Then '接口名是这一行的第三个单词,且不含末尾空格 class_name = RTrim(ActiveDocument.Paragraphs(lineNo).Range.Words(3).Text) End If Next lineNo ActiveDocument.Close End Sub

下面是业务逻辑:

数据结构:

类相关数据表ClassInfo(Map)

key: name, description, class_name, package, extends, interface;

属性数据表PropInfo(List

方法数据表MethodInfo(List

文本格式约定:

顶格、package起首代码行为package声明行;

顶格、public class起首的代码行是类声明行;

顶格、 public interface起首的代码行是接口声明行;

一个tab后跟public、private、protected是方法或者属性

有左括号的是方法, 左括号前单词是方法名,方法名前是返回值的数据类型;

无左括号 的是 属性,等号左边单词是属性名,若无等号分号前单词是属性名,若都没有输出一条 “文件名:行号:异常属性/方法,手工提取” 提示;

一个tab后跟其他字母 输出一条“文件名:行号:异常属性/方法,手工提取”提示;

一个tab后跟非字母符号(如/*是注释,@是编译标志)略过;

流程:

用户输入目标目录

将文件名保存在ClassInfo.name和class_name中;

加载该目录下所有java文件, 对于一个java文件:

第一次文本逐行读取:提取除方法/属性说明外所有信息;

第二次文本逐行读取:寻找以“* 方法名”开始的行,作为方法说明,放入对应的方法Map中;

posted on 2014-03-18 08:10  leechau  阅读(405)  评论(0编辑  收藏  举报

导航