Remove useless actions.
This commit is contained in:
@@ -170,6 +170,68 @@ public abstract class Parser implements ParserInterface {
|
|||||||
return editScript;
|
return editScript;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param hunkActionSets
|
||||||
|
* @param bugStartLine
|
||||||
|
* @param bugEndLine
|
||||||
|
* @param fixStartLine
|
||||||
|
* @param fixEndLine
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected String getASTEditScripts(List<HierarchicalActionSet> hunkActionSets, int bugEndPosition, int fixEndPosition) {
|
||||||
|
String editScript = "";
|
||||||
|
|
||||||
|
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
|
||||||
|
editScript += getASTEditScripts(hunkActionSet, bugEndPosition, fixEndPosition);
|
||||||
|
}
|
||||||
|
return editScript;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getASTEditScripts(HierarchicalActionSet hunkActionSet, int bugEndPosition, int fixEndPosition) {
|
||||||
|
String editScript = "";
|
||||||
|
List<HierarchicalActionSet> actionSets = new ArrayList<>();
|
||||||
|
actionSets.add(hunkActionSet);
|
||||||
|
while (actionSets.size() != 0) {
|
||||||
|
List<HierarchicalActionSet> subSets = new ArrayList<>();
|
||||||
|
for (HierarchicalActionSet set : actionSets) {
|
||||||
|
int bugS = set.getStartPosition();
|
||||||
|
int fixS = set.getFixStartLineNum();
|
||||||
|
|
||||||
|
if (bugS > bugEndPosition || fixS > fixEndPosition) continue;
|
||||||
|
|
||||||
|
subSets.addAll(set.getSubActions());
|
||||||
|
String actionStr = set.getActionString();
|
||||||
|
int index = actionStr.indexOf("@@");
|
||||||
|
String singleEdit = actionStr.substring(0, index).replace(" ", "");
|
||||||
|
|
||||||
|
if (singleEdit.endsWith("SimpleName")) {
|
||||||
|
actionStr = actionStr.substring(index + 2);
|
||||||
|
if (actionStr.startsWith("MethodName")) {
|
||||||
|
singleEdit = singleEdit.replace("SimpleName", "MethodName");
|
||||||
|
} else {
|
||||||
|
if (actionStr.startsWith("Name")) {
|
||||||
|
char c = actionStr.charAt(5);
|
||||||
|
if (Character.isUpperCase(c)) {
|
||||||
|
singleEdit = singleEdit.replace("SimpleName", "Name");
|
||||||
|
} else {
|
||||||
|
singleEdit = singleEdit.replace("SimpleName", "Variable");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
singleEdit = singleEdit.replace("SimpleName", "Variable");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
editScript += singleEdit + " ";
|
||||||
|
}
|
||||||
|
actionSets.clear();
|
||||||
|
actionSets.addAll(subSets);
|
||||||
|
}
|
||||||
|
return editScript;
|
||||||
|
}
|
||||||
|
|
||||||
protected void clearITree(HierarchicalActionSet actionSet) {
|
protected void clearITree(HierarchicalActionSet actionSet) {
|
||||||
actionSet.getAction().setNode(null);
|
actionSet.getAction().setNode(null);
|
||||||
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
||||||
|
|||||||
+56
-12
@@ -107,6 +107,8 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
|||||||
// Range of fixing source code
|
// Range of fixing source code
|
||||||
int fixStartLine = 0;
|
int fixStartLine = 0;
|
||||||
int fixEndLine = 0;
|
int fixEndLine = 0;
|
||||||
|
int bugEndPosition = 0;
|
||||||
|
int fixEndPosition = 0;
|
||||||
/*
|
/*
|
||||||
* Convert the ITree of buggy code to a simple tree.
|
* Convert the ITree of buggy code to a simple tree.
|
||||||
* It will be used to compute the similarity.
|
* It will be used to compute the similarity.
|
||||||
@@ -117,15 +119,15 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
|||||||
List<SimpleTree> children = new ArrayList<>();
|
List<SimpleTree> children = new ArrayList<>();
|
||||||
String astEditScripts = "";
|
String astEditScripts = "";
|
||||||
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
|
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
|
||||||
/**
|
// /**
|
||||||
* Select edit scripts for deep learning.
|
// * Select edit scripts for deep learning.
|
||||||
* Edit scripts will be used to mine common fix patterns.
|
// * Edit scripts will be used to mine common fix patterns.
|
||||||
*/
|
// */
|
||||||
// 1. First level: AST node type.
|
// // 1. First level: AST node type.
|
||||||
astEditScripts += getASTEditScripts(hunkActionSet);
|
// astEditScripts += getASTEditScripts(hunkActionSet);
|
||||||
// 2. source code: raw tokens
|
// // 2. source code: raw tokens
|
||||||
// 3. abstract identifiers:
|
// // 3. abstract identifiers:
|
||||||
// 4. semi-source code:
|
// // 4. semi-source code:
|
||||||
|
|
||||||
int actionBugStart = hunkActionSet.getBugStartLineNum();
|
int actionBugStart = hunkActionSet.getBugStartLineNum();
|
||||||
int actionBugEnd = hunkActionSet.getBugEndLineNum();
|
int actionBugEnd = hunkActionSet.getBugEndLineNum();
|
||||||
@@ -141,8 +143,14 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
|||||||
} else if (actionFixStart != 0 && actionFixStart < fixStartLine) {
|
} else if (actionFixStart != 0 && actionFixStart < fixStartLine) {
|
||||||
fixStartLine = actionFixStart;
|
fixStartLine = actionFixStart;
|
||||||
}
|
}
|
||||||
if (bugEndLine < actionBugEnd) bugEndLine = actionBugEnd;
|
if (bugEndLine < actionBugEnd) {
|
||||||
if (fixEndLine < actionFixEnd) fixEndLine = actionFixEnd;
|
bugEndLine = actionBugEnd;
|
||||||
|
bugEndPosition = hunkActionSet.getBugEndPosition();
|
||||||
|
}
|
||||||
|
if (fixEndLine < actionFixEnd) {
|
||||||
|
fixEndLine = actionFixEnd;
|
||||||
|
fixEndPosition = hunkActionSet.getFixEndPosition();
|
||||||
|
}
|
||||||
|
|
||||||
SimplifyTree abstractIdentifier = new SimplifyTree();
|
SimplifyTree abstractIdentifier = new SimplifyTree();
|
||||||
abstractIdentifier.abstractTree(hunkActionSet);
|
abstractIdentifier.abstractTree(hunkActionSet);
|
||||||
@@ -168,12 +176,22 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
|||||||
// Source Code of patches.
|
// Source Code of patches.
|
||||||
String patchSourceCode = getPatchSourceCode(prevFile, revFile, bugStartLine, bugEndLine, fixStartLine, fixEndLine, isInsert);
|
String patchSourceCode = getPatchSourceCode(prevFile, revFile, bugStartLine, bugEndLine, fixStartLine, fixEndLine, isInsert);
|
||||||
if ("".equals(patchSourceCode)) continue;
|
if ("".equals(patchSourceCode)) continue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select edit scripts for deep learning.
|
||||||
|
* Edit scripts will be used to mine common fix patterns.
|
||||||
|
*/
|
||||||
|
// 1. First level: AST node type.
|
||||||
|
astEditScripts += getASTEditScripts(hunkActionSets, bugEndPosition, fixEndPosition);
|
||||||
|
// 2. source code: raw tokens
|
||||||
|
// 3. abstract identifiers:
|
||||||
|
// 4. semi-source code:
|
||||||
int size = astEditScripts.split(" ").length;
|
int size = astEditScripts.split(" ").length;
|
||||||
if (size == 1) continue;
|
if (size == 1) continue;
|
||||||
|
|
||||||
counter ++;
|
counter ++;
|
||||||
String patchPosition = "";//"###:" + counter + "\n" + revFile.getName() + "\nPosition: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
|
String patchPosition = "";//"###:" + counter + "\n" + revFile.getName() + "\nPosition: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
|
||||||
this.patchesSourceCode += Configuration.PATCH_SIGNAL + "\n" + patchPosition + patchSourceCode + "\nAST diff:\n" + getAstEditScripts(hunkActionSets) + "\n";
|
this.patchesSourceCode += Configuration.PATCH_SIGNAL + "\n" + patchPosition + patchSourceCode + "\nAST diff:\n" + getAstEditScripts(hunkActionSets, bugEndPosition, fixEndPosition) + "\n";
|
||||||
this.sizes += size + "\n";
|
this.sizes += size + "\n";
|
||||||
this.astEditScripts += astEditScripts + "\n";
|
this.astEditScripts += astEditScripts + "\n";
|
||||||
this.alarmTypes += violation.getAlarmType() + "\n";
|
this.alarmTypes += violation.getAlarmType() + "\n";
|
||||||
@@ -194,4 +212,30 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
|||||||
return editScripts;
|
return editScripts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getAstEditScripts(List<HierarchicalActionSet> actionSets, int bugEndLine, int fixEndLine) {
|
||||||
|
String editScripts = "";
|
||||||
|
for (HierarchicalActionSet actionSet : actionSets) {
|
||||||
|
editScripts += getActionString(actionSet, bugEndLine, fixEndLine, "");
|
||||||
|
}
|
||||||
|
return editScripts;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getActionString(HierarchicalActionSet actionSet, int bugEndPosition, int fixEndPosition, String startStr) {
|
||||||
|
String editScripts = "";
|
||||||
|
|
||||||
|
editScripts += startStr + actionSet.getActionString() + "\n";
|
||||||
|
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
||||||
|
int bugS = subActionSet.getStartPosition();
|
||||||
|
int fixS = subActionSet.getFixStartLineNum();
|
||||||
|
if (bugS > bugEndPosition || fixS > fixEndPosition) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
editScripts += getActionString(subActionSet, bugEndPosition, fixEndPosition, startStr + "---");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return editScripts;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class Configuration {
|
|||||||
public static final String PATCH_SOURCECODE_FILE = GUM_TREE_OUTPUT + "patchSourceCode.list";
|
public static final String PATCH_SOURCECODE_FILE = GUM_TREE_OUTPUT + "patchSourceCode.list";
|
||||||
public static final String BUGGYTREES_FILE = GUM_TREE_OUTPUT + "buggyTrees.list";
|
public static final String BUGGYTREES_FILE = GUM_TREE_OUTPUT + "buggyTrees.list";
|
||||||
public static final String BUGGY_CODE_TOKENS_FILE = GUM_TREE_OUTPUT + "tokens.list";
|
public static final String BUGGY_CODE_TOKENS_FILE = GUM_TREE_OUTPUT + "tokens.list";
|
||||||
public static final String EDITSCRIPT_SIZES_FILE = GUM_TREE_OUTPUT + "editScriptSizes.list";
|
public static final String EDITSCRIPT_SIZES_FILE = GUM_TREE_OUTPUT + "editScriptSizes.csv";
|
||||||
public static final String ALARM_TYPES_FILE = GUM_TREE_OUTPUT + "alarmTypes.list";
|
public static final String ALARM_TYPES_FILE = GUM_TREE_OUTPUT + "alarmTypes.list";
|
||||||
|
|
||||||
public static final int VECTOR_SIZE_OF_EMBEDED_TOKEN1 = 100; // tokens of edit scripts.
|
public static final int VECTOR_SIZE_OF_EMBEDED_TOKEN1 = 100; // tokens of edit scripts.
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ public class HierarchicalActionSet implements Comparable<HierarchicalActionSet>
|
|||||||
private SimpleTree abstractIdentifierTree = null; // abstract identifier tree
|
private SimpleTree abstractIdentifierTree = null; // abstract identifier tree
|
||||||
private SimpleTree simpleTree = null; // source code tree and AST node type tree
|
private SimpleTree simpleTree = null; // source code tree and AST node type tree
|
||||||
private SimpleTree originalTree = null; // source code tree.
|
private SimpleTree originalTree = null; // source code tree.
|
||||||
|
|
||||||
|
private int bugEndPosition;
|
||||||
|
private int fixEndPosition;
|
||||||
|
|
||||||
public ITree getNode() {
|
public ITree getNode() {
|
||||||
return node;
|
return node;
|
||||||
@@ -171,6 +174,22 @@ public class HierarchicalActionSet implements Comparable<HierarchicalActionSet>
|
|||||||
this.originalTree = originalTree;
|
this.originalTree = originalTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getBugEndPosition() {
|
||||||
|
return bugEndPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBugEndPosition(int bugEndPosition) {
|
||||||
|
this.bugEndPosition = bugEndPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFixEndPosition() {
|
||||||
|
return fixEndPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFixEndPosition(int fixEndPosition) {
|
||||||
|
this.fixEndPosition = fixEndPosition;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(HierarchicalActionSet o) {
|
public int compareTo(HierarchicalActionSet o) {
|
||||||
return this.action.compareTo(o.action);
|
return this.action.compareTo(o.action);
|
||||||
|
|||||||
Reference in New Issue
Block a user