首页>代码>java类方法解析器>/java类方法解析器/codereader3/src/com/wgtgt/CodeReader.java
package com.wgtgt;

import java.util.ArrayList;

import qq.q757225051.utils.FileUtils;
import qq.q757225051.utils.StringUtils;

public class CodeReader {
	private String className=null;
	private String fanxing=null;
	private ArrayList<Method>methodList=new ArrayList<Method>();

	public void parse(String fileName) {
		char[]chs=FileUtils.readToChars(fileName);
		boolean clazzInter=false;
		for (int i = 0; i < chs.length; i++) {
			if(!clazzInter){
				if(isClass(chs,i)){
					int k=i+6;
					int size=0;
					while(chs[k++]!='{'){
						if(size++>50){
							throw new RuntimeException("--类名过长--");
						}
					}
					String calssFullName=new String(substring(chs,i+6,k-1));
					calssFullName=calssFullName.trim();
					int index=calssFullName.indexOf('<');
					if(index==-1){
						className=calssFullName;//
					}else{
						className=StringUtils.getLeftFromLeft(calssFullName, "<");
						fanxing=StringUtils.getMid(calssFullName, "<", ">");
					}
					i=k-1;
					clazzInter=true;
				}
			}else{
				if(Character.isJavaIdentifierStart(chs[i])){
					int k=1;
					int m=0;
					if(Character.isWhitespace(chs[i-1])||chs[i-1]==']'||chs[i-1]=='>'){//是空白
						while(Character.isJavaIdentifierPart(chs[i+k++])){

						}
						k--;
						m=k;
						while(Character.isWhitespace(chs[i+k++])){
							
						}
						k--;
						int left=-1;
						int right=-1;
						if(chs[i+k]=='('){
							left=k;
							while(chs[i+ ++k]!=')'){
								
							}
							right=k;
							String methodName=substring(chs,i,i+m);
							String returnType=getFisrtWord(chs,i);
							String paramListFullName=substring(chs,i+left+1,i+right+1-1);
							if("".equals(returnType)||"new".equals(returnType)||"return".equals(returnType)){

							}else{
								MethodUtil.add(methodList,methodName,returnType,paramListFullName);
							}
						}
					}
				}
			}
			
		}
	}
	private static String getFisrtWord(char[] chs, int i) {
		boolean isFirstWhitespace=true;
		StringBuilder sb = new StringBuilder();
		while(i>0&&(Character.isJavaIdentifierPart(chs[--i])||Character.isWhitespace(chs[i])||chs[i]==']'||chs[i]=='['||chs[i]=='<'||chs[i]=='>')){
			if(Character.isWhitespace(chs[i])){
				if(isFirstWhitespace){
					continue;
				}else{
					break;
				}
			}else{
				sb.insert(0,chs[i]);
				isFirstWhitespace=false;
			}
		}
		String result=sb.toString().trim();
		if(result.length()>0){
			if(Character.isJavaIdentifierStart(result.charAt(0))){
				return result;
			}
		}
		return "";
	}

	private static String substring(char[] chs, int start, int end) {
		StringBuilder sb = new StringBuilder();
		for (int i = start; i < end; i++) {
			sb.append(chs[i]);
		}
		
		return sb.toString();
	}
//	private static String substring(char[] chs, int start, int end) {
//		StringBuilder sb = new StringBuilder();
//		for (int i = start; i < (end<chs.length?end:chs.length); i++) {
//			sb.append(chs[i]);
//		}
//		
//		return sb.toString();
//	}
	private static boolean isClass(char[] chs, int i) {//不能是点
		if(i>chs.length-6){
			return false;
		}
		if(chs[i]=='c'&&chs[i+1]=='l'&&chs[i+2]=='a'&&chs[i+3]=='s'&&chs[i+4]=='s'&&chs[i+5]==' '){
			return true;
		}
		return false;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public String getFanxing() {
		return fanxing;
	}

	public void setFanxing(String fanxing) {
		this.fanxing = fanxing;
	}

	public ArrayList<Method> getMethodList() {
		return methodList;
	}

	public void setMethodList(ArrayList<Method> methodList) {
		this.methodList = methodList;
	}

}

最近下载更多
j597302044  LV1 2021年5月14日
b012369874  LV2 2020年5月23日
htbbbzhs  LV1 2018年3月20日
878102433  LV2 2017年9月13日
w8692414  LV2 2017年8月7日
codesheng  LV2 2017年6月27日
luffy018  LV2 2017年5月15日
www0_1com  LV3 2017年5月10日
squeer  LV1 2016年11月29日
难忘vs回忆  LV2 2016年11月15日
最近浏览更多
wuziayng1232  LV10 2023年2月20日
2812151886  LV1 2022年1月10日
darkerhealerhuji  LV2 2021年11月12日
b012369874  LV2 2020年5月23日
0312wangchen  LV26 2019年9月14日
sdtzwss  LV12 2019年1月28日
lw19900921  LV25 2018年9月19日
jobpan  LV1 2018年9月4日
zuoyina 2018年8月31日
暂无贡献等级
kenpfang  LV18 2018年4月11日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友