diff --git a/src/main/java/org/codetracker/AbstractTracker.java b/src/main/java/org/codetracker/AbstractTracker.java index 730f5ba56d6..b2d00215098 100644 --- a/src/main/java/org/codetracker/AbstractTracker.java +++ b/src/main/java/org/codetracker/AbstractTracker.java @@ -1,6 +1,7 @@ package org.codetracker; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -377,8 +378,29 @@ protected static Pair getUMLModelPair(final CommitModel comm optimizeUMLModelPair(leftSideUMLModel, rightSideUMLModel, rightSideFileName, commitModel.renamedFilesHint); return Pair.of(leftSideUMLModel, rightSideUMLModel); } else { - UMLModel leftSideUMLModel = GitHistoryRefactoringMinerImpl.createModel(commitModel.fileContentsBeforeTrimmed, commitModel.repositoryDirectoriesBefore); - UMLModel rightSideUMLModel = GitHistoryRefactoringMinerImpl.createModel(commitModel.fileContentsCurrentTrimmed, commitModel.repositoryDirectoriesCurrent); + //remove even the trimmed files, if they are in Move Source Folder refactoring + Map fileContentsBeforeTrimmed = new HashMap<>(commitModel.fileContentsBeforeTrimmed); + Map fileContentsCurrentTrimmed = new HashMap<>(commitModel.fileContentsCurrentTrimmed); + for(String key : commitModel.fileContentsBeforeTrimmed.keySet()) { + for(MoveSourceFolderRefactoring ref : commitModel.moveSourceFolderRefactorings) { + if(key.startsWith(ref.getPattern().getBefore())) { + String rightKey = key.replaceFirst(ref.getPattern().getBefore(), ref.getPattern().getAfter()); + if(commitModel.fileContentsCurrentTrimmed.containsKey(rightKey)) { + fileContentsBeforeTrimmed.remove(key); + fileContentsCurrentTrimmed.remove(rightKey); + } + } + } + } + if(!rightSideFileName.contains("test")) { + for(String key : commitModel.fileContentsBeforeTrimmed.keySet()) { + if(key.contains("test")) { + fileContentsBeforeTrimmed.remove(key); + } + } + } + UMLModel leftSideUMLModel = GitHistoryRefactoringMinerImpl.createModel(fileContentsBeforeTrimmed, commitModel.repositoryDirectoriesBefore); + UMLModel rightSideUMLModel = GitHistoryRefactoringMinerImpl.createModel(fileContentsCurrentTrimmed, commitModel.repositoryDirectoriesCurrent); optimizeUMLModelPair(leftSideUMLModel, rightSideUMLModel, rightSideFileName, commitModel.renamedFilesHint); //remove from rightSideModel the classes not matching the rightSideFileNamePredicate Set rightClassesToBeRemoved = new HashSet<>(); diff --git a/src/main/java/org/codetracker/FileTrackerImpl.java b/src/main/java/org/codetracker/FileTrackerImpl.java index aad914487fa..d26b6824f07 100644 --- a/src/main/java/org/codetracker/FileTrackerImpl.java +++ b/src/main/java/org/codetracker/FileTrackerImpl.java @@ -407,10 +407,12 @@ else if (leftSuperclass == null && rightSuperclass != null) { } } { - Pair umlModelPairAll = getUMLModelPair(commitModel, rightClass.getFilePath(), s -> true, false); + Pair umlModelPairAll = getUMLModelPair(commitModel, rightClass, s -> true, false); UMLModelDiff umlModelDiffAll = umlModelPairAll.getLeft().diff(umlModelPairAll.getRight()); - List refactorings = umlModelDiffAll.getRefactorings(); + List refactorings = umlModelPairAll.getLeft().getClassList().isEmpty() ? + Collections.emptyList() : + umlModelDiffAll.getRefactorings(); Set classRefactored = startClassChangeHistory.analyseClassRefactorings(refactorings, currentVersion, parentVersion, rightClass::equalIdentifierIgnoringVersion); boolean refactored = !classRefactored.isEmpty(); diff --git a/src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java b/src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java index 42d86d46eca..f9dddfd6ee6 100644 --- a/src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java +++ b/src/main/java/org/codetracker/FileTrackerWithLocalFilesImpl.java @@ -415,10 +415,12 @@ else if (leftSuperclass == null && rightSuperclass != null) { } } { - Pair umlModelPairAll = getUMLModelPair(commitModel, rightClass.getFilePath(), s -> true, false); + Pair umlModelPairAll = getUMLModelPair(commitModel, rightClass, s -> true, false); UMLModelDiff umlModelDiffAll = umlModelPairAll.getLeft().diff(umlModelPairAll.getRight()); - List refactorings = umlModelDiffAll.getRefactorings(); + List refactorings = umlModelPairAll.getLeft().getClassList().isEmpty() ? + Collections.emptyList() : + umlModelDiffAll.getRefactorings(); Set classRefactored = startClassChangeHistory.analyseClassRefactorings(refactorings, currentVersion, parentVersion, rightClass::equalIdentifierIgnoringVersion); boolean refactored = !classRefactored.isEmpty();