Skip to content

Commit

Permalink
Move arffExtractor/ApiFunctionCall to FocusRascal
Browse files Browse the repository at this point in the history
  • Loading branch information
tdegueul committed Jan 22, 2019
1 parent 1492d85 commit 847c07e
Show file tree
Hide file tree
Showing 29 changed files with 229 additions and 36 deletions.
138 changes: 136 additions & 2 deletions tools/Focus/src/test/java/org/focus/tests/RegressionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;
import java.util.Map;

import org.focus.Configuration;
import org.focus.ContextAwareRecommendation;
import org.focus.SimilarityCalculator;
import org.focus.SuccessCalculator;
Expand All @@ -17,7 +18,8 @@
*/
class RegressionTest {
@Test
void testSHS() {
void testSHS11() {
Configuration conf = Configuration.C1_1;
String srcDir = "../../dataset/SH_S/";
int numOfProjects = 200;
int numOfNeighbours = 2;
Expand All @@ -36,7 +38,139 @@ void testSHS() {

String subFolder = "evaluation/round" + (i + 1);

SimilarityCalculator calculator = new SimilarityCalculator(srcDir, subFolder, trainingStartPos1,
SimilarityCalculator calculator = new SimilarityCalculator(srcDir, subFolder, conf, trainingStartPos1,
trainingEndPos1, trainingStartPos2, trainingEndPos2, testingStartPos, testingEndPos);
calculator.computeProjectSimilarity();

ContextAwareRecommendation engine = new ContextAwareRecommendation(srcDir, subFolder, numOfNeighbours,
testingStartPos, testingEndPos);
engine.recommendation();

SuccessCalculator calc = new SuccessCalculator(srcDir, subFolder, testingStartPos, testingEndPos);
for (Integer n : ns) {
float success = calc.computeSuccessRate(n);

avgSuccess.put(n, avgSuccess.getOrDefault(n, 0f) + success);
}
}

assertEquals(20.5, avgSuccess.get(1) / numOfFolds);
assertEquals(35.0, avgSuccess.get(5) / numOfFolds);
assertEquals(39.0, avgSuccess.get(10) / numOfFolds);
assertEquals(40.0, avgSuccess.get(15) / numOfFolds);
assertEquals(43.0, avgSuccess.get(20) / numOfFolds);
}

@Test
void testSHS12() {
Configuration conf = Configuration.C1_2;
String srcDir = "../../dataset/SH_S/";
int numOfProjects = 200;
int numOfNeighbours = 2;
int numOfFolds = 10;
int step = (int) numOfProjects / numOfFolds;
List<Integer> ns = Arrays.asList(1, 5, 10, 15, 20);
Map<Integer, Float> avgSuccess = new HashMap<>();

for (int i = 0; i < numOfFolds; i++) {
int trainingStartPos1 = 1;
int trainingEndPos1 = i * step;
int trainingStartPos2 = (i + 1) * step + 1;
int trainingEndPos2 = numOfProjects;
int testingStartPos = 1 + i * step;
int testingEndPos = (i + 1) * step;

String subFolder = "evaluation/round" + (i + 1);

SimilarityCalculator calculator = new SimilarityCalculator(srcDir, subFolder, conf, trainingStartPos1,
trainingEndPos1, trainingStartPos2, trainingEndPos2, testingStartPos, testingEndPos);
calculator.computeProjectSimilarity();

ContextAwareRecommendation engine = new ContextAwareRecommendation(srcDir, subFolder, numOfNeighbours,
testingStartPos, testingEndPos);
engine.recommendation();

SuccessCalculator calc = new SuccessCalculator(srcDir, subFolder, testingStartPos, testingEndPos);
for (Integer n : ns) {
float success = calc.computeSuccessRate(n);

avgSuccess.put(n, avgSuccess.getOrDefault(n, 0f) + success);
}
}

assertEquals(20.5, avgSuccess.get(1) / numOfFolds);
assertEquals(35.0, avgSuccess.get(5) / numOfFolds);
assertEquals(39.0, avgSuccess.get(10) / numOfFolds);
assertEquals(40.0, avgSuccess.get(15) / numOfFolds);
assertEquals(43.0, avgSuccess.get(20) / numOfFolds);
}

@Test
void testSHS2_1() {
Configuration conf = Configuration.C2_1;
String srcDir = "../../dataset/SH_S/";
int numOfProjects = 200;
int numOfNeighbours = 2;
int numOfFolds = 10;
int step = (int) numOfProjects / numOfFolds;
List<Integer> ns = Arrays.asList(1, 5, 10, 15, 20);
Map<Integer, Float> avgSuccess = new HashMap<>();

for (int i = 0; i < numOfFolds; i++) {
int trainingStartPos1 = 1;
int trainingEndPos1 = i * step;
int trainingStartPos2 = (i + 1) * step + 1;
int trainingEndPos2 = numOfProjects;
int testingStartPos = 1 + i * step;
int testingEndPos = (i + 1) * step;

String subFolder = "evaluation/round" + (i + 1);

SimilarityCalculator calculator = new SimilarityCalculator(srcDir, subFolder, conf, trainingStartPos1,
trainingEndPos1, trainingStartPos2, trainingEndPos2, testingStartPos, testingEndPos);
calculator.computeProjectSimilarity();

ContextAwareRecommendation engine = new ContextAwareRecommendation(srcDir, subFolder, numOfNeighbours,
testingStartPos, testingEndPos);
engine.recommendation();

SuccessCalculator calc = new SuccessCalculator(srcDir, subFolder, testingStartPos, testingEndPos);
for (Integer n : ns) {
float success = calc.computeSuccessRate(n);

avgSuccess.put(n, avgSuccess.getOrDefault(n, 0f) + success);
}
}

assertEquals(20.5, avgSuccess.get(1) / numOfFolds);
assertEquals(35.0, avgSuccess.get(5) / numOfFolds);
assertEquals(39.0, avgSuccess.get(10) / numOfFolds);
assertEquals(40.0, avgSuccess.get(15) / numOfFolds);
assertEquals(43.0, avgSuccess.get(20) / numOfFolds);
}

@Test
void testSHS22() {
Configuration conf = Configuration.C2_2;
String srcDir = "../../dataset/SH_S/";
int numOfProjects = 200;
int numOfNeighbours = 2;
int numOfFolds = 10;
int step = (int) numOfProjects / numOfFolds;
List<Integer> ns = Arrays.asList(1, 5, 10, 15, 20);
Map<Integer, Float> avgSuccess = new HashMap<>();

for (int i = 0; i < numOfFolds; i++) {
int trainingStartPos1 = 1;
int trainingEndPos1 = i * step;
int trainingStartPos2 = (i + 1) * step + 1;
int trainingEndPos2 = numOfProjects;
int testingStartPos = 1 + i * step;
int testingEndPos = (i + 1) * step;

String subFolder = "evaluation/round" + (i + 1);

SimilarityCalculator calculator = new SimilarityCalculator(srcDir, subFolder, conf, trainingStartPos1,
trainingEndPos1, trainingStartPos2, trainingEndPos2, testingStartPos, testingEndPos);
calculator.computeProjectSimilarity();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry exported="true" kind="lib" path="lib/commons-io-2.6.jar"/>
<classpathentry exported="true" kind="lib" path="lib/org.eclipse.jgit-5.0.1.201806211838-r.jar"/>
<classpathentry exported="true" kind="lib" path="lib/rascal-build-manager.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="lib/org.eclipse.jgit-5.0.1.201806211838-r.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ApiFunctionCall</name>
<name>FocusRascal</name>
<comment></comment>
<projects>
</projects>
Expand Down
10 changes: 10 additions & 0 deletions tools/FocusRascal/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: FocusRascal
Bundle-SymbolicName: FocusRascal
Bundle-Version: 1.0.0
Require-Bundle: rascal_eclipse
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: lib/rascal-build-manager.jar,
lib/org.eclipse.jgit-5.0.1.201806211838-r.jar,
lib/commons-io-2.6.jar
File renamed without changes.
File renamed without changes.
4 changes: 4 additions & 0 deletions tools/FocusRascal/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
bin.includes = META-INF/,\
lib/rascal-build-manager.jar,\
lib/org.eclipse.jgit-5.0.1.201806211838-r.jar,\
lib/commons-io-2.6.jar
Binary file added tools/FocusRascal/lib/commons-io-2.6.jar
Binary file not shown.
Binary file added tools/FocusRascal/lib/rascal-build-manager.jar
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module apiFunctionCall::ExtractMetadata
module focus

import apiFunctionCall::corpus::Download;
import apiFunctionCall::io::File;
import apiFunctionCall::io::FileCSV;
import focus::corpus::Download;
import focus::io::File;
import focus::io::FileCSV;
import IO;
import lang::java::m3::AST;
import lang::java::m3::ClassPaths;
Expand Down Expand Up @@ -57,12 +57,12 @@ void mavenM3(bool githubDownload=true,
loc directory=|file:///home/juri/Documenti/dataset|,
loc
mavenExecutable=|file:///home/juri/development/apache-maven-3.5.4/bin/mvn|,
loc m3sPath=|project://ApiFunctionCall/data/m3/java-projects|) {
loc m3sPath=|project://FocusRascal/data/m3/java-projects|) {
println(directory);
urls = ();
if(githubDownload) {
urls =
getGithubReposURLs(|project://ApiFunctionCall/config/github-repos.properties|);
getGithubReposURLs(|project://FocusRascal/config/github-repos.properties|);
downloadGitHubRepos(directory, urls);
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module apiFunctionCall::corpus::ApiFunctionCall
import apiFunctionCall::corpus::Configuration;
module focus::corpus::ApiFunctionCall

import focus::corpus::Configuration;
import IO;
import lang::java::m3::Core;
import lang::java::jdt::m3::AST;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
module apiFunctionCall::corpus::Configuration
module focus::corpus::Configuration

import Boolean;
import IO;
import List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
module apiFunctionCall::corpus::Download
module focus::corpus::Download

import IO;
import Prelude;

@javaClass{apiFunctionCall.corpus.GithubDownload}
@javaClass{focus.corpus.GithubDownload}
@reflect
java void downloadGithubRepo(str name, loc url, loc directory, bool force = false);

@javaClass{apiFunctionCall.corpus.GithubDownload}
@javaClass{focus.corpus.GithubDownload}
@reflect{for debugging}
public java map[str,loc] getGithubReposURLs(loc config);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package apiFunctionCall.corpus;
package focus.corpus;

import java.io.File;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package apiFunctionCall.corpus;
package focus.corpus;

public class GithubException extends Exception {
private static final long serialVersionUID = 1L;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
module apiFunctionCall::io::File
module focus::io::File

import IO;
import String;


bool existFileWithName(loc directory, str name) {
if(isDirectory(directory)) {
found = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module apiFunctionCall::io::FileCSV
module focus::io::FileCSV

import lang::csv::IO;
import IO;

bool projectExistsInLogFile(
str project,
loc file=|project://ApiFunctionCall/data/m3/java-projects/log.csv|) {
loc file=|project://FocusRascal/data/m3/java-projects/log.csv|) {

items = readCSV(#rel[str,str,str], file, header=false);
if(<name,typ,err> <- items, name == project) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module apiFunctionCall::ContextualSnippets
module focus::m3::ContextualSnippets

import IO;
import lang::java::m3::AST;
Expand All @@ -9,7 +9,7 @@ import Relation;
import Set;
import String;

import apiFunctionCall::Snippets;
import focus::m3::Snippets;


/*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module apiFunctionCall::MethodInvocations
module focus::m3::MethodInvocations

import lang::java::m3::Core;
import List;
import ListRelation;
import Set;

import apiFunctionCall::Snippets;
import focus::m3::Snippets;

// Returns a ListRelation where for a tuple <a,b>:
// a: invoked method; b: line where it is invoked
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module apiFunctionCall::Snippets
module focus::m3::Snippets

import IO;
import lang::java::m3::AST;
Expand All @@ -9,6 +9,57 @@ import Relation;
import Set;
import String;

/**
* Infer M3 models for every sub-directory path/X
* and serialize them into path/X.m3
*/
void inferAllM3s(loc path) {
if (isDirectory(path)) {
for (f <- listEntries(path), isDirectory(path + f)) {
loc project = path + f;
loc dest = path + (project.file + ".m3");

if (!isFile(dest) && project.file != "169011526a201a4653bec249316cb1a3ecae9a7c") {
print("Creating M3 model for <project.file>... ");
M3 m = createM3FromDirectory(project);
println("Done.");
print("Serializing <dest>... ");
writeBinaryValueFile(dest, m);
println("Done.");
} else {
println("<dest> exists. Skipping.");
}
};
} else {
println("<path> does not exist. Skipping.");
}
}

// Meant to be invoked from FOCUS
// Inputs are in the form:
// java/lang/StringBuffer/StringBuffer() : g_xmpcore-5.1.3.jar.txt
str retrieveSnippet(str fun, str project) {
try {
loc m3file = |file:///run/media/dig/Cioran/Research/dataset/SH_L/| + (project + ".m3");

if (isFile(m3file)) {
// Assuming this is a method, but could be a constructor or smth else
// [] should be replaced with %5B%5D
loc fun = |java+method:///<replaceAll(replaceAll(fun, "[", "%5B"), "]", "%5D")>|;
M3 m = readBinaryValueFile(#M3, m3file);

println("Retrieving snippet for <fun>");
println(functionSnippet(fun, m));
} else {
println("Couldnt find <m3file>");
}
} catch MalFormedURI(str l): {
println("Couldnt build a location for <fun>");
};

return "";
}

// Note: use only with M3 models created from source code.
str functionSnippet(loc fun, M3 m3) {
srcs = m3.declarations[fun];
Expand Down
8 changes: 0 additions & 8 deletions tools/arffExtractor/ApiFunctionCall/META-INF/MANIFEST.MF

This file was deleted.

1 change: 0 additions & 1 deletion tools/arffExtractor/ApiFunctionCall/build.properties

This file was deleted.

0 comments on commit 847c07e

Please sign in to comment.