From 3b504683de41f3ccb1ab3772edd2ca6c579fd539 Mon Sep 17 00:00:00 2001 From: tsantalis Date: Sat, 14 Sep 2024 21:43:32 -0400 Subject: [PATCH] refactoring-aware Javadoc diff --- .../decomposition/UMLOperationBodyMapper.java | 2 +- .../gr/uom/java/xmi/diff/UMLJavadocDiff.java | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/java/gr/uom/java/xmi/decomposition/UMLOperationBodyMapper.java b/src/main/java/gr/uom/java/xmi/decomposition/UMLOperationBodyMapper.java index e7d24a479..51aab83c1 100644 --- a/src/main/java/gr/uom/java/xmi/decomposition/UMLOperationBodyMapper.java +++ b/src/main/java/gr/uom/java/xmi/decomposition/UMLOperationBodyMapper.java @@ -972,7 +972,7 @@ else if(mapping instanceof CompositeStatementObjectMapping) { processLeaves(leaves1, leaves2, new LinkedHashMap(), false); } if(operation1.getJavadoc() != null && operation2.getJavadoc() != null) { - UMLJavadocDiff diff = new UMLJavadocDiff(operation1.getJavadoc(), operation2.getJavadoc()); + UMLJavadocDiff diff = new UMLJavadocDiff(operation1.getJavadoc(), operation2.getJavadoc(), operationSignatureDiff); this.javadocDiff = Optional.of(diff); } this.commentListDiff = new UMLCommentListDiff(container1.getComments(), container2.getComments()); diff --git a/src/main/java/gr/uom/java/xmi/diff/UMLJavadocDiff.java b/src/main/java/gr/uom/java/xmi/diff/UMLJavadocDiff.java index aa5d941b6..8a9be6979 100644 --- a/src/main/java/gr/uom/java/xmi/diff/UMLJavadocDiff.java +++ b/src/main/java/gr/uom/java/xmi/diff/UMLJavadocDiff.java @@ -27,6 +27,7 @@ public class UMLJavadocDiff { private List deletedDocElements; private List addedDocElements; private boolean manyToManyReformat; + private UMLOperationDiff signatureDiff; public UMLJavadocDiff(UMLJavadoc javadocBefore, UMLJavadoc javadocAfter) { this.javadocBefore = javadocBefore; @@ -40,6 +41,26 @@ public UMLJavadocDiff(UMLJavadoc javadocBefore, UMLJavadoc javadocAfter) { this.addedNestedTags = new ArrayList(); this.deletedDocElements = new ArrayList(); this.addedDocElements = new ArrayList(); + process(javadocBefore, javadocAfter); + } + + public UMLJavadocDiff(UMLJavadoc javadocBefore, UMLJavadoc javadocAfter, UMLOperationDiff signatureDiff) { + this.javadocBefore = javadocBefore; + this.javadocAfter = javadocAfter; + this.commonTags = new ArrayList>(); + this.commonNestedTags = new ArrayList>(); + this.commonDocElements = new ArrayList>(); + this.deletedTags = new ArrayList(); + this.addedTags = new ArrayList(); + this.deletedNestedTags = new ArrayList(); + this.addedNestedTags = new ArrayList(); + this.deletedDocElements = new ArrayList(); + this.addedDocElements = new ArrayList(); + this.signatureDiff = signatureDiff; + process(javadocBefore, javadocAfter); + } + + private void process(UMLJavadoc javadocBefore, UMLJavadoc javadocAfter) { List tagsBefore = javadocBefore.getTags(); List tagsAfter = javadocAfter.getTags(); List deletedTags = new ArrayList(tagsBefore); @@ -89,6 +110,30 @@ public UMLJavadocDiff(UMLJavadoc javadocBefore, UMLJavadoc javadocAfter) { break; } } + else if(signatureDiff != null) { + boolean matchFound = false; + for(UMLParameterDiff diff : signatureDiff.getParameterDiffList()) { + if(diff.getRemovedParameter().getName().equals(paramNameBefore) && + diff.getAddedParameter().getName().equals(paramNameAfter)) { + //match name + matchFound = true; + UMLDocElement docElementBefore = tagBefore.getFragments().get(0); + UMLDocElement docElementAfter = tagAfter.getFragments().get(0); + Pair docElementPair = Pair.of(docElementBefore, docElementAfter); + commonDocElements.add(docElementPair); + processModifiedTags(tagBefore, tagAfter); + deletedToBeDeleted.add(tagBefore); + addedToBeDeleted.add(tagAfter); + Pair pair = Pair.of(tagBefore, tagAfter); + commonTags.add(pair); + matchNestedTags(tagBefore, tagAfter); + break; + } + } + if(matchFound) { + break; + } + } } else if(tagBefore.isReturn() && tagAfter.isReturn()) { boolean match = processModifiedTags(tagBefore, tagAfter);