This commit is contained in:
fixminer
2018-09-17 21:20:13 +02:00
parent 2d12536b93
commit 3d20268377
32 changed files with 94 additions and 198 deletions
@@ -1,55 +0,0 @@
package edu.lu.uni.serval.FixPatternParser;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;
import java.io.*;
/**
* Creator of a CompilationUnit.
*
* @author kui.liu
*
*/
public class CUCreator {
public CompilationUnit createCompilationUnit(File javaFile) {
CompilationUnit unit = null;
try {
char[] sourceCode = readFileToCharArray(new FileReader(javaFile));
ASTParser parser = createASTParser(sourceCode);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
unit = (CompilationUnit) parser.createAST(null);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return unit;
}
private ASTParser createASTParser(char[] javaCode) {
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setSource(javaCode);
return parser;
}
private char[] readFileToCharArray(FileReader fileReader) throws IOException {
StringBuilder fileData = new StringBuilder();
BufferedReader br = new BufferedReader(fileReader);
char[] buf = new char[10];
int numRead = 0;
while ((numRead = br.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
br.close();
return fileData.toString().toCharArray();
}
}
@@ -1,6 +1,4 @@
package edu.lu.uni.serval.FixPatternParser.violations;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
package edu.lu.uni.serval.FixPatternParser;
import java.io.*;
import java.util.List;
@@ -13,7 +11,7 @@ import java.util.List;
* @author kui.liu
*
*/
public class FixedViolationHunkParser extends FixedViolationParser {
public class FixedPatternHunkParser extends FixedPatternParser {
public String testingInfo = "";
@@ -1,10 +1,7 @@
package edu.lu.uni.serval.FixPatternParser.violations;
package edu.lu.uni.serval.FixPatternParser;
import com.github.gumtreediff.actions.model.Action;
import edu.lu.uni.serval.FixPatternParser.Parser;
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.ListSorter;
import java.io.File;
@@ -17,7 +14,7 @@ import java.util.List;
* @author kui.liu
*
*/
public class FixedViolationParser extends Parser {
public class FixedPatternParser extends Parser {
/*
* ResultType:
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.gumtree.regroup;
package edu.lu.uni.serval.FixPatternParser;
import com.github.gumtreediff.actions.model.Action;
import com.github.gumtreediff.tree.ITree;
@@ -1,8 +1,8 @@
package edu.lu.uni.serval.gumtree.regroup;
package edu.lu.uni.serval.FixPatternParser;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap;
import edu.lu.uni.serval.utils.ASTNodeMap;
import edu.lu.uni.serval.utils.ListSorter;
import java.util.ArrayList;
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer;
import edu.lu.uni.serval.fixminer.cluster.*;
import edu.lu.uni.serval.fixminer.jobs.*;
import edu.lu.uni.serval.utils.CallShell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer;
import com.github.gumtreediff.actions.ActionGenerator;
import com.github.gumtreediff.actions.model.Action;
@@ -6,8 +6,8 @@ import com.github.gumtreediff.matchers.Matcher;
import com.github.gumtreediff.matchers.Matchers;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.Tree;
import edu.lu.uni.serval.FixPattern.utils.ASTNodeMap;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.ASTNodeMap;
import edu.lu.uni.serval.FixPatternParser.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.*;
@@ -2,9 +2,9 @@ package edu.lu.uni.serval.fixminer;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import edu.lu.uni.serval.MultipleThreadsParser.MessageFile;
import edu.lu.uni.serval.MultipleThreadsParser.ParseFixPatternActor;
import edu.lu.uni.serval.MultipleThreadsParser.WorkMessage;
import edu.lu.uni.serval.fixminer.cluster.akka.MessageFile;
import edu.lu.uni.serval.fixminer.cluster.akka.EDiffActor;
import edu.lu.uni.serval.fixminer.cluster.akka.EDiffMessage;
import edu.lu.uni.serval.utils.FileHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,11 +96,11 @@ public class TestHunkParserSingleFile {
ActorSystem system = null;
ActorRef parsingActor = null;
final WorkMessage msg = new WorkMessage(0, msgFiles);
final EDiffMessage msg = new EDiffMessage(0, msgFiles);
try {
log.info("Akka begins...");
system = ActorSystem.create("Mining-FixPattern-System");
parsingActor = system.actorOf(ParseFixPatternActor.props(1, "dataset"), "mine-fix-pattern-actor");
parsingActor = system.actorOf(EDiffActor.props(1, "dataset"), "mine-fix-pattern-actor");
parsingActor.tell(msg, ActorRef.noSender());
} catch (Exception e) {
system.shutdown();
@@ -109,7 +109,7 @@ public class TestHunkParserSingleFile {
// int counter = 0;
// for (MessageFile msgFile : msgFiles) {
// FixedViolationHunkParser parser = new FixedViolationHunkParser();
// FixedPatternHunkParser parser = new FixedPatternHunkParser();
//
// final ExecutorService executor = Executors.newSingleThreadExecutor();
// // schedule the work
@@ -5,7 +5,7 @@ import com.github.gumtreediff.actions.model.Action;
import com.github.gumtreediff.matchers.Matcher;
import com.github.gumtreediff.matchers.Matchers;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPattern.utils.EDiff;
import edu.lu.uni.serval.utils.EDiff;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,51 +0,0 @@
package edu.lu.uni.serval.fixminer.cluster;
import java.util.List;
public class WorkMessage {
private int id;
private List<String> msgFiles;
public String getDbDir() {
return dbDir;
}
public String getServerWait() {
return serverWait;
}
private String dbDir;
private String serverWait;
public String getInputPath() {
return inputPath;
}
private String inputPath;
public String getInnerPort() {
return innerPort;
}
private String innerPort;
public WorkMessage(int id, List<String> msgFiles,String innerPort,String inputPath,String dbDir,String serverWait) {
super();
this.id = id;
this.msgFiles = msgFiles;
this.innerPort = innerPort;
this.inputPath = inputPath;
this.dbDir = dbDir;
this.serverWait = serverWait;
}
public int getId() {
return id;
}
public List<String> getMsgFiles() {
return msgFiles;
}
}
@@ -2,7 +2,6 @@ package edu.lu.uni.serval.fixminer.cluster.akka;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import edu.lu.uni.serval.fixminer.cluster.TreeActor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.MultipleThreadsParser;
package edu.lu.uni.serval.fixminer.cluster.akka;
import akka.actor.ActorRef;
import akka.actor.Props;
@@ -10,29 +10,29 @@ import org.slf4j.LoggerFactory;
import java.util.List;
public class ParseFixPatternActor extends UntypedActor {
public class EDiffActor extends UntypedActor {
private static Logger logger = LoggerFactory.getLogger(ParseFixPatternActor.class);
private static Logger logger = LoggerFactory.getLogger(EDiffActor.class);
private ActorRef mineRouter;
private final int numberOfWorkers;
private int counter = 0;
public ParseFixPatternActor(int numberOfWorkers, String project) {
public EDiffActor(int numberOfWorkers, String project) {
mineRouter = this.getContext().actorOf(new RoundRobinPool(numberOfWorkers)
.props(ParseFixPatternWorker.props(project)), "mine-fix-pattern-router");
.props(EDiffWorker.props(project)), "mine-fix-pattern-router");
this.numberOfWorkers = numberOfWorkers;
}
public static Props props(final int numberOfWorkers, final String project) {
return Props.create(new Creator<ParseFixPatternActor>() {
return Props.create(new Creator<EDiffActor>() {
private static final long serialVersionUID = 9207427376110704705L;
@Override
public ParseFixPatternActor create() throws Exception {
return new ParseFixPatternActor(numberOfWorkers, project);
public EDiffActor create() throws Exception {
return new EDiffActor(numberOfWorkers, project);
}
});
@@ -41,8 +41,8 @@ public class ParseFixPatternActor extends UntypedActor {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof WorkMessage) {
List<MessageFile> files = ((WorkMessage) message).getMsgFiles();
if (message instanceof EDiffMessage) {
List<MessageFile> files = ((EDiffMessage) message).getMsgFiles();
int size = files.size();
int average = size / numberOfWorkers;
int reminder = size % numberOfWorkers;
@@ -54,7 +54,7 @@ public class ParseFixPatternActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List<MessageFile> filesOfWorkers = files.subList(fromIndex, toIndex);
final WorkMessage workMsg = new WorkMessage(i + 1, filesOfWorkers);
final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers);
mineRouter.tell(workMsg, getSelf());
logger.info("Assign a task to worker #" + (i + 1) + "...");
}
@@ -1,13 +1,13 @@
package edu.lu.uni.serval.MultipleThreadsParser;
package edu.lu.uni.serval.fixminer.cluster.akka;
import java.util.List;
public class WorkMessage {
public class EDiffMessage {
private int id;
private List<MessageFile> msgFiles;
public WorkMessage(int id, List<MessageFile> msgFiles) {
public EDiffMessage(int id, List<MessageFile> msgFiles) {
super();
this.id = id;
this.msgFiles = msgFiles;
@@ -1,10 +1,10 @@
package edu.lu.uni.serval.MultipleThreadsParser;
package edu.lu.uni.serval.fixminer.cluster.akka;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import edu.lu.uni.serval.FixPatternParser.FixedPatternHunkParser;
import edu.lu.uni.serval.FixPatternParser.RunnableParser;
import edu.lu.uni.serval.FixPatternParser.violations.FixedViolationHunkParser;
import edu.lu.uni.serval.config.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,24 +13,24 @@ import java.io.File;
import java.util.List;
import java.util.concurrent.*;
public class ParseFixPatternWorker extends UntypedActor {
private static Logger log = LoggerFactory.getLogger(ParseFixPatternActor.class);
public class EDiffWorker extends UntypedActor {
private static Logger log = LoggerFactory.getLogger(EDiffActor.class);
private String project;
public ParseFixPatternWorker(String project) {
public EDiffWorker(String project) {
this.project = project;
}
public static Props props(final String project) {
return Props.create(new Creator<ParseFixPatternWorker>() {
return Props.create(new Creator<EDiffWorker>() {
private static final long serialVersionUID = -7615153844097275009L;
@Override
public ParseFixPatternWorker create() throws Exception {
return new ParseFixPatternWorker(project);
public EDiffWorker create() throws Exception {
return new EDiffWorker(project);
}
});
@@ -38,8 +38,8 @@ public class ParseFixPatternWorker extends UntypedActor {
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof WorkMessage) {
WorkMessage msg = (WorkMessage) message;
if (message instanceof EDiffMessage) {
EDiffMessage msg = (EDiffMessage) message;
List<MessageFile> files = msg.getMsgFiles();
StringBuilder editScripts = new StringBuilder();
StringBuilder patchesSourceCode = new StringBuilder();
@@ -68,7 +68,7 @@ public class ParseFixPatternWorker extends UntypedActor {
File diffentryFile = msgFile.getDiffEntryFile();
FixedViolationHunkParser parser = new FixedViolationHunkParser();
FixedPatternHunkParser parser = new FixedPatternHunkParser();
final ExecutorService executor = Executors.newSingleThreadExecutor();
// schedule the work
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.MultipleThreadsParser;
package edu.lu.uni.serval.fixminer.cluster.akka;
import java.io.File;
@@ -1,11 +1,10 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.cluster.akka;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import akka.routing.RoundRobinPool;
import edu.lu.uni.serval.fixminer.cluster.akka.TreeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPool;
@@ -1,10 +1,11 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.cluster.akka;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.fixminer.cluster.akka.TreeMessage;
import edu.lu.uni.serval.fixminer.cluster.Compare;
import edu.lu.uni.serval.fixminer.cluster.RunnableCompare;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPool;
@@ -65,7 +66,7 @@ public class TreeWorker extends UntypedActor {
if(message instanceof TreeMessage) {
// if (message instanceof edu.lu.uni.serval.MultipleThreadsParser.WorkMessage) {
// if (message instanceof edu.lu.uni.serval.fixminer.cluster.akka.EDiffMessage) {
TreeMessage msg = (TreeMessage) message;
List<String> files = msg.getName();
JedisPool innerPool = msg.getInnerPool();
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.PoolBuilder;
import edu.lu.uni.serval.utils.FileHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,10 +1,10 @@
package edu.lu.uni.serval.fixminer;
package edu.lu.uni.serval.fixminer.jobs;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import edu.lu.uni.serval.MultipleThreadsParser.MessageFile;
import edu.lu.uni.serval.MultipleThreadsParser.ParseFixPatternActor;
import edu.lu.uni.serval.MultipleThreadsParser.WorkMessage;
import edu.lu.uni.serval.fixminer.cluster.akka.EDiffMessage;
import edu.lu.uni.serval.fixminer.cluster.akka.MessageFile;
import edu.lu.uni.serval.fixminer.cluster.akka.EDiffActor;
import edu.lu.uni.serval.utils.FileHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,12 +56,12 @@ public class EnhancedASTDiff {
ActorSystem system = null;
ActorRef parsingActor = null;
final WorkMessage msg = new WorkMessage(0, msgFiles);
final EDiffMessage msg = new EDiffMessage(0, msgFiles);
try {
log.info("Akka begins...");
system = ActorSystem.create("Mining-FixPattern-System");
parsingActor = system.actorOf(ParseFixPatternActor.props(Integer.valueOf(numOfWorkers), project), "mine-fix-pattern-actor");
parsingActor = system.actorOf(EDiffActor.props(Integer.valueOf(numOfWorkers), project), "mine-fix-pattern-actor");
parsingActor.tell(msg, ActorRef.noSender());
} catch (Exception e) {
system.shutdown();
@@ -1,5 +1,6 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.utils.CallShell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import com.github.gumtreediff.actions.ActionGenerator;
import com.github.gumtreediff.actions.model.Action;
@@ -6,10 +6,11 @@ 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.EDiff;
import edu.lu.uni.serval.FixPattern.utils.EDiffHelper;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiff;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import edu.lu.uni.serval.FixPatternParser.HierarchicalActionSet;
import edu.lu.uni.serval.utils.FileHelper;
import org.javatuples.Pair;
import org.slf4j.Logger;
@@ -1,10 +1,11 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.FixPattern.utils.EDiffHelper;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import edu.lu.uni.serval.FixPatternParser.HierarchicalActionSet;
import edu.lu.uni.serval.utils.FileHelper;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.similarity.JaroWinklerDistance;
@@ -1,7 +1,7 @@
package edu.lu.uni.serval.fixminer;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.FixPattern.utils.Checker;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.Checker;
import edu.lu.uni.serval.FixPatternParser.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,8 +1,9 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.FixPattern.utils.EDiffHelper;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import edu.lu.uni.serval.FixPatternParser.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.fixminer.jobs;
import edu.lu.uni.serval.FixPattern.utils.PoolBuilder;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.FixPattern.utils;
package edu.lu.uni.serval.utils;
import java.util.HashMap;
import java.util.Map;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.fixminer.cluster;
package edu.lu.uni.serval.utils;
/**
* Created by anilkoyuncu on 17/04/2018.
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.FixPattern.utils;
package edu.lu.uni.serval.utils;
public class Checker {
@@ -1,9 +1,9 @@
package edu.lu.uni.serval.FixPattern.utils;
package edu.lu.uni.serval.utils;
import com.github.gumtreediff.actions.model.*;
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.FixPatternParser.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -1,8 +1,8 @@
package edu.lu.uni.serval.FixPattern.utils;
package edu.lu.uni.serval.utils;
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.FixPatternParser.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1,4 +1,4 @@
package edu.lu.uni.serval.FixPattern.utils;
package edu.lu.uni.serval.utils;
import redis.clients.jedis.JedisPoolConfig;