diff --git a/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryHunk.java b/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryHunk.java index e1497a1..54697d1 100644 --- a/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryHunk.java +++ b/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryHunk.java @@ -7,7 +7,9 @@ public class DiffEntryHunk { private int bugRange; private int fixRange; private String hunk; - + private int buggyHunkSize; + private int fixedHunkSize; + public DiffEntryHunk(int bugLineStartNum, int fixLineStartNum, int bugRange, int fixRange) { super(); this.bugLineStartNum = bugLineStartNum; @@ -40,6 +42,22 @@ public class DiffEntryHunk { this.hunk = hunk; } + public int getBuggyHunkSize() { + return buggyHunkSize; + } + + public void setBuggyHunkSize(int buggyHunkSize) { + this.buggyHunkSize = buggyHunkSize; + } + + public int getFixedHunkSize() { + return fixedHunkSize; + } + + public void setFixedHunkSize(int fixedHunkSize) { + this.fixedHunkSize = fixedHunkSize; + } + @Override public String toString() { return "@@ -" + this.bugLineStartNum + ", " + this.bugRange + " +" + this.fixLineStartNum + ", " + this.fixRange + "\n" + this.hunk; diff --git a/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryReader.java b/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryReader.java index 4cc2802..d635c99 100644 --- a/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryReader.java +++ b/src/main/java/edu/lu/uni/serval/diffentry/DiffEntryReader.java @@ -149,4 +149,85 @@ public class DiffEntryReader { return diffentryHunks; } + /** + * Read all hunks with pure deleted lines and added lines. + * + * @param diffentryFile + * @return + */ + public List readHunks3(File diffentryFile) { + List diffentryHunks = new ArrayList<>(); + String content = FileHelper.readFile(diffentryFile); + BufferedReader reader = null; + try { + reader = new BufferedReader(new StringReader(content)); + String line = null; + int buggyStartLine = 0; + int buggyRange = 0; + int fixedStartLine = 0; + int fixedRange = 0; + int buggyHunkSize = 0; + int fixedHunkSize = 0; + StringBuilder hunk = new StringBuilder(); + + while ((line = reader.readLine()) != null) { + if (RegExp.filterSignal(line.trim())) { + if (hunk.length() > 0) { + if (buggyStartLine > 0) { + DiffEntryHunk diffEntryHunk = new DiffEntryHunk(buggyStartLine, fixedStartLine, buggyRange, fixedRange); + diffEntryHunk.setHunk(hunk.toString()); + diffentryHunks.add(diffEntryHunk); + } + hunk.setLength(0); + } + int plusIndex = line.indexOf("+"); + String lineNum = line.substring(4, plusIndex); + String[] nums = lineNum.split(","); + buggyStartLine = Integer.parseInt(nums[0].trim()); + if (nums.length == 2) { + buggyRange = Integer.parseInt(nums[1].trim()); + } + + String lineNum2 = line.substring(plusIndex) .trim(); + lineNum2 = lineNum2.substring(1, lineNum2.length() - 2); + String[] nums2 = lineNum2.split(","); + fixedStartLine = Integer.parseInt(nums2[0].trim()); + if (nums2.length == 2) { + fixedRange = Integer.parseInt(nums2[1].trim()); + } + continue; + } else { + if (line.startsWith("-")) { + buggyHunkSize ++; + } else if (line.startsWith("+")) { + fixedHunkSize ++; + } + } + hunk.append(line + "\n"); + } + + if (buggyStartLine > 0) { + DiffEntryHunk diffEntryHunk = new DiffEntryHunk(buggyStartLine, fixedStartLine, buggyRange, fixedRange); + diffEntryHunk.setHunk(hunk.toString()); + diffEntryHunk.setBuggyHunkSize(buggyHunkSize); + diffEntryHunk.setFixedHunkSize(fixedHunkSize); + diffentryHunks.add(diffEntryHunk); + } + hunk.setLength(0); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (reader != null) { + reader.close(); + reader = null; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return diffentryHunks; + } }