Update regrouper for GumTree output of C code.

This commit is contained in:
Kui LIU
2018-02-15 15:26:42 +01:00
parent 6b00aabc27
commit d31e9f9e21
3 changed files with 22 additions and 21 deletions
@@ -53,7 +53,7 @@ public class FixedViolationHunkParser extends FixedViolationParser {
//Filter out the modify actions, which are not in the DiffEntry hunks.
HunkActionFilter hunkFilter = new HunkActionFilter();
List<DiffEntryHunk> selectedPatchHunks = hunkFilter.filterActionsByLineNumber4C(diffentryHunks, actionSets, revFile, prevFile);
List<DiffEntryHunk> selectedPatchHunks = hunkFilter.matchActionsByDiffEntryForC(diffentryHunks, actionSets, revFile, prevFile);
for (DiffEntryHunk patchHunk : selectedPatchHunks) {
List<HierarchicalActionSet> hunkActionSets = patchHunk.getActionSets();
@@ -29,14 +29,14 @@ public class HierarchicalRegrouperForC {
List<HierarchicalActionSet> actionSets = new ArrayList<>();
public List<HierarchicalActionSet> regroupGumTreeResults(List<Action> actions) {
public List<HierarchicalActionSet> regroupGumTreeResults(List<Action> actionsArgu) {
/*
* First, sort actions by their positions.
*/
// List<Action> actions = new ListSorter<Action>(actionsArgu).sortAscending();
// if (actions == null) {
// actions = actionsArgu;
// }
List<Action> actions = new ListSorter<Action>(actionsArgu).sortAscending();
if (actions == null) {
actions = actionsArgu;
}
/*
* Second, group actions by their positions.
@@ -352,37 +352,38 @@ public class HunkActionFilter {
return selectedViolations;
}
public List<DiffEntryHunk> filterActionsByLineNumber4C(List<DiffEntryHunk> diffentryHunks,
/**
* Match hierarchical actions with code change diffs for C code.
*
* @param diffentryHunks
* @param actionSets
* @param revFile
* @param prevFile
* @return
*/
public List<DiffEntryHunk> matchActionsByDiffEntryForC(List<DiffEntryHunk> diffentryHunks,
List<HierarchicalActionSet> actionSets, File revFile, File prevFile) {
List<DiffEntryHunk> selectedViolations = new ArrayList<>();
for (DiffEntryHunk diffentryHunk : diffentryHunks) {
// int violationEndLine = violationStartLine + diffentryHunk.getBugRange();
int bugHunkStartLine = diffentryHunk.getBugLineStartNum();
int bugHunkEndLine = bugHunkStartLine + diffentryHunk.getBugRange() - 1;
int fixHunkStartLine = diffentryHunk.getFixLineStartNum();
int fixHunkEndLine = fixHunkStartLine + diffentryHunk.getFixedHunkSize() - 1;
for (HierarchicalActionSet actionSet : actionSets) {
int actionBugStartLine = actionSet.getBugStartLineNum();
// if (actionBugStartLine == 0) {
// actionBugStartLine = setLineNumbers(actionSet, prevUnit, revUnit);
// }
int actionBugEndLine = actionSet.getBugEndLineNum();
int actionFixStartLine = actionSet.getFixStartLineNum();
int actionFixEndLine = actionSet.getFixEndLineNum();
String actionStr = actionSet.getActionString();
if (actionStr.startsWith("INS")) {
int actionFixStartLine = actionSet.getBugStartLineNum();
int actionFixEndLine = actionSet.getBugEndLineNum();
if (fixHunkStartLine <= actionFixEndLine && fixHunkEndLine >= actionFixStartLine ) {
if (actionBugStartLine != 0) {
diffentryHunk.getActionSets().add(actionSet);
}
diffentryHunk.getActionSets().add(actionSet);
}
} else {
int actionBugStartLine = actionSet.getBugStartLineNum();
int actionBugEndLine = actionSet.getBugEndLineNum();
if (bugHunkStartLine <= actionBugEndLine && bugHunkEndLine >= actionBugStartLine) {
diffentryHunk.getActionSets().add(actionSet);
}