Skip to content

Commit

Permalink
Fix for issue #389
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Apr 10, 2023
1 parent ef543b6 commit 8d41ce1
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 0 deletions.
77 changes: 77 additions & 0 deletions src-test/Data/nutz-de7efe40dad0f4bb900c4fffa80ed377745532b3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
public migration(dao Dao, klass Class<?>, add boolean, del boolean) : void -> public migration(dao Dao, klass Class<?>, add boolean, del boolean, tableName Object) : void
line range:546-546==line range:659-659
line range:548-548==line range:661-661
line range:549-549==line range:662-662
line range:550-550==line range:663-663
line range:551-551==line range:664-664
line range:604-604==line range:752-752
line range:554-554==line range:671-671
line range:555-555==line range:672-672
line range:556-556==line range:673-673
line range:559-559==line range:676-676
line range:560-560==line range:677-677
line range:561-561==line range:678-678
line range:563-563==line range:680-680
line range:564-564==line range:681-681
line range:566-566==line range:683-683
line range:569-569==line range:686-686
line range:572-572==line range:689-689
line range:575-575==line range:692-694
line range:587-587==line range:735-735
line range:580-580==line range:728-728
line range:585-585==line range:733-733
line range:586-586==line range:734-734
line range:588-588==line range:736-736
line range:589-589==line range:737-737
line range:595-595==line range:743-743
line range:599-599==line range:747-747
line range:554-554==line range:671-671
line range:555-555==line range:672-672
line range:556-556==line range:673-673
line range:559-559==line range:676-676
line range:560-560==line range:677-677
line range:561-561==line range:678-678
line range:563-563==line range:680-680
line range:564-564==line range:681-681
line range:566-566==line range:683-683
line range:569-569==line range:686-686
line range:572-572==line range:689-689
line range:575-575==line range:692-694
line range:587-587==line range:735-735
line range:580-580==line range:728-728
line range:585-585==line range:733-733
line range:586-586==line range:734-734
line range:588-588==line range:736-736
line range:589-589==line range:737-737
line range:595-595==line range:743-743
line range:599-599==line range:747-747
line range:571-571==line range:688-688
line range:576-576==line range:727-727
line range:565-567==line range:682-684
line range:570-573==line range:687-690
line range:574-581==line range:691-729
line range:568-582==line range:685-730
line range:584-590==line range:732-738
line range:583-591==line range:731-739
line range:557-600==line range:674-748
line range:594-595==line range:742-743
line range:593-596==line range:741-744
line range:598-600==line range:746-748
line range:565-567==line range:682-684
line range:570-573==line range:687-690
line range:574-581==line range:691-729
line range:568-582==line range:685-730
line range:584-590==line range:732-738
line range:583-591==line range:731-739
line range:552-602==line range:668-750
line range:547-548==line range:660-661
line range:603-605==line range:751-753
line range:565-567==line range:682-684
line range:570-573==line range:687-690
line range:574-581==line range:691-729
line range:568-582==line range:685-730
line range:584-590==line range:732-738
line range:583-591==line range:731-739
line range:603-605==line range:751-753
line range:553-601==line range:669-749
public migration(dao Dao, klass Class<?>, add boolean, del boolean) : void -> public migration(dao Dao, klass Class<?>, add boolean, del boolean) : void
34 changes: 34 additions & 0 deletions src-test/org/refactoringminer/test/TestStatementMappings.java
Original file line number Diff line number Diff line change
Expand Up @@ -1109,6 +1109,40 @@ public void handle(String commitId, List<Refactoring> refactorings) {
Assert.assertTrue(expected.size() == actual.size() && expected.containsAll(actual) && actual.containsAll(expected));
}

@Test
public void testExtractMethodStatementMappings12() throws Exception {
GitHistoryRefactoringMiner miner = new GitHistoryRefactoringMinerImpl();
Repository repo = gitService.cloneIfNotExists(
REPOS + "/nutz",
"https://github.com/nutzam/nutz.git");

final List<String> actual = new ArrayList<>();
miner.detectAtCommit(repo, "de7efe40dad0f4bb900c4fffa80ed377745532b3", new RefactoringHandler() {
@Override
public void handle(String commitId, List<Refactoring> refactorings) {
List<UMLOperationBodyMapper> parentMappers = new ArrayList<>();
for (Refactoring ref : refactorings) {
if(ref instanceof ExtractOperationRefactoring) {
ExtractOperationRefactoring ex = (ExtractOperationRefactoring)ref;
UMLOperationBodyMapper bodyMapper = ex.getBodyMapper();
if(!bodyMapper.isNested()) {
if(!parentMappers.contains(bodyMapper.getParentMapper())) {
parentMappers.add(bodyMapper.getParentMapper());
}
}
mapperInfo(bodyMapper, actual);
}
}
for(UMLOperationBodyMapper parentMapper : parentMappers) {
mapperInfo(parentMapper, actual);
}
}
});

List<String> expected = IOUtils.readLines(new FileReader(System.getProperty("user.dir") + "/src-test/Data/nutz-de7efe40dad0f4bb900c4fffa80ed377745532b3.txt"));
Assert.assertTrue(expected.size() == actual.size() && expected.containsAll(actual) && actual.containsAll(expected));
}

@Test
public void testSlidedStatementMappings() throws Exception {
Repository repository = gitService.cloneIfNotExists(
Expand Down
31 changes: 31 additions & 0 deletions src/gr/uom/java/xmi/decomposition/UMLOperationBodyMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3974,6 +3974,34 @@ else if(isomorphic && (container1.hasTestAnnotation() || container1.getName().st
for(ListIterator<? extends AbstractCodeFragment> leafIterator1 = leaves1.listIterator(); leafIterator1.hasNext();) {
AbstractCodeFragment leaf1 = leafIterator1.next();
if(!alreadyMatched1(leaf1)) {
List<AbstractCodeFragment> matchingLeaves1 = new ArrayList<>();
Set<AbstractCodeFragment> parents1 = new HashSet<>();
for(AbstractCodeFragment l1 : leaves1) {
if(l1.getString().equals(leaf1.getString())) {
matchingLeaves1.add(l1);
parents1.add(l1.getParent());
}
}
List<AbstractCodeFragment> matchingLeaves2 = new ArrayList<>();
Set<AbstractCodeFragment> parents2 = new HashSet<>();
for(AbstractCodeFragment l2 : leaves2) {
if(l2.getString().equals(leaf1.getString())) {
matchingLeaves2.add(l2);
parents2.add(l2.getParent());
}
}
boolean allMatchingLeaves1InMethodScope = parents1.size() == 1 && parents1.iterator().next() != null && parents1.iterator().next().getParent() == null;
boolean allMatchingLeaves2InMethodScope = parents2.size() == 1 && parents2.iterator().next() != null && parents2.iterator().next().getParent() == null;
if(matchingLeaves1.size() > matchingLeaves2.size() && matchingLeaves2.size() > 0 && !allMatchingLeaves1InMethodScope && !allMatchingLeaves2InMethodScope) {
processLeaves(matchingLeaves1, matchingLeaves2, parameterToArgumentMap, isomorphic);
for(AbstractCodeMapping mapping : this.mappings) {
leaves2.remove(mapping.getFragment2());
if(mapping.getFragment1().equals(leaf1)) {
leafIterator1.remove();
}
}
continue;
}
TreeSet<LeafMapping> mappingSet = parentMapping != null ? new TreeSet<LeafMapping>(new ScopedLeafMappingComparatorForInline(parentMapping)) : new TreeSet<LeafMapping>();
for(ListIterator<? extends AbstractCodeFragment> leafIterator2 = leaves2.listIterator(); leafIterator2.hasNext();) {
AbstractCodeFragment leaf2 = leafIterator2.next();
Expand Down Expand Up @@ -4214,6 +4242,9 @@ else if(movedOutOfIfElseBranch.size() > 1) {
processLeaves(matchingLeaves1, matchingLeaves2, parameterToArgumentMap, isomorphic);
for(AbstractCodeMapping mapping : this.mappings) {
leaves1.remove(mapping.getFragment1());
if(mapping.getFragment2().equals(leaf2)) {
leafIterator2.remove();
}
}
continue;
}
Expand Down

0 comments on commit 8d41ce1

Please sign in to comment.