Skip to content

Commit

Permalink
Faster implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
tsantalis committed Apr 5, 2024
1 parent 2ed457a commit eb5ebca
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 19 deletions.
39 changes: 39 additions & 0 deletions src/main/java/org/codetracker/BaseTrackerWithLocalFiles.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import gr.uom.java.xmi.decomposition.AbstractCodeFragment;
import gr.uom.java.xmi.decomposition.UMLOperationBodyMapper;
import gr.uom.java.xmi.diff.*;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.codetracker.api.Version;
import org.codetracker.element.Method;
Expand Down Expand Up @@ -526,6 +528,43 @@ protected Pair<UMLModel, UMLModel> getUMLModels(String commitId, Set<String> lef
return Pair.of(leftModel, rightModel);
}

public CommitModel getLightCommitModel(String commitId, String currentMethodFilePath) throws Exception {
File rootFolder = new File(REPOS);
final String systemFileSeparator = Matcher.quoteReplacement(File.separator);
String repoName = cloneURL.substring(cloneURL.lastIndexOf('/') + 1, cloneURL.lastIndexOf('.'));
String jsonFilePath = repoName + "-" + commitId + ".json";
File jsonFile = new File(rootFolder, jsonFilePath);
if(jsonFile.exists()) {
final ObjectMapper mapper = new ObjectMapper();
ChangedFileInfo changedFileInfo = mapper.readValue(jsonFile, ChangedFileInfo.class);
String parentCommitId = changedFileInfo.getParentCommitId();
Set<String> repositoryDirectoriesBefore = ConcurrentHashMap.newKeySet();
Set<String> repositoryDirectoriesCurrent = ConcurrentHashMap.newKeySet();
Map<String, String> fileContentsBefore = new ConcurrentHashMap<String, String>();
Map<String, String> fileContentsCurrent = new ConcurrentHashMap<String, String>();
Map<String, String> renamedFilesHint = new ConcurrentHashMap<String, String>();
repositoryDirectoriesBefore.addAll(changedFileInfo.getRepositoryDirectoriesBefore());
repositoryDirectoriesCurrent.addAll(changedFileInfo.getRepositoryDirectoriesCurrent());
renamedFilesHint.putAll(changedFileInfo.getRenamedFilesHint());
for(String filePathBefore : changedFileInfo.getFilesBefore()) {
if(filePathBefore.equals(currentMethodFilePath)) {
String fullPath = rootFolder + File.separator + repoName + "-" + parentCommitId + File.separator + filePathBefore.replaceAll("/", systemFileSeparator);
String contents = FileUtils.readFileToString(new File(fullPath));
fileContentsBefore.put(filePathBefore, contents);
}
}
for(String filePathCurrent : changedFileInfo.getFilesCurrent()) {
if(filePathCurrent.equals(currentMethodFilePath)) {
String fullPath = rootFolder + File.separator + repoName + "-" + commitId + File.separator + filePathCurrent.replaceAll("/", systemFileSeparator);
String contents = FileUtils.readFileToString(new File(fullPath));
fileContentsCurrent.put(filePathCurrent, contents);
}
}
return new CommitModel(parentCommitId, repositoryDirectoriesBefore, fileContentsBefore, fileContentsBefore, repositoryDirectoriesCurrent, fileContentsCurrent, fileContentsCurrent, renamedFilesHint, Collections.emptyList());
}
return null;
}

public CommitModel getCommitModel(String commitId) throws Exception {
Set<String> repositoryDirectoriesBefore = ConcurrentHashMap.newKeySet();
Set<String> repositoryDirectoriesCurrent = ConcurrentHashMap.newKeySet();
Expand Down
24 changes: 5 additions & 19 deletions src/main/java/org/codetracker/MethodTrackerWithLocalFilesImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,27 +103,13 @@ public History<Method> track() throws Exception {
//System.out.println("processing " + commitId);
analysedCommits.add(commitId);

CommitModel commitModel = getCommitModel(commitId);
String parentCommitId = commitModel.parentCommitId;
CommitModel lightCommitModel = getLightCommitModel(commitId, currentMethodFilePath);
String parentCommitId = lightCommitModel.parentCommitId;
Version currentVersion = new VersionImpl(commitId, 0, 0, "");
Version parentVersion = new VersionImpl(parentCommitId, 0, 0, "");

Set<String> leftFileNames = Collections.singleton(currentMethodFilePath);
Map<String, String> leftFileContents = new LinkedHashMap<>();
for(String leftFileName : leftFileNames) {
if(commitModel.fileContentsBeforeOriginal.containsKey(leftFileName)) {
leftFileContents.put(leftFileName, commitModel.fileContentsBeforeOriginal.get(leftFileName));
}
}
Set<String> rightFileNames = Collections.singleton(currentMethodFilePath);
Map<String, String> rightFileContents = new LinkedHashMap<>();
for(String rightFileName : rightFileNames) {
if(commitModel.fileContentsCurrentOriginal.containsKey(rightFileName)) {
rightFileContents.put(rightFileName, commitModel.fileContentsCurrentOriginal.get(rightFileName));
}
}
UMLModel leftModel = GitHistoryRefactoringMinerImpl.createModel(leftFileContents, commitModel.repositoryDirectoriesBefore);
UMLModel rightModel = GitHistoryRefactoringMinerImpl.createModel(rightFileContents, commitModel.repositoryDirectoriesCurrent);
UMLModel leftModel = GitHistoryRefactoringMinerImpl.createModel(lightCommitModel.fileContentsBeforeOriginal, lightCommitModel.repositoryDirectoriesBefore);
UMLModel rightModel = GitHistoryRefactoringMinerImpl.createModel(lightCommitModel.fileContentsCurrentOriginal, lightCommitModel.repositoryDirectoriesCurrent);

Method rightMethod = getMethod(rightModel, currentVersion, currentMethod::equalIdentifierIgnoringVersion);
if (rightMethod == null) {
Expand Down Expand Up @@ -173,7 +159,7 @@ public History<Method> track() throws Exception {
}
//All refactorings
{
//CommitModel commitModel = getCommitModel(commitId);
CommitModel commitModel = getCommitModel(commitId);
if (!commitModel.moveSourceFolderRefactorings.isEmpty()) {
Set<Method> methodContainerChanged = null;
boolean containerChanged = false;
Expand Down

0 comments on commit eb5ebca

Please sign in to comment.