Reading fix patterns.

This commit is contained in:
Kui Liu
2018-08-07 19:47:01 +02:00
parent 151a0a09a0
commit eddf8b0d3e
8 changed files with 860 additions and 53 deletions
@@ -8,6 +8,7 @@ import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.FileHelper;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,38 +1,42 @@
package edu.lu.uni.serval.FixPatternParser.violations;
import com.github.gumtreediff.actions.ActionGenerator;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.matchers.Matcher;
import com.github.gumtreediff.matchers.Matchers;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap;
import edu.lu.uni.serval.gumtree.GumTreeComparer;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalRegrouper;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.ListSorter;
import org.apache.commons.lang3.StringUtils;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.*;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.function.Consumer;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.text.similarity.*;
import static edu.lu.uni.serval.FixPatternParser.violations.MultiThreadTreeLoader.getKeysByValue;
import static edu.lu.uni.serval.FixPatternParser.violations.MultiThreadTreeLoaderCluster.fromString;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.similarity.JaroWinklerDistance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.FileHelper;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
/**
* Created by anilkoyuncu on 19/03/2018.
*/
@@ -24,7 +24,7 @@ public class Launcher {
Properties appProps = new Properties();
String appConfigPath = args[0];
String appConfigPath = "/Users/kui.liu/Downloads/app.properties";//args[0];
// String appConfigPath = "/Users/anilkoyuncu/bugStudy/release/code/app.properties";
appProps.load(new FileInputStream(appConfigPath));
@@ -12,6 +12,8 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import edu.lu.uni.serval.FixPattern.utils.Checker;
import edu.lu.uni.serval.FixPatternParser.violations.MultiThreadTreeLoader;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -175,15 +177,15 @@ public class PatternExtractor {
}
public static void getPattern(List<String> fixes,String operation){
String clusterPath = "/Users/anilkoyuncu/bugStudy/release/dataset/output/clusterallDatasetUPD/";
String savePath = "/Users/anilkoyuncu/bugStudy/release/dataset/dumps/";
String clusterPath = "/Users/kui.liu/Downloads/clusterallDatasetUPD/";
String savePath = "/Users/kui.liu/Downloads/dumps/";
File patternsF = new File(clusterPath);
File[] listOfPatterns = patternsF.listFiles();
Stream<File> patterns = Arrays.stream(listOfPatterns);
List<File> patternsL = patterns
.filter(x -> !x.getName().startsWith("."))
// .filter(x-> x.getName().endsWith(".git"))
// .filter(x -> !x.getName().endsWith(".git"))
.collect(Collectors.toList());
for (File pattern:patternsL) {
@@ -192,7 +194,7 @@ public class PatternExtractor {
Stream<File> stream = Arrays.stream(listOfFiles);
List<File> patches = stream
.filter(x -> !x.getName().startsWith("."))
// .filter(x -> x.getName().endsWith(".git"))
.filter(x -> !x.getName().endsWith(".git"))
.collect(Collectors.toList());
for (File patch : patches) {
@@ -208,13 +210,26 @@ public class PatternExtractor {
String content = new String(Files.readAllBytes(Paths.get(savePath + saveFN)));
HierarchicalActionSet actionSet = (HierarchicalActionSet) fromString(content);
int astType = actionSet.getNode().getType();
if (Checker.isStatement(astType) || astType == 23 //FieldDeclaration
|| astType == 31 //MethodDeclaration
|| astType == 55) {//TypeDeclaration
System.out.println(actionSet);
// ITree actionTree = MultiThreadTreeLoader.getActionTree(actionSet, null, null);
// ITree simpliedTree = getSimpliedTree(actionSet);
// System.out.println(new TreeToString().toString(simpliedTree));
// System.out.println(new TreeToString().toString(actionTree));
System.out.println("======");
}
ITree simpliedTree = getSimpliedTree(actionSet);
simpliedTree.toString();
// ITree simpliedTree = getSimpliedTree(actionSet);
// simpliedTree.toString();
}catch (Exception e){
e.printStackTrace();
}
}
System.out.println("============");
}
}
@@ -0,0 +1,47 @@
package edu.lu.uni.serval;
import java.util.ArrayList;
import java.util.List;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap;
public class TreeToString {
private List<String> strList = new ArrayList<>();
public String toString(ITree tree) {
List<ITree> children = tree.getChildren();
String str = ASTNodeMap.map.get(tree.getType());
if (strList.size() == 0) {
strList.add(str);
for (ITree child : children) {
TreeToString t2s = new TreeToString();
t2s.toString(child);
List<String> strList1 = t2s.strList;
for (String str1 : strList1) {
strList.add("---" + str1);
}
}
} else {
strList.clear();
strList.add(str);
for (ITree child : children) {
TreeToString t2s = new TreeToString();
t2s.toString(child);
List<String> strList1 = t2s.strList;
for (String str1 : strList1) {
strList.add("---" + str1);
}
}
}
str = "";
for (String str1 : strList) {
str += str1 + "\n";
}
return str;
}
}
@@ -1,15 +1,19 @@
package edu.lu.uni.serval.gumtree.regroup;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPattern.utils.CNodeMap;
import edu.lu.uni.serval.gumtree.GumTreeComparer;
import edu.lu.uni.serval.utils.ListSorter;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.github.gumtreediff.actions.model.Action;
import com.github.gumtreediff.actions.model.Addition;
import com.github.gumtreediff.actions.model.Delete;
import com.github.gumtreediff.actions.model.Insert;
import com.github.gumtreediff.actions.model.Move;
import com.github.gumtreediff.actions.model.Update;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPattern.utils.CNodeMap;
import edu.lu.uni.serval.utils.ListSorter;
/**
* Regroup GumTree results to a hierarchical construction.
*
@@ -18,14 +22,14 @@ import java.util.List;
*/
public class HierarchicalRegrouperForC {
public static void main(String[] args) {
GumTreeComparer com = new GumTreeComparer();
File cFile1 = new File("/Users/anilkoyuncu/bugStudy/dataset/GumTreeInput/linux-stable/prevFiles/prev_0a3d00_b404bc_drivers#pci#iov.c");
File cFile2 = new File("/Users/anilkoyuncu/bugStudy/dataset/GumTreeInput/linux-stable/revFiles/0a3d00_b404bc_drivers#pci#iov.c");
List<Action> action = com.compareTwoFilesWithGumTreeForCCode(cFile1, cFile2);
List<HierarchicalActionSet> actionSet = new HierarchicalRegrouperForC().regroupGumTreeResults(action);
System.out.println(actionSet);
}
// public static void main(String[] args) {
// GumTreeComparer com = new GumTreeComparer();
// File cFile1 = new File("/Users/anilkoyuncu/bugStudy/dataset/GumTreeInput/linux-stable/prevFiles/prev_0a3d00_b404bc_drivers#pci#iov.c");
// File cFile2 = new File("/Users/anilkoyuncu/bugStudy/dataset/GumTreeInput/linux-stable/revFiles/0a3d00_b404bc_drivers#pci#iov.c");
// List<Action> action = com.compareTwoFilesWithGumTreeForCCode(cFile1, cFile2);
// List<HierarchicalActionSet> actionSet = new HierarchicalRegrouperForC().regroupGumTreeResults(action);
// System.out.println(actionSet);
// }
List<HierarchicalActionSet> actionSets = new ArrayList<>();