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日