Skip to content

Commit

Permalink
ASTDiff: Update CmdRunner
Browse files Browse the repository at this point in the history
  • Loading branch information
pouryafard75 authored and tsantalis committed Apr 2, 2024
1 parent 76e2d3b commit ba45d36
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 37 deletions.
55 changes: 50 additions & 5 deletions src/main/java/gui/webdiff/WebDiffRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import org.refactoringminer.astDiff.actions.ASTDiff;
import org.refactoringminer.astDiff.actions.ProjectASTDiff;
import org.refactoringminer.astDiff.utils.MappingExportModel;
import org.refactoringminer.astDiff.utils.URLHelper;
import org.refactoringminer.rm1.GitHistoryRefactoringMinerImpl;
import org.refactoringminer.util.GitServiceImpl;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;

import static org.refactoringminer.astDiff.utils.ExportUtils.getFileNameFromSrcDiff;

/* Created by pourya on 2024-02-09*/
public class WebDiffRunner {
private static final int timeout = 1000;
Expand All @@ -24,25 +30,63 @@ public class WebDiffRunner {
String commit;
@Parameter(names = {"-h", "--help"}, description = "Help", help = true)
boolean help;
@Parameter(names = {"-e", "--export"}, description = "Export Mappings/Actions into files")
boolean export = false;


private static final String HELP_MSG = """
You can run the diff with the following options:
--url <commit-url> \t\t Run the diff with a GitHub commit url
--url <pr-url> \t\t Run the diff with a GitHub PullRequest url
--src <folder1> --dst <folder2> \t\t Run the diff with two local directories
--repo <repo-folder-path> --commit <commitID> \t\t Run the diff with a locally cloned GitHub repo
To export the mappings/actions, add --export to the end of the command.
""";
public void execute(String[] args) {
JCommander jCommander = JCommander.newBuilder()
.addObject(this)
.build();
jCommander.parse(args);

if (help) {
jCommander.usage();
System.out.println(HELP_MSG);
// jCommander.usage();
return;
}
RunMode runMode;
try{
runMode = RunMode.getRunMode(this);
}
catch (Exception e){
System.out.println(HELP_MSG);
// jCommander.usage();
return;
}
RunMode runMode = RunMode.getRunMode(this);
try {
ProjectASTDiff projectASTDiff = runMode.getProjectASTDIFF(this);
new WebDiff(projectASTDiff).run();
if (export){
export(projectASTDiff);
}
else
new WebDiff(projectASTDiff).run();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static void export(ProjectASTDiff projectASTDiff) throws IOException {
for (ASTDiff astDiff : projectASTDiff.getDiffSet()) {
String fileNameFromSrcDiff = getFileNameFromSrcDiff(astDiff.getSrcPath());
int lastIndex = fileNameFromSrcDiff.lastIndexOf(".json");
if (lastIndex != -1) {
fileNameFromSrcDiff = fileNameFromSrcDiff.substring(0, lastIndex) + fileNameFromSrcDiff.substring(lastIndex + 5);
}
MappingExportModel.exportToFile(new File(fileNameFromSrcDiff + "_mappings.json"), astDiff.getAllMappings());
MappingExportModel.exportActions(new File(fileNameFromSrcDiff + "_actions.txt"), astDiff);
}
}

enum RunMode{
URL,
PR,
Expand All @@ -56,7 +100,9 @@ public static RunMode getRunMode(WebDiffRunner runner) {
}
else if (runner.src != null && runner.dst != null) return DIR;
else if (runner.repo != null && runner.commit != null) return CLONED;
else throw new RuntimeException("Invalid mode");
else {
throw new RuntimeException("Invalid mode");
}
}

public ProjectASTDiff getProjectASTDIFF(WebDiffRunner runner) throws Exception {
Expand All @@ -77,5 +123,4 @@ public ProjectASTDiff getProjectASTDIFF(WebDiffRunner runner) throws Exception {
};
}
}

}
33 changes: 33 additions & 0 deletions src/main/java/org/refactoringminer/astDiff/utils/ExportUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.refactoringminer.astDiff.utils;

import org.refactoringminer.astDiff.actions.ASTDiff;

/* Created by pourya on 2024-04-02*/
public class ExportUtils {
private static final String JSON_SUFFIX = ".json";
private static final String JAVA_SUFFIX = ".java";
public static String repoToFolder(String repo) {
String folderName = repo.replace("https://github.com/", "").replace(".git","");
return folderName.replace("/","_") + "/";
}
public static String getFinalFilePath(ASTDiff astDiff, String dir, String repo, String commit) {
String exportName = getFileNameFromSrcDiff(astDiff.getSrcPath());
return getFinalFolderPath(dir,repo,commit)+ exportName;
}
public static String getFileNameFromSrcDiff(String astSrcName)
{
String exportName1 = astSrcName.replace(".java","").replace("/",".");
return exportName1 + JSON_SUFFIX;
}
public static String getSrcASTDiffFromFile(String astSrcName)
{
String exportName1 = astSrcName.replace(".","/").replace("/json","");
return exportName1 + JAVA_SUFFIX;
}

public static String getFinalFolderPath(String dir, String repo, String commit) {
String repoFolder = repoToFolder(repo);
return dir + repoFolder + commit + "/";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.io.ActionsIoUtils;
import com.github.gumtreediff.matchers.Mapping;
import com.github.gumtreediff.tree.Tree;
import org.apache.commons.io.FileUtils;
import org.refactoringminer.astDiff.actions.ASTDiff;

import java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -192,4 +197,12 @@ public static void exportToFile(File outputFile, Iterable<Mapping> mappings) thr
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writerWithDefaultPrettyPrinter().writeValue(outputFile, mappingExportModels);
}

public static void exportActions(File outputFile, ASTDiff astDiff) throws IOException {
StringBuilder sb = new StringBuilder();
for (Action a : astDiff.editScript) {
sb.append(a);
}
FileUtils.write(outputFile, sb.toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Set;

import static org.junit.jupiter.api.Assertions.fail;
import static org.refactoringminer.astDiff.utils.ExportUtils.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.*;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Set;

import static org.junit.jupiter.api.Assertions.fail;
import static org.refactoringminer.astDiff.utils.ExportUtils.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.*;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.fail;
import static org.refactoringminer.astDiff.utils.ExportUtils.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.*;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import static org.refactoringminer.astDiff.utils.ExportUtils.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.getSrcASTDiffFromFile;

/* Created by pourya on 2024-02-17*/
public class RefactoringOracleProblematicCasesTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.refactoringminer.astDiff.utils.ExportUtils.*;
import static org.refactoringminer.astDiff.utils.UtilMethods.*;

/* Created by pourya on 2023-02-28 4:48 p.m. */
Expand Down
27 changes: 0 additions & 27 deletions src/test/java/org/refactoringminer/astDiff/utils/UtilMethods.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,41 +12,14 @@ public class UtilMethods {
private static final String TREES_PATH = DIFF_DATA_PATH + "trees";
private static final String perfectInfoFile = "cases.json";
private static final String problematicInfoFile = "cases-problematic.json";
private static final String JSON_SUFFIX = ".json";
private static final String JAVA_SUFFIX = ".java";
public static final String REPOS = System.getProperty("user.dir") + "/src/test/resources/oracle/commits";
private static final String DEFECTS4J_MAPPING_PATH = DIFF_DATA_PATH + "defects4j/";
public static String getDefects4jMappingPath() { return DEFECTS4J_MAPPING_PATH; }

public static String getFinalFilePath(ASTDiff astDiff, String dir, String repo, String commit) {
String exportName = getFileNameFromSrcDiff(astDiff.getSrcPath());
return getFinalFolderPath(dir,repo,commit)+ exportName;
}
public static String getSnapShotPath(String path){
return path.replace("/resources/astDiff/", "/resources/astDiff/PREV-SNAPSHOT/");
}

public static String getFileNameFromSrcDiff(String astSrcName)
{
String exportName1 = astSrcName.replace(".java","").replace("/",".");
return exportName1 + JSON_SUFFIX;
}
public static String getSrcASTDiffFromFile(String astSrcName)
{
String exportName1 = astSrcName.replace(".","/").replace("/json","");
return exportName1 + JAVA_SUFFIX;
}

public static String getFinalFolderPath(String dir, String repo, String commit) {
String repoFolder = repoToFolder(repo);
return dir + repoFolder + commit + "/";
}

public static String repoToFolder(String repo) {
String folderName = repo.replace("https://github.com/", "").replace(".git","");
return folderName.replace("/","_") + "/";
}

public static String getCommitsMappingsPath(){
return COMMITS_MAPPINGS_PATH;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
import java.util.Scanner;
import java.util.Set;

import static org.refactoringminer.astDiff.utils.UtilMethods.*;
import static org.refactoringminer.astDiff.utils.ExportUtils.getFinalFilePath;
import static org.refactoringminer.astDiff.utils.ExportUtils.getFinalFolderPath;
import static org.refactoringminer.astDiff.utils.UtilMethods.getSnapShotPath;

// Command class for the "add" command
@Parameters(commandDescription = "Add files to the index")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@

import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

import static org.refactoringminer.astDiff.utils.UtilMethods.getFinalFolderPath;
import static org.refactoringminer.astDiff.utils.ExportUtils.getFinalFolderPath;


// Command class for the "remove" command
@Parameters(commandDescription = "Remove files from the index")
Expand Down

0 comments on commit ba45d36

Please sign in to comment.