This commit is contained in:
Kui LIU
2017-08-19 17:05:00 +02:00
parent c80627336a
commit b635c4a703
10 changed files with 597 additions and 66 deletions
@@ -0,0 +1,191 @@
package edu.lu.uni.serval.bugLocalization;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.CUCreator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator.GumTreeType;
public class AlarmTree {
private File file;
private int alarmStartLine;
private int alarmEndLine;
private CompilationUnit cUnit;
private int alarmFinalStartLine;
private int alarmFinalEndLine;
private List<ITree> matchedTrees = new ArrayList<>();
public AlarmTree(File file, int startLine, int endLine) {
super();
this.file = file;
this.alarmStartLine = startLine;
this.alarmEndLine = endLine;
CUCreator cuCreator = new CUCreator();
this.cUnit = cuCreator.createCompilationUnit(this.file);
}
public AlarmTree(String fileName, int startLine, int endLine) {
this(new File(fileName), startLine, endLine);
}
public List<ITree> getAlarmTrees() {
return this.matchedTrees;
}
public int getAlarmFinalStartLine() {
return alarmFinalStartLine;
}
public int getAlarmFinalEndLine() {
return alarmFinalEndLine;
}
public void extract() {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine < alarmStartLine) continue;
matchTrees(tree.getChildren());
}
int size = matchedTrees.size();
if (size > 0) {
this.alarmFinalStartLine = cUnit.getLineNumber(this.matchedTrees.get(0).getPos());
ITree lastTree = matchedTrees.get(size - 1);
this.alarmFinalEndLine = cUnit.getLineNumber(lastTree.getPos() + lastTree.getLength());
}
}
private void matchTrees(List<ITree> trees) {
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine < alarmStartLine) continue;
if (startLine >= alarmStartLine) {
if (!isStatement(tree)) {
ITree parent = getParentStatement(tree);
if (parent == null) {
if (tree.getLabel().equals("MethodBody") || tree.getType() == 8) {
matchTrees(tree.getChildren());
}
continue;
}
tree = parent;
}
if (!matchedTrees.contains(tree)) {
matchedTrees.add(tree);
}
if (containsBlockStatement(tree)) {
endLine = cUnit.getLineNumber(tree.getPos() + tree.getLength());
if (endLine > alarmEndLine) {
tree = removeBlock(tree);
}
}
} else {
matchTrees(tree.getChildren());
}
}
}
private ITree removeBlock(ITree tree) {
List<ITree> oldChildren = tree.getChildren();
List<ITree> newChildren = new ArrayList<>();
for (ITree child : oldChildren) {
int startPosition = child.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + child.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine > this.alarmEndLine) {
if (child.getType() == 8 || containsBlockStatement(child)) {
child = removeBlock(child);
if (child.getChildren().size() == 0) {
continue;
}
}
}
newChildren.add(child);
}
tree.setChildren(newChildren);
return tree;
}
private ITree getParentStatement(ITree tree) {
ITree parent = tree;
do {
parent = parent.getParent();
int type = parent.getType();
if (type == 1 || type == 31 || type == 55) {
// AnonymousClassDeclaration
// MethodDeclaration Initializer (type == 28)
// TypeDeclaration
return null;
}
} while (!isStatement(parent));
return parent;
}
private boolean isStatement(ITree tree) {
int type = tree.getType(); // 8 Block
if (type == 6) return true; // AssertStatement
if (type == 10) return true; // BreakStatement
if (type == 17) return true; // ConstructorInvocation
if (type == 18) return true; // ContinueStatement
if (type == 21) return true; // ExpressionStatement
if (type == 23) return true; // FieldDeclaration
if (type == 41) return true; // ReturnStatement
if (type == 46) return true; // SuperConstructorInvocation
if (type == 49) return true; // SwitchCase
if (type == 53) return true; // ThrowStatement
if (type == 56) return true; // TypeDeclarationStatement
if (type == 60) return true; // VariableDeclarationStatement
if (containsBlockStatement(tree)) return true;
return false;
}
private boolean containsBlockStatement(ITree tree) {
int type = tree.getType();
if (type == 12) return true; // catchClause
if (type == 19) return true; // DoStatement
if (type == 24) return true; // ForStatement
if (type == 25) return true; // IfStatement
if (type == 30) return true; // LabeledStatement
if (type == 50) return true; // SwitchStatement
if (type == 51) return true; // SynchronizedStatement
if (type == 54) return true; // TryStatement
if (type == 61) return true; // WhileStatement
if (type == 70) return true; // EnhancedForStatement
return false;
}
}
@@ -1,13 +0,0 @@
package edu.lu.uni.serval.bugLocalization;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.gumtree.GumTreeGenerator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator.GumTreeType;
public class BuggyCodeParser {
public void parseBuggyCode(String buggyCode) {
ITree tree = new GumTreeGenerator().generateITreeForCodeBlock(buggyCode, GumTreeType.EXP_JDT);
}
}
@@ -0,0 +1,106 @@
package edu.lu.uni.serval.bugLocalization;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.Tokenizer;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.gumtree.regroup.SimpleTree;
import edu.lu.uni.serval.gumtree.regroup.SimplifyTree;
import edu.lu.uni.serval.utils.FileHelper;
/**
*
* Testing data
* localized bugs by FindBugs.
* Use their java file, use GumTree to parse it, simplify the buggy code.
* get all buggy code tokens.
*
* training data
*
*
* Word2Vec embeds data.
*
*
* @author kui.liu
*
*/
public class BuggyTreeParser {
public static void main(String[] args) {
List<String> data = readInfo("Dataset/localized-violations1.list");
StringBuilder bugTokens = new StringBuilder();
int i = 0;
for (String bug : data) {
i ++;
String[] info = bug.split(" : ");
String bugId = info[0].trim();
String fileName = info[2].trim();
int startLine = Integer.parseInt(info[3].trim());
int endLine = Integer.parseInt(info[4].trim());
bugId = bugId.substring(0, bugId.lastIndexOf("."));
String[] bugIdInfo = bugId.split("_");
String projectName = bugIdInfo[0];
String bugIdSt = bugIdInfo[1];
String path = "../FPM_Violations/Testing/CheckedOut/" + projectName + "/" + bugIdSt + "/buggy/";
if ("Chart".equals(projectName)) {
path += "source/";
} else {
path += "src/";
}
List<File> javaFiles = FileHelper.getAllFiles(path, ".java");
for (File javaFile : javaFiles) {
if (javaFile.getPath().endsWith(fileName)) {
AlarmTree alarmTree = new AlarmTree(javaFile, startLine, endLine);
alarmTree.extract();
List<ITree> matchedTrees = alarmTree.getAlarmTrees();
SimpleTree simpleTree = new SimpleTree();
simpleTree.setLabel("Block");
simpleTree.setNodeType("Block");
List<SimpleTree> children = new ArrayList<>();
for (ITree matchedTree : matchedTrees) {
SimpleTree simpleT = new SimplifyTree().canonicalizeSourceCodeTree(matchedTree, null);
children.add(simpleT);
}
simpleTree.setChildren(children);
String tokens = Tokenizer.getTokensDeepFirst(simpleTree);
bugTokens.append(tokens + "\n");
System.out.println(i + "### " + tokens);
}
}
}
FileHelper.outputToFile(Configuration.EMBEDDING_DATA_TOKENS2, bugTokens, false);
}
private static List<String> readInfo(String file) {
List<String> info = new ArrayList<>();
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
try {
while ((line = reader.readLine()) != null) {
info.add(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return info;
}
}
@@ -0,0 +1,104 @@
package edu.lu.uni.serval.bugLocalization;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.Tokenizer;
import edu.lu.uni.serval.FixPatternParser.violations.Violation;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.gumtree.regroup.SimpleTree;
import edu.lu.uni.serval.gumtree.regroup.SimplifyTree;
import edu.lu.uni.serval.utils.FileHelper;
public class ParseAlarms {
public static void main(String[] args) {
/*
* Alarm java files.
* Position files.
*/
String fixedAlarmFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
String unfixedAlarmFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
String un_positionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
StringBuilder tokensBuilder = new StringBuilder();
List<File> javaFiles = FileHelper.getAllFilesInCurrentDiectory(fixedAlarmFilesPath, ".java");
int counter = 0;
for (File javaFile : javaFiles) {
String fileName = javaFile.getName().replace(".java", ".txt");
fileName = fileName.substring(5);
List<Violation> violations = readViolations(positionsFilePath + fileName);
for (Violation violation : violations) {
int startLine = violation.getStartLineNum();
int endLine = violation.getEndLineNum();
String alarmType = violation.getAlarmType();
if (endLine > startLine + 5) continue;
AlarmTree alarmTree = new AlarmTree(javaFile, startLine, endLine);
alarmTree.extract();
List<ITree> matchedTrees = alarmTree.getAlarmTrees();
SimpleTree simpleTree = new SimpleTree();
simpleTree.setLabel("Block");
simpleTree.setNodeType("Block");
List<SimpleTree> children = new ArrayList<>();
for (ITree matchedTree : matchedTrees) {
SimpleTree simpleT = new SimplifyTree().canonicalizeSourceCodeTree(matchedTree, null);
children.add(simpleT);
}
simpleTree.setChildren(children);
String tokens = Tokenizer.getTokensDeepFirst(simpleTree);
tokensBuilder.append(fileName + "\n" + alarmType + ": " + tokens + "\n");
counter ++;
if (counter % 100 == 0) {
FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/fixedAlarms.list", tokensBuilder, true);
tokensBuilder.setLength(0);
}
}
}
FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/fixedAlarms.list", tokensBuilder, true);
tokensBuilder.setLength(0);
}
private static List<Violation> readViolations(String file) {
List<Violation> violations = new ArrayList<>();
String fileContent = FileHelper.readFile(file);
BufferedReader reader = null;
reader = new BufferedReader(new StringReader(fileContent));
String line = null;
try {
while ((line = reader.readLine()) != null) {
String[] positionStr = line.split(":");
int startLine = Integer.parseInt(positionStr[0]);
int endLine = Integer.parseInt(positionStr[1]);
String alarmType = positionStr[2];
Violation violation = new Violation(startLine, endLine, alarmType);
violations.add(violation);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return violations;
}
}
@@ -2,9 +2,9 @@ package edu.lu.uni.serval.config;
public class Configuration {
public static final long SECONDS_TO_WAIT = 60L;
public static final long SECONDS_TO_WAIT = 10L;
private static final String ROOT_PATH = "../FPM_Violations/"; // The root path of all output data.
public static final String ROOT_PATH = "../FPM_Violations/"; // The root path of all output data.
public static final int HUNK_SIZE = 10; // The limitation of source code lines of each DiffEntry, which will be selected as training data.
public static final String BUGGY_TREE_SIGNAL = "BUGGY_TREE###"; // The starting signal of the tree of buggy source code .
@@ -15,7 +15,7 @@ public class Configuration {
// the output path of GumTree results.
private static final String GUM_TREE_OUTPUT = ROOT_PATH + "GumTreeResults/";
private static final String GUM_TREE_OUTPUT = ROOT_PATH + "GumTreeResults_2/";
public static final String EDITSCRIPTS_FILE_PATH = GUM_TREE_OUTPUT + "editScripts/";
public static final String PATCH_SOURCECODE_FILE_PATH = GUM_TREE_OUTPUT + "sourceCode/";
public static final String BUGGYTREE_FILE_PATH = GUM_TREE_OUTPUT + "buggyTrees/";
@@ -181,7 +181,10 @@ public class SimplifyTree {
if ((astNode.equals("SimpleName") || astNode.equals("MethodInvocation")) && label.startsWith("MethodName:")) {
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else {
simpleTree.setLabel(astNode);
@@ -198,7 +201,10 @@ public class SimplifyTree {
if (label.startsWith("MethodName:")) { // <MethodName, name>
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else if (label.startsWith("Name:")) {
label = label.substring(5);
@@ -223,7 +229,10 @@ public class SimplifyTree {
} else if ((astNode.equals("SimpleName") || astNode.equals("MethodInvocation")) && label.startsWith("MethodName:")) {
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else {
simpleTree.setLabel(label.replaceAll(" ", ""));
@@ -250,7 +259,10 @@ public class SimplifyTree {
if ((astNode.equals("SimpleName") || astNode.equals("MethodInvocation")) && label.startsWith("MethodName:")) {
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else {
simpleTree.setLabel(astNode);
@@ -268,7 +280,10 @@ public class SimplifyTree {
if (label.startsWith("MethodName:")) { // <MethodName, name>
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else if (label.startsWith("Name:")) {
label = label.substring(5);
@@ -293,7 +308,10 @@ public class SimplifyTree {
} else if ((astNode.equals("SimpleName") || astNode.equals("MethodInvocation")) && label.startsWith("MethodName:")) {
simpleTree.setNodeType("MethodName");
label = label.substring(11);
label = label.substring(0, label.indexOf(":["));
int argusIndex = label.indexOf(":[");
if (argusIndex > 0) {
label = label.substring(0, argusIndex);
}
simpleTree.setLabel(label);
} else {
simpleTree.setLabel(label.replaceAll(" ", ""));
@@ -91,4 +91,77 @@ public class AlarmsReader {
return violationsMap;
}
public Map<String, Violation> readAlarmsList2(String fileName) {
Map<String, Violation> violationsMap = new HashMap<>();
FileInputStream fis = null;
Scanner scanner = null;
try {
fis = new FileInputStream(fileName);
scanner = new Scanner(fis);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
int arrowIndex = line.indexOf("=>");
String alarmInfo = arrowIndex > 0 ? line.substring(0, arrowIndex) : line;
String[] buggyElements = alarmInfo.split(",");
String alarmType = buggyElements[0];
String projectName = buggyElements[1];
String buggyCommitId = buggyElements[2];
String buggyFile = buggyElements[3];
int startLine = Integer.parseInt(buggyElements[4]);
int endLine = Integer.parseInt(buggyElements[5]);
Alarm alarm = new Alarm(buggyCommitId, buggyFile, "", "");
Violation violation;
if (violationsMap.containsKey(projectName)) {
violation = violationsMap.get(projectName);
} else {
violation = new Violation(projectName);
violationsMap.put(projectName, violation);
}
List<Alarm> alarms = violation.getAlarms();
int index = alarms.indexOf(alarm);
if (index >= 0) {
Alarm tempAlarm = alarms.get(index);
Map<Integer, Integer> positions = tempAlarm.getPositions();
if (positions.containsKey(startLine)) {
int end = positions.get(startLine);
if (endLine < end) {
positions.put(startLine, endLine);
tempAlarm.getAlarmTypes().put(startLine, alarmType);
}
} else {
positions.put(startLine, endLine);
tempAlarm.getAlarmTypes().put(startLine, alarmType);
counter ++;
}
} else {
Map<Integer, String> alarmTypes = new HashMap<>();
alarmTypes.put(startLine, alarmType);
alarm.setAlarmTypes(alarmTypes);
Map<Integer, Integer> positions = new HashMap<>();
positions.put(startLine, endLine);
alarm.setPositions(positions);
alarms.add(alarm);
counter ++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(counter);
return violationsMap;
}
}
@@ -12,11 +12,15 @@ public class Statistic {
public static void main(String[] args) {
String statistic = "../FPM_Violations/OUTPUT";
List<File> files = FileHelper.getAllFiles(statistic, ".list");
int testAlarms = 0;
int nullGumTreeResults = 0;
int nullMappingGumTreeResults = 0;
int pureDeletion = 0;
int timeout = 0;
int noSourceCodeChagnes = 0;
int largeHunk = 0;
int nullSourceCode = 0;
for (File file : files) {
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
@@ -33,6 +37,12 @@ public class Statistic {
pureDeletion += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("Time")) {
timeout += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("noSourceCodeChagnes")) {
noSourceCodeChagnes += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("largeHunk")) {
largeHunk += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("nullSourceCode")) {
nullSourceCode += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
}
}
} catch (IOException e) {
@@ -57,5 +67,8 @@ public class Statistic {
System.out.println("nullMappingGumTreeResults: " + nullMappingGumTreeResults);
System.out.println("pureDeletion: " + pureDeletion);
System.out.println("Timeout: " + timeout);
System.out.println("noSourceCodeChagnes: " + noSourceCodeChagnes);
System.out.println("largeHunk: " + largeHunk);
System.out.println("nullSourceCode: " + nullSourceCode);
}
}
@@ -25,31 +25,88 @@ public class TestViolationParser {
}
}
}
String fixedAlarmFile = "Dataset/fixed-alarms-v0.3.list.txt";
String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
final String previousFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
final String positionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
FileHelper.createDirectory(previousFilesPath);
FileHelper.createDirectory(positionsFilePath);
List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
for (File file : unfixedAlarmFiles) {
ViolationParser parser = new ViolationParser();
parser.parseViolations(file, repositoriesList, previousFilesPath, positionsFilePath);
}
// String fixedAlarmFile = "Dataset/fixed-alarms-v0.3.list.txt";
/**
* 544 projects.
* 42322 files
* 84103 alarms.
* 19928 parsed instances. 1984
* 22 bugs
*
* cd ../../7/buggy/
* mvn compile
* mvn package -Dmaven.test.skip=true
*
* Lang 54, 56-65
* Math 105 and 106
NP_ALWAYS_NULL : org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java : 1800 : 1800
Chart_1.xml
UC_USELESS_CONDITION : org/jfree/data/KeyedObjects2D.java : 231 : 231
Chart_22.xml
DLS_DEAD_LOCAL_STORE : org/jfree/chart/renderer/GrayPaintScale.java : 125 : 125
Chart_24.xml
NP_NULL_ON_SOME_PATH : org/jfree/chart/plot/XYPlot.java : 4493 : 4493
Chart_4.xml
SF_SWITCH_NO_DEFAULT : com/google/javascript/jscomp/UnreachableCodeElimination.java : 151 : 171
Closure_127.xml
DLS_DEAD_LOCAL_STORE : com/google/javascript/jscomp/ScopedAliases.java : 276 : 276
Closure_24.xml
SF_SWITCH_NO_DEFAULT : com/google/javascript/jscomp/TypedScopeCreator.java : 550 : 580
Closure_43.xml
UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR : com/google/debugging/sourcemap/SourceMapConsumerV3.java : 488 : 488
Closure_47.xml
SF_SWITCH_NO_DEFAULT : com/google/javascript/jscomp/MakeDeclaredNamesUnique.java : 116 : 147
Closure_49.xml
DLS_DEAD_LOCAL_STORE : com/google/javascript/jscomp/CollapseProperties.java : 482 : 482
Closure_89.xml
SF_SWITCH_NO_DEFAULT : org/apache/commons/lang3/time/FastDateParser.java : 315 : 338
Lang_10.xml
DM_CONVERT_CASE : org/apache/commons/lang/StringUtils.java : 1048 : 1048
Lang_40.xml
SF_SWITCH_NO_DEFAULT : org/apache/commons/lang/math/NumberUtils.java : 449 : 491
Lang_58.xml
SF_SWITCH_NO_DEFAULT : org/apache/commons/lang/Entities.java : 916 : 919
Lang_62.xml
FE_FLOATING_POINT_EQUALITY : org/apache/commons/math3/util/FastMath.java : 1545 : 1545
Math_15.xml
DLS_DEAD_LOCAL_STORE : org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java : 1658 : 1658
Math_38.xml
FE_FLOATING_POINT_EQUALITY : org/apache/commons/math/analysis/solvers/BaseSecantSolver.java : 187 : 187
Math_50.xml
CO_COMPARETO_INCORRECT_FLOATING : org/apache/commons/math/fraction/Fraction.java : 261 : 261
Math_91.xml
DLS_DEAD_LOCAL_STORE : org/mockito/internal/invocation/InvocationMatcher.java : 122 : 122
Mockito_1.xml
EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS : org/mockito/internal/creation/DelegatingMethod.java : 55 : 55
Mockito_11.xml
REC_CATCH_EXCEPTION : org/mockito/internal/creation/instance/ConstructorInstantiator.java : 26 : 26
Mockito_21.xml
DM_NUMBER_CTOR : org/joda/time/chrono/ZonedChronology.java : 469 : 469
Time_26.xml
*/
final String previousFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
final String revisedFilesPath = Configuration.GUM_TREE_INPUT + "revFiles/";
final String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
final String diffentryFilePath = Configuration.GUM_TREE_INPUT + "diffentries/";
FileHelper.createDirectory(previousFilesPath);
FileHelper.createDirectory(revisedFilesPath);
FileHelper.createDirectory(positionsFilePath);
FileHelper.createDirectory(diffentryFilePath);
ViolationParser parser = new ViolationParser();
parser.parseViolations(fixedAlarmFile, repositoriesList, previousFilesPath, revisedFilesPath, positionsFilePath, diffentryFilePath);
// final String previousFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
// final String revisedFilesPath = Configuration.GUM_TREE_INPUT + "revFiles/";
// final String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
// final String diffentryFilePath = Configuration.GUM_TREE_INPUT + "diffentries/";
// FileHelper.createDirectory(previousFilesPath);
// FileHelper.createDirectory(revisedFilesPath);
// FileHelper.createDirectory(positionsFilePath);
// FileHelper.createDirectory(diffentryFilePath);
//
// ViolationParser parser = new ViolationParser();
// parser.parseViolations(fixedAlarmFile, repositoriesList, previousFilesPath, revisedFilesPath, positionsFilePath, diffentryFilePath);
}
}
@@ -156,16 +156,16 @@ public class ViolationParser {
/**
* Output data in terms of alarm types.
*
* @param fixedAlarmFile
* @param alarmsInfo
* @param repos
* @param previousFilesPath
* @param revisedFilesPath
* @param positionsFilePath
* @param diffentryFilePath
*/
public void parseViolations2(String fixedAlarmFile, List<File> repos, String previousFilesPath, String revisedFilesPath, String positionsFilePath, String diffentryFilePath) {
public void parseViolations(File alarmsInfo, List<File> repos, String violationFilesPath, String positionsFilePath) {
AlarmsReader reader = new AlarmsReader();
Map<String, Violation> violations = reader.readAlarmsList(fixedAlarmFile);
Map<String, Violation> violations = reader.readAlarmsList2(alarmsInfo.getPath());
int a = 0;
for (Map.Entry<String , Violation> entry : violations.entrySet()) {
String projectName = entry.getKey();
@@ -185,7 +185,7 @@ public class ViolationParser {
List<Alarm> alarms = violation.getAlarms();
String repoPath = repoName + "/.git";
GitRepository gitRepo = new GitRepository(repoPath, revisedFilesPath, previousFilesPath);
GitRepository gitRepo = new GitRepository(repoPath, "", "");
try {
gitRepo.open();
for (Alarm alarm : alarms) {
@@ -197,36 +197,18 @@ public class ViolationParser {
continue;
}
String fixedCommitId = alarm.getFixedCommitId();
String fixedFileName = alarm.getFixedFileName();
String fixedFileContent = gitRepo.getFileContentByCommitIdAndFileName(fixedCommitId, fixedFileName);
if (fixedFileContent == null || "".equals(fixedFileContent)) {
System.out.println(projectName);
continue;
}
String diffentry = gitRepo.getDiffentryByTwoCommitIds(buggyCommitId, fixedCommitId, fixedFileName);
if (diffentry == null) {
System.out.println(projectName);
continue;
}
String commitId = buggyCommitId.substring(0, 6) + "_" + fixedCommitId.substring(0, 6);
String fileName = fixedFileName.replaceAll("/", "#");
String commitId = buggyCommitId.substring(0, 6) + "_";
String fileName = buggyFileName.replaceAll("/", "#");
fileName = projectName + "_" + commitId + fileName;
if (fileName.length() > 240) {
List<File> files = FileHelper.getAllFilesInCurrentDiectory(revisedFilesPath, ".java");
List<File> files = FileHelper.getAllFilesInCurrentDiectory(violationFilesPath, ".java");
fileName = files.size() + "TooLongFileName.java";
}
String buggyFile = previousFilesPath + "prev_" + fileName;
String fixedFile = revisedFilesPath + fileName;
String buggyFile = violationFilesPath + "unfixed_" + fileName;
fileName = fileName.replace(".java", ".txt");
String positionFile = positionsFilePath + fileName;
String diffentryFile = diffentryFilePath + fileName;
FileHelper.outputToFile(buggyFile, buggyFileContent, false);
FileHelper.outputToFile(fixedFile, fixedFileContent, false);
FileHelper.outputToFile(positionFile, readPosition(alarm.getPositions(), alarm.getAlarmTypes()), false);
FileHelper.outputToFile(diffentryFile, diffentry, false);
}
} catch (GitRepositoryNotFoundException e) {
System.out.println("Exception: " + projectName);