Skip to content

Commit

Permalink
Further performance improvement in blame
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Oct 31, 2024
1 parent 51187d0 commit 3f39ddd
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 6 deletions.
26 changes: 24 additions & 2 deletions src/main/java/org/codetracker/AbstractTracker.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -377,8 +378,29 @@ protected static Pair<UMLModel, UMLModel> 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<String, String> fileContentsBeforeTrimmed = new HashMap<>(commitModel.fileContentsBeforeTrimmed);
Map<String, String> 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<UMLClass> rightClassesToBeRemoved = new HashSet<>();
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/codetracker/FileTrackerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -407,10 +407,12 @@ else if (leftSuperclass == null && rightSuperclass != null) {
}
}
{
Pair<UMLModel, UMLModel> umlModelPairAll = getUMLModelPair(commitModel, rightClass.getFilePath(), s -> true, false);
Pair<UMLModel, UMLModel> umlModelPairAll = getUMLModelPair(commitModel, rightClass, s -> true, false);
UMLModelDiff umlModelDiffAll = umlModelPairAll.getLeft().diff(umlModelPairAll.getRight());

List<Refactoring> refactorings = umlModelDiffAll.getRefactorings();
List<Refactoring> refactorings = umlModelPairAll.getLeft().getClassList().isEmpty() ?
Collections.emptyList() :
umlModelDiffAll.getRefactorings();

Set<Class> classRefactored = startClassChangeHistory.analyseClassRefactorings(refactorings, currentVersion, parentVersion, rightClass::equalIdentifierIgnoringVersion);
boolean refactored = !classRefactored.isEmpty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,10 +415,12 @@ else if (leftSuperclass == null && rightSuperclass != null) {
}
}
{
Pair<UMLModel, UMLModel> umlModelPairAll = getUMLModelPair(commitModel, rightClass.getFilePath(), s -> true, false);
Pair<UMLModel, UMLModel> umlModelPairAll = getUMLModelPair(commitModel, rightClass, s -> true, false);
UMLModelDiff umlModelDiffAll = umlModelPairAll.getLeft().diff(umlModelPairAll.getRight());

List<Refactoring> refactorings = umlModelDiffAll.getRefactorings();
List<Refactoring> refactorings = umlModelPairAll.getLeft().getClassList().isEmpty() ?
Collections.emptyList() :
umlModelDiffAll.getRefactorings();

Set<Class> classRefactored = startClassChangeHistory.analyseClassRefactorings(refactorings, currentVersion, parentVersion, rightClass::equalIdentifierIgnoringVersion);
boolean refactored = !classRefactored.isEmpty();
Expand Down

0 comments on commit 3f39ddd

Please sign in to comment.