package com.test.springboot.springboot_first.sec;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ch.qos.logback.core.net.SyslogOutputStream;
public class GetApiTest implements GetUrl {
List
List
List
Integer ct = 0;
String pth = "";
@Override
public void getUrl() {
}
public void getJavas(File dir) {
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
getJavas(file);
} else {
if ((file + "").contains(".java")) {
list.add(file + "");
}
}
}
}
public List
getJavas(dir);
return list;
}
public String txt2String(String path) {
String fileContent = "";
try {
final File f = new File(path);
if (f.isFile() && f.exists()) {
final InputStreamReader read = new InputStreamReader(new FileInputStream(f), "utf-8");
final BufferedReader reader = new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
fileContent += line;
}
read.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return fileContent;
}
public List
if (!kd.contains("|")) {
kd = kd + "|";
}
String[] st = kd.split("\|");
for (String pa : list) {
String mm = txt2String(pa);
if (st.length == 1 && mm.contains(st[0].toString())) {
// System.out.println(pa);
list_filter.add(pa);
}
}
return list_filter;
}
public List
if (!kd.contains("|")) {
kd = kd + "|";
}
String[] st = kd.split("\|");
for (String pa : list) {
String mm = txt2String(pa);
if (st.length == 1 && mm.contains(st[0].toString())) {
lig.add(pa);
}
}
return lig;
}
public List
List
for (int i = 0; i < lt.size() - 1; i++) {
ltr.add(lt.get(i));
}
return ltr;
}
public List
List
for (String s : sg) {
li.add(s);
}
return li;
}
public String mergeList2String(List
String ms = "";
for (String s : lsg) {
ms = ms + s + sep;
}
return ms.substring(0, ms.length() - 1);
}
public List
Matcher matcher = Pattern.compile(pattern).matcher(inputStr);
if (matcher.find()) {
list_matched.add((matcher.start() + delta) + "|" + (matcher.end() + delta));
ct = matcher.end() + delta;
if (ct < total) {
inputStr = inputStr.substring(ct - delta, total - delta);
getIndexOf(inputStr, pattern, total, (matcher.end() + delta));
}
}
return list_matched;
}
public String remAllCtrls(String mstr) {
return mstr.replaceAll("t", " ").replace("n", " ").replaceAll("r", " ").replaceAll(" +", " ").trim();
}
public List
HashMap
for (String s : mt) {
Integer container = 1000000000;
for (String t : source) {
Integer dt = Integer.parseInt(s.split("\|")[0]) - Integer.parseInt(t.split("\|")[0]);
if (dt > 0 && dt < container) {
container = dt;
}
}
hp.put(s, "" + container);
}
Iterator
List
while (nt.hasNext()) {
Map.Entry
st.add(entry.getKey() + "=" + entry.getValue());
}
return st;
}
public static String watchMathedParts(String ct, List
return null;
}
public String getClassName(String pth) {
return pth.split("\\")[pth.split("\\").length - 1].split("\.")[0];
}
public void handleMap(HashMap
HashMap
for (String key : kk.keySet()) {
List
for (String s : kk.get(key)) {
String cts = new GetApiTest().remAllCtrls(new GetApiTest().txt2String(s));
String pdns = "(new){0,}[\s]{0,}" + key.split("\|")[3]
+ "[\s]{0,}((\()[\s]{0,}[^)]{0,}[\s]{0,}(\))[\s]{0,}){0,1}.[\s]{0,}"
+ key.split("\|")[0] + "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))";
System.out.println("mmmm"+pdns);
Integer totals = cts.length();
List
List
for (String ss : strss) {
String rString = cts.substring(Integer.parseInt(ss.split("\|")[0]),
Integer.parseInt(ss.split("\|")[1]));
String tpString = key.split("\|")[1];
if (Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(tpString).find() == true
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(rString).find() == true) {
strss_ft.add(ss);
}
if (tpString.split(",").length == rString.split(",").length
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(tpString).find() == false
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(rString).find() == false) {
strss_ft.add(ss);
}
String tps_match = "new[\s]{0,}" + key.split("\|")[3]
+ "[\s]{0,}((\()[\s]{0,}[^)]{0,}[\s]{0,}(\))[\s]{0,}){0,1}.[\s]{0,}"
+ key.split("\|")[0] + "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))";
Matcher tps = Pattern.compile(tps_match).matcher(rString);
if (tps.find() == true) {
// System.out.println("new: "+cts);
String after_p = tps.group().split("\." + key.split("\|")[0])[1];
if (Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(tpString).find() == true
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(after_p).find() == true) {
strss_ft.add(ss);
}
if (tpString.split(",").length == after_p.split(",").length
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(tpString).find() == false
&& Pattern.compile("\s{0,}(\()\s{0,}(\))\s{0,}").matcher(after_p)
.find() == false) {
strss_ft.add(ss);
}
}
if(cts.contains("test_8888")){
System.out.println("rstring is: "+rString);
System.out.println("ppp: "+"ma(\.)"+ key.split("\|")[0]+ "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))");}
if(Pattern.compile("ma(\.)"+ key.split("\|")[0]+ "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))").matcher(rString).find()){
System.out.println("mmm: "+cts);
System.out.println("zhengzebiaodashi: "+"(\.)"+ key.split("\|")[0]+ "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))");
// System.out.println("matched: "+Pattern.compile("(\.)"+ key.split("\|")[0]+ "[\s]{0,}(\()[\s]{0,}[^)]{0,}[\s]{0,}(\))").matcher(rString).group());
strss_ft.add(ss);
}
}
List
"[\s]{0,}(\()[\s\S]*?(\))[\s]{0,}(\{)[\s\S]*?(\})", cts.length(), 0);
List
if (strss_ft.size() != 0) {
List
List
System.out.println(
"迭代搜索的方法是【" + key.split("\|")[0] + key.split("\|")[1] + "】 查找到调用他的父方法是:【" + lgs + "】");
handleMap(trans2Map(lgs, pString, pa), pa);
} else {
}
}
}
}
public List
}
public List
List
List
String pString = list2.get(0);// 默认修改的只有一个java文件,获取下角标为0的值
String ct = remAllCtrls(txt2String(pString));// 对目标java文件进行合同空白符成一个空格以及去除末尾空格预处理,方便后续查找方法体
pdn = remAllCtrls(pdn);// 对变更的打代码片段也进行合并空白符处理
List
// 宽松匹配java类中的所有方法体,返回list
List
ct.length(), 0);
// 根据方法体位置list和搜索代码块位置list作差,返回搜索代码块所在的方法体
List
return listAddDetail(pString, lg, ct);
}
public HashMap
// 获取工程下所有的java文件
GetApiTest m2 = new GetApiTest();
HashMap
List
for (int i = 0; i < lgs.size(); i++) {
String pack_name = lgs.get(i).split("\|")[lgs.get(i).split("\|").length - 3];
String class_name = lgs.get(i).split("\|")[lgs.get(i).split("\|").length - 1];
String method_name = lgs.get(i).split("\|")[2];
String method_types = lgs.get(i).split("\|")[3];
// 遍历深加工后的lg,根据package路径去全局搜索含有该package路径的java文件,收集可能调用该方法的java文件
List
boolean bn = list3.remove(pString); // 除去含有该pacakg路径的本身的一个类
kk.put(method_name + "|" + method_types + "|" + pack_name + "|" + class_name, list3);// 使用map将数据存储起来,key=方法名|入参|pckage路径|类名,value=含有该package可能调用该方法的java绝对路径(除掉自身)
}
return kk;
}
public static void main(String[] args) {
// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
// HH:mm:ss");//设置日期格式
// System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
String pa = "C:\Users\Administrator\Desktop\test\springboot-first";
String pdn = "maxida";
GetApiTest gTest = new GetApiTest();
List
String pString = (String) ls.get(0);
System.out.println("项目工程根路径为:" + pa);
System.out.println("变更代码片段" + pdn + "所在的java文件为: " + pString);
List
HashMap
System.out.println("根据变更代码片段 【" + pdn + "】找到的所在的java文件【" + pString + "】所在的方法为" + kk);
gTest.handleMap(kk, pa);
// System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
}
}



