Update.
This commit is contained in:
@@ -90,15 +90,6 @@ public abstract class Parser implements ParserInterface {
|
||||
return firstAndLastMoveActions;
|
||||
}
|
||||
|
||||
protected String readActionSet(HierarchicalActionSet actionSet, String line) {
|
||||
String str = line + actionSet.getActionString() + "\n";
|
||||
List<HierarchicalActionSet> subActions = actionSet.getSubActions();
|
||||
for (HierarchicalActionSet subAction : subActions) {
|
||||
str += readActionSet(subAction, line + "---");
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
protected String getSemiSourceCodeEditScripts(HierarchicalActionSet actionSet) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
@@ -131,7 +122,7 @@ public abstract class Parser implements ParserInterface {
|
||||
* @param actionSet
|
||||
* @return
|
||||
*/
|
||||
protected String getASTEditScripts(HierarchicalActionSet actionSet) {
|
||||
protected String getASTEditScriptsBreadthFirst(HierarchicalActionSet actionSet) {
|
||||
String editScript = "";
|
||||
|
||||
List<HierarchicalActionSet> actionSets = new ArrayList<>();
|
||||
@@ -144,23 +135,7 @@ public abstract class Parser implements ParserInterface {
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
singleEdit = handleSimpleNameNode(singleEdit, actionStr, index);
|
||||
|
||||
editScript += singleEdit + " ";
|
||||
}
|
||||
@@ -170,6 +145,49 @@ public abstract class Parser implements ParserInterface {
|
||||
return editScript;
|
||||
}
|
||||
|
||||
private String handleSimpleNameNode(String singleEdit, String actionStr, int index) {
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
return singleEdit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the AST node based edit script of patches in terms of deep first.
|
||||
*
|
||||
* @param actionSet
|
||||
* @return
|
||||
*/
|
||||
protected String getASTEditScriptsDeepFirst(HierarchicalActionSet actionSet) {
|
||||
String editScript = "";
|
||||
String actionStr = actionSet.getActionString();
|
||||
int index = actionStr.indexOf("@@");
|
||||
String singleEdit = actionStr.substring(0, index).replace(" ", "");
|
||||
|
||||
singleEdit = handleSimpleNameNode(singleEdit, actionStr, index);
|
||||
|
||||
editScript = singleEdit + " ";
|
||||
|
||||
List<HierarchicalActionSet> subActionSets = actionSet.getSubActions();;
|
||||
for (HierarchicalActionSet subActionSet : subActionSets) {
|
||||
editScript += getASTEditScriptsDeepFirst(subActionSet);
|
||||
}
|
||||
return editScript;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -180,16 +198,16 @@ public abstract class Parser implements ParserInterface {
|
||||
* @param fixEndLine
|
||||
* @return
|
||||
*/
|
||||
protected String getASTEditScripts(List<HierarchicalActionSet> hunkActionSets, int bugEndPosition, int fixEndPosition) {
|
||||
protected String getASTEditScriptsBreadthFirst(List<HierarchicalActionSet> hunkActionSets, int bugEndPosition, int fixEndPosition) {
|
||||
String editScript = "";
|
||||
|
||||
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
|
||||
editScript += getASTEditScripts(hunkActionSet, bugEndPosition, fixEndPosition);
|
||||
editScript += getASTEditScriptsBreadthFirst(hunkActionSet, bugEndPosition, fixEndPosition);
|
||||
}
|
||||
return editScript;
|
||||
}
|
||||
|
||||
private String getASTEditScripts(HierarchicalActionSet hunkActionSet, int bugEndPosition, int fixEndPosition) {
|
||||
private String getASTEditScriptsBreadthFirst(HierarchicalActionSet hunkActionSet, int bugEndPosition, int fixEndPosition) {
|
||||
String editScript = "";
|
||||
List<HierarchicalActionSet> actionSets = new ArrayList<>();
|
||||
actionSets.add(hunkActionSet);
|
||||
@@ -197,37 +215,16 @@ public abstract class Parser implements ParserInterface {
|
||||
List<HierarchicalActionSet> subSets = new ArrayList<>();
|
||||
for (HierarchicalActionSet set : actionSets) {
|
||||
int position = set.getAction().getPosition();
|
||||
|
||||
if (set.getActionString().startsWith("INS")) {
|
||||
if (position > fixEndPosition) {
|
||||
continue;
|
||||
}
|
||||
} else if (!set.getActionString().startsWith("MOV") && position > bugEndPosition) {
|
||||
String actionStr = set.getActionString();
|
||||
if (isOutofPosition(actionStr, position, bugEndPosition, 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
singleEdit = handleSimpleNameNode(singleEdit, actionStr, index);
|
||||
|
||||
editScript += singleEdit + " ";
|
||||
}
|
||||
@@ -236,7 +233,80 @@ public abstract class Parser implements ParserInterface {
|
||||
}
|
||||
return editScript;
|
||||
}
|
||||
|
||||
private boolean isOutofPosition(String actionStr, int actionPosition, int bugEndPosition, int fixEndPosition) {
|
||||
if (actionStr.startsWith("INS")) {
|
||||
if (actionPosition > fixEndPosition) {
|
||||
return true;
|
||||
}
|
||||
} else if (!actionStr.startsWith("MOV") && actionPosition > bugEndPosition) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected String getASTEditScriptsDeepFirst(List<HierarchicalActionSet> hunkActionSets, int bugEndPosition, int fixEndPosition) {
|
||||
String editScript = "";
|
||||
|
||||
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
|
||||
editScript += getASTEditScriptsDeepFirst(hunkActionSet, bugEndPosition, fixEndPosition);
|
||||
}
|
||||
return editScript;
|
||||
}
|
||||
|
||||
private String getASTEditScriptsDeepFirst(HierarchicalActionSet actionSet, int bugEndPosition, int fixEndPosition) {
|
||||
String editScripts = "";
|
||||
String actionStr = actionSet.getActionString();
|
||||
int index = actionStr.indexOf("@@");
|
||||
String singleEdit = actionStr.substring(0, index).replace(" ", "");
|
||||
|
||||
singleEdit = handleSimpleNameNode(singleEdit, actionStr, index);
|
||||
|
||||
editScripts += singleEdit + " ";
|
||||
|
||||
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
||||
int position = subActionSet.getAction().getPosition();
|
||||
actionStr = subActionSet.getActionString();
|
||||
if (isOutofPosition(actionStr, position, bugEndPosition, fixEndPosition)) {
|
||||
continue;
|
||||
}
|
||||
editScripts += getASTEditScriptsDeepFirst(subActionSet, bugEndPosition, fixEndPosition);
|
||||
}
|
||||
|
||||
return editScripts;
|
||||
}
|
||||
|
||||
protected 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 = "";
|
||||
|
||||
String actionStr = actionSet.getActionString();
|
||||
int index = actionStr.indexOf("@@");
|
||||
String singleEdit = actionStr.substring(0, index);
|
||||
|
||||
singleEdit = handleSimpleNameNode(singleEdit, actionStr, index);
|
||||
|
||||
editScripts += startStr + singleEdit + "\n";
|
||||
|
||||
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
||||
int position = subActionSet.getAction().getPosition();
|
||||
actionStr = subActionSet.getActionString();
|
||||
if (isOutofPosition(actionStr, position, bugEndPosition, fixEndPosition)) {
|
||||
continue;
|
||||
}
|
||||
editScripts += getActionString(subActionSet, bugEndPosition, fixEndPosition, startStr + "---");
|
||||
}
|
||||
|
||||
return editScripts;
|
||||
}
|
||||
|
||||
protected void clearITree(HierarchicalActionSet actionSet) {
|
||||
actionSet.getAction().setNode(null);
|
||||
for (HierarchicalActionSet subActionSet : actionSet.getSubActions()) {
|
||||
|
||||
@@ -69,7 +69,7 @@ public class CommitPatchHunkParser extends CommitPatchParser {
|
||||
* Edit scripts will be used to mine common fix patterns.
|
||||
*/
|
||||
// 1. First level: AST node type.
|
||||
astEditScripts += getASTEditScripts(hunkActionSet);
|
||||
astEditScripts += getASTEditScriptsBreadthFirst(hunkActionSet);
|
||||
// 2. source code: raw tokens
|
||||
// 3. abstract identifiers:
|
||||
// 4. semi-source code:
|
||||
|
||||
+1
-1
@@ -121,7 +121,7 @@ public class CommitPatchSingleStatementParser extends CommitPatchParser {
|
||||
* used to mine common fix patterns.
|
||||
*/
|
||||
// 1. First level: AST node type.
|
||||
String astEditScripts = getASTEditScripts(actionSet);
|
||||
String astEditScripts = getASTEditScriptsBreadthFirst(actionSet);
|
||||
int size = astEditScripts.split(" ").length;
|
||||
if (size < 2) {
|
||||
// System.out.println(actionSet);
|
||||
|
||||
+3
-40
@@ -186,7 +186,7 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
||||
* Edit scripts will be used to mine common fix patterns.
|
||||
*/
|
||||
// 1. First level: AST node type.
|
||||
astEditScripts += getASTEditScripts(hunkActionSets, bugEndPosition, fixEndPosition);
|
||||
astEditScripts += getASTEditScriptsDeepFirst(hunkActionSets, bugEndPosition, fixEndPosition);
|
||||
// 2. source code: raw tokens
|
||||
// 3. abstract identifiers:
|
||||
// 4. semi-source code:
|
||||
@@ -194,8 +194,8 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
||||
if (size == 1) continue;
|
||||
|
||||
counter ++;
|
||||
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, bugEndPosition, fixEndPosition) + "\n";
|
||||
String patchPosition = "###:" + counter + "\n" + revFile.getName() + "Position: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
|
||||
this.patchesSourceCode += Configuration.PATCH_SIGNAL + "\nAlarm Type :" + violation.getAlarmType() + "\n" + patchPosition + patchSourceCode + "\nAST Diff###:\n" + getAstEditScripts(hunkActionSets, bugEndPosition, fixEndPosition) + "\n";
|
||||
this.sizes += size + "\n";
|
||||
this.astEditScripts += astEditScripts + "\n";
|
||||
this.alarmTypes += violation.getAlarmType() + "\n";
|
||||
@@ -207,42 +207,5 @@ public class FixedViolationHunkParser extends FixedViolationParser {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getAstEditScripts(List<HierarchicalActionSet> actionSets) {
|
||||
String editScripts = "";
|
||||
for (HierarchicalActionSet actionSet : actionSets) {
|
||||
editScripts += actionSet.toString();
|
||||
}
|
||||
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 position = subActionSet.getAction().getPosition();
|
||||
|
||||
if (subActionSet.getActionString().startsWith("INS")) {
|
||||
if (position > fixEndPosition) {
|
||||
continue;
|
||||
}
|
||||
} else if (!subActionSet.getActionString().startsWith("MOV") && position > bugEndPosition) {
|
||||
continue;
|
||||
}
|
||||
editScripts += getActionString(subActionSet, bugEndPosition, fixEndPosition, startStr + "---");
|
||||
|
||||
}
|
||||
|
||||
return editScripts;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -116,7 +116,7 @@ public class FixedViolationSingleStatementParser extends FixedViolationParser {
|
||||
* Edit scripts will be used to mine common fix patterns.
|
||||
*/
|
||||
// 1. First level: AST node type.
|
||||
String astEditScripts = getASTEditScripts(actionSet);
|
||||
String astEditScripts = getASTEditScriptsBreadthFirst(actionSet);
|
||||
int size = astEditScripts.split(" ").length;
|
||||
if (size == 1) {
|
||||
continue;
|
||||
|
||||
@@ -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/";
|
||||
|
||||
Reference in New Issue
Block a user