Skip to content

Commit

Permalink
multiple fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
nharrand committed Mar 2, 2018
1 parent 84953ed commit 4692dbb
Show file tree
Hide file tree
Showing 17 changed files with 417 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public int parse(String output, String regex) {
*/
public int parse(String[] output) {
Pattern failedTestPattern = Pattern.compile("(\\w+)\\(((\\w+\\.)*\\w+)\\)\\s+Time elapsed:\\s+((\\d+\\.)?\\d+)\\s+sec\\s+<<<\\s+((FAILURE)|(ERROR))!");
Pattern deviationPattern = Pattern.compile(".+>>>> OffTrack <<<<");
Pattern deviationPattern = Pattern.compile(".*\\[OFF TRACK\\].*");


List<String> resultFailedTests = new ArrayList<>();
Expand Down Expand Up @@ -111,6 +111,7 @@ public int parse(String[] output) {
status = 0;
}
}
if((status == 0) && (this.hasDeviated)) status = 1;

//We assume that if no explicit Build success message was issue something really wrong happened
if ( status == -3 ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,10 @@ public void printJavaFile(String directory) throws IOException {
Factory factory = type.getFactory();
Environment env = factory.getEnvironment();

JavaOutputProcessor processor = new JavaOutputProcessor(new File(directory), new DefaultJavaPrettyPrinter(env));
JavaOutputProcessor processor = new JavaOutputProcessor(new DefaultJavaPrettyPrinter(env));
//JavaOutputProcessor processor = new JavaOutputProcessor(new File(directory), new DefaultJavaPrettyPrinter(env));
processor.setFactory(factory);
processor.setOutputDirectory(new File(directory));

processor.createJavaFile(type);
Log.debug("write type {} in directory {}", type.getQualifiedName(), directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import spoon.reflect.declaration.CtType;
import spoon.reflect.declaration.ModifierKind;
import spoon.reflect.factory.Factory;
import spoon.reflect.path.CtPathStringBuilder;
import spoon.reflect.reference.CtTypeReference;

import java.util.ArrayList;
Expand Down Expand Up @@ -48,12 +49,19 @@ public void read(Map<UUID, Transformation> transformations) {
//CodeFragment cf = getCodeFragment(cfJson.getString(POSITION), cfJson.getString(SOURCE_CODE));
//CtStatement tp = (CtStatement) cf.getCtCodeFragment();


CtStatement tp = getInputProgram().findElement(
CtStatement tp = (CtStatement) new CtPathStringBuilder()
.fromString(cfJson.getString("path"))
.evaluateOn(getInputProgram()
.getFactory()
.getModel()
.getRootPackage())
.iterator()
.next();
/*CtStatement tp = getInputProgram().findElement(
Class.forName(cfJson.getString("type")),
cfJson.getString(POSITION),
cfJson.getString(SOURCE_CODE)
);
);*/

if(tp == null) {
System.out.println(cfJson.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,28 +72,7 @@ protected void run(Transformation trans) throws Exception {

try {
int status;
if(trans instanceof AddMethodInvocation) {
AddMethodInvocation a = (AddMethodInvocation) trans;
CtMethod m = a.getTp().getParent(CtMethod.class);
String params = "(";
boolean isFirst = true;
List<CtParameter> ps = m.getParameters();
for(CtParameter p : ps) {
if(isFirst) isFirst = false;
else params +=", ";
params += p.getType().getQualifiedName();
}
params += ")";
String method = m.getDeclaringType().getQualifiedName() + "." +
m.getSimpleName() + params;
Properties p = new Properties();
if(testImpact != null) {
p.setProperty("test", getTests(method));
}
status = runTest(tmpDir, p);
} else {
status = runTest(tmpDir);
}


// if(status == 0) {
Expand Down
88 changes: 88 additions & 0 deletions generator/src/main/java/fr/inria/diversify/runner/SmartRunner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package fr.inria.diversify.runner;

import fr.inria.diversify.statistic.SinglePointSessionResults;
import fr.inria.diversify.transformation.AddMethodInvocation;
import fr.inria.diversify.transformation.SingleTransformation;
import fr.inria.diversify.transformation.Transformation;
import fr.inria.diversify.util.Log;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.CtParameter;

import java.util.List;
import java.util.Properties;

public class SmartRunner extends SinglePointRunner {
public SmartRunner(InputConfiguration inputConfiguration, String projectDir, String srcDir) {
super(inputConfiguration, projectDir, srcDir);

}

private void initTraces() {
String tracesDir = inputConfiguration.getProperty("traces");
if(tracesDir != null) {

}
}

private String buildAgentLine(String test) {
if(inputConfiguration.getProperty("traces") == null) return null;
if(inputConfiguration.getProperty("traceAgent") == null) return null;
if(inputConfiguration.getProperty("tracePackage") == null) return null;
return"-javaagent:" +
inputConfiguration.getProperty("traceAgent") +
"=\"strict-includes|includes=" +
inputConfiguration.getProperty("tracePackage") +
"|excludes=fr.inria.yalta|follow=" +
inputConfiguration.getProperty("traces") +
"/" + test +
"\"";
}

@Override
protected void run(Transformation trans) throws Exception {
Log.info("trial {}", trial);
Log.debug("output dir: " + tmpDir + "/" + sourceDir);
// writePosition(tmpDir + "/transplant.json", (ASTTransformation) trans);

try {
applyTransformation(trans);

try {
int status;
if(trans instanceof SingleTransformation) {
SingleTransformation a = (SingleTransformation) trans;
Properties p = new Properties();
if(testImpact != null) {
p.setProperty("test", getTests(a.methodLocationName()));
p.setProperty("argLine", buildAgentLine(getTests(a.methodLocationName())));
}
status = runTest(tmpDir, p);
} else {
status = runTest(tmpDir);
}


// if(status == 0) {
// writeAllInfo((SingleTransformation) trans, trial);
// }

trans.setStatus(status);
trans.setFailures(builder.getFailedTests());
// error during runTest
} catch (Exception e) {
trans.setStatus(-2);
Log.debug("compile error during diversification", e);
}

trial++;
trans.restore(tmpDir + "/" + sourceDir);

((SinglePointSessionResults) sessionResults).addRunResults(trans);
} catch (Exception e) {
trans.setStatus(-2);
tryRestore(trans, e);
}
transformations.add(trans);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,20 @@ public String packageLocationName() {

@Override
public String methodLocationName() {
return "unknown";

CtMethod m = getTp().getParent(CtMethod.class);
String params = "(";
boolean isFirst = true;
List<CtParameter> ps = m.getParameters();
for(CtParameter p : ps) {
if(isFirst) isFirst = false;
else params +=", ";
params += p.getType().getQualifiedName();
}
params += ")";
String method = m.getDeclaringType().getQualifiedName() + "." +
m.getSimpleName() + params;
return method;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package fr.inria.diversify.transformation;

import fr.inria.diversify.transformation.exception.RestoreTransformationException;
import spoon.reflect.code.CtExpression;
import spoon.reflect.code.CtForEach;
import spoon.reflect.cu.SourcePosition;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.CtPackage;
import spoon.reflect.declaration.CtType;
import spoon.reflect.factory.Factory;

public class ForEachFlip extends SingleTransformation {
CtClass host;
CtForEach tp;
Factory f;
CtType newType;
public ForEachFlip(CtForEach tp) {
host = tp.getParent(CtClass.class);
this.tp = tp;
f = tp.getFactory();
//newType = f.Class().create()
}

@Override
public String classLocationName() {
return null;
}

@Override
public String packageLocationName() {
return null;
}

@Override
public String methodLocationName() {
return null;
}

@Override
public SourcePosition getPosition() {
return null;
}

@Override
public int line() {
return 0;
}

@Override
public String getTransformationString() throws Exception {
return null;
}

@Override
public void apply(String srcDir) throws Exception {
//ctPackage.addType()
CtExpression old = tp.getExpression();
CtExpression newE = f.Code().createCodeSnippetExpression("");
//tp.setExpression()
}

@Override
public void restore(String srcDir) throws RestoreTransformationException {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@
import spoon.reflect.cu.SourcePosition;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.CtPackage;
import spoon.reflect.declaration.CtParameter;
import spoon.reflect.declaration.CtType;
import spoon.reflect.factory.Factory;
import spoon.reflect.reference.CtVariableReference;
import spoon.support.reflect.code.*;

import java.util.List;

/**
* Created by nicolas on 11.10.16.
*/
Expand Down Expand Up @@ -62,7 +65,20 @@ public String packageLocationName() {

@Override
public String methodLocationName() {
return tp.getParent(CtMethod.class).getSimpleName();

CtMethod m = tp.getParent(CtMethod.class);
String params = "(";
boolean isFirst = true;
List<CtParameter> ps = m.getParameters();
for(CtParameter p : ps) {
if(isFirst) isFirst = false;
else params +=", ";
params += p.getType().getQualifiedName();
}
params += ")";
String method = m.getDeclaringType().getQualifiedName() + "." +
m.getSimpleName() + params;
return method;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import spoon.reflect.declaration.*;
import spoon.reflect.factory.Factory;

import java.util.List;

/**
* Created by nharrand on 06/12/16.
*/
Expand Down Expand Up @@ -56,7 +58,20 @@ public String packageLocationName() {

@Override
public String methodLocationName() {
return "unknown";

CtMethod m = tp.getParent(CtMethod.class);
String params = "(";
boolean isFirst = true;
List<CtParameter> ps = m.getParameters();
for(CtParameter p : ps) {
if(isFirst) isFirst = false;
else params +=", ";
params += p.getType().getQualifiedName();
}
params += ")";
String method = m.getDeclaringType().getQualifiedName() + "." +
m.getSimpleName() + params;
return method;
}

@Override
Expand Down
Loading

0 comments on commit 4692dbb

Please sign in to comment.