Skip to content

Commit

Permalink
Update spoon version to 5.5.0 (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
danglotb authored and monperrus committed Jan 3, 2017
1 parent 233d558 commit ae6a85c
Show file tree
Hide file tree
Showing 37 changed files with 915 additions and 466 deletions.
12 changes: 10 additions & 2 deletions .travis_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,22 @@

cd ..

git clone https://github.com/DIVERSIFY-project/sosiefier.git
git clone https://github.com/INRIA/spoon.git
cd spoon
mvn install -DskipTests

cd ..

git clone https://github.com/danglotb/sosiefier.git
cd sosiefier
git checkout spoon-version
mvn install

cd ..

git clone https://github.com/DIVERSIFY-project/diversify-profiling.git
git clone https://github.com/danglotb/diversify-profiling.git
cd diversify-profiling
git checkout spoon-version
mvn install

cd ../dspot
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<dependency>
<groupId>fr.inria.gforge.spoon</groupId>
<artifactId>spoon-core</artifactId>
<version>5.1.1</version>
<version>5.5.0-SNAPSHOT</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public CtMethod builder(CtMethod test) {

List<CtLocalVariable> localVar = findAllVariableDeclaration(test.getBody());
boolean isOverride = test.getAnnotations().stream()
.anyMatch(annotation -> !annotation.getSignature().contains("Override"));
.anyMatch(annotation -> !annotation.getAnnotationType().getSimpleName().contains("Override"));
if(localVar.isEmpty() && !isOverride) {
return null;
}
Expand Down Expand Up @@ -113,12 +113,12 @@ protected CtMethod buildRunMethod(CtMethod test, Set<CtTypeReference<? extends

protected boolean isExceptionTest(CtMethod test) {
CtAnnotation<? extends Annotation> annotation = test.getAnnotations().stream()
.filter(anno -> anno.getSignature().contains("Test"))
.filter(anno -> anno.getAnnotationType().getSimpleName().contains("Test"))
.findFirst()
.orElse(null);

if(annotation != null) {
return annotation.getElementValues().containsKey("expected");
return annotation.getValues().containsKey("expected");
}
return false;
}
Expand Down Expand Up @@ -155,7 +155,7 @@ protected Set<CtTypeReference<? extends Throwable>> getThrow(CtMethod mth) {

protected List<CtAnnotation<? extends Annotation>> getAnnotations(CtMethod mth) {
return mth.getAnnotations().stream()
.filter(annotation -> !annotation.getSignature().contains("Override"))
.filter(annotation -> !annotation.getAnnotationType().getSimpleName().contains("Override"))
.collect(Collectors.toList());
}

Expand Down Expand Up @@ -212,7 +212,7 @@ protected void addTeardownStatement(CtMethod mth, CtBlock body) {
protected CtMethod findSetUpMethod(CtType<?> cl) {
for(CtMethod mth : cl.getMethods()) {
if(mth.getSimpleName().toLowerCase().equals("setup")
|| mth.getAnnotations().stream().anyMatch(anno -> anno.getSignature().toLowerCase().contains("before"))) {
|| mth.getAnnotations().stream().anyMatch(anno -> anno.getAnnotationType().getSimpleName().toLowerCase().contains("before"))) {
return mth;
}
}
Expand All @@ -228,7 +228,7 @@ protected CtMethod findSetUpMethod(CtType<?> cl) {
protected CtMethod findTeardownMethod(CtType<?> cl) {
for(CtMethod mth : cl.getMethods()) {
if(mth.getSimpleName().toLowerCase().equals("teardown")
|| mth.getAnnotations().stream().anyMatch(anno -> anno.getSignature().toLowerCase().contains("after"))) {
|| mth.getAnnotations().stream().anyMatch(anno -> anno.getAnnotationType().getSimpleName().toLowerCase().contains("after"))) {
return mth;
}
}
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/fr/inria/diversify/dspot/Amplification.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

import fr.inria.diversify.buildSystem.DiversifyClassLoader;
import fr.inria.diversify.dspot.amp.*;
import fr.inria.diversify.factories.DiversityCompiler;
import fr.inria.diversify.dspot.support.DSpotCompiler;
import fr.inria.diversify.log.branch.Coverage;
import fr.inria.diversify.logger.Logger;
import fr.inria.diversify.runner.InputProgram;
import fr.inria.diversify.testRunner.JunitResult;
import fr.inria.diversify.testRunner.JunitRunner;
import fr.inria.diversify.testRunner.TestRunner;
import fr.inria.diversify.testRunner.TestStatus;
import fr.inria.diversify.util.FileUtils;
import fr.inria.diversify.util.Log;
import fr.inria.diversify.util.PrintClassUtils;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.CtType;

Expand All @@ -32,7 +30,7 @@ public class Amplification {
private InputProgram inputProgram;
private File logDir;
private List<Amplifier> amplifiers;
private DiversityCompiler compiler;
private DSpotCompiler compiler;
private TestSelector testSelector;
private ClassWithLoggerBuilder classWithLoggerBuilder;

Expand All @@ -41,7 +39,7 @@ public class Amplification {
private TestStatus testStatus;
// private Map<Boolean, List<CtMethod>> testsStatus;//should not be there

public Amplification(InputProgram inputProgram, DiversityCompiler compiler, DiversifyClassLoader applicationClassLoader, List<Amplifier> amplifiers, File logDir) {
public Amplification(InputProgram inputProgram, DSpotCompiler compiler, DiversifyClassLoader applicationClassLoader, List<Amplifier> amplifiers, File logDir) {
this.inputProgram = inputProgram;
this.compiler = compiler;
this.applicationClassLoader = applicationClassLoader;
Expand Down Expand Up @@ -151,7 +149,7 @@ private void amplification(CtType originalClass, CtMethod test, int maxIteration
private List<CtMethod> ampTests(Collection<CtMethod> tests) {
return tests.stream()
.flatMap(test -> ampTest(test).stream())
.filter(test -> !test.getBody().getStatements().isEmpty())
.filter(test -> test != null && !test.getBody().getStatements().isEmpty())
.collect(Collectors.toList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.ModifierKind;
import spoon.reflect.reference.CtTypeReference;
import spoon.support.reflect.reference.SpoonClassNotFoundException;
import spoon.support.SpoonClassNotFoundException;

/**
* Created by Benjamin DANGLOT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public static Set<CtType> getImport(CtType type) {
}

public static CtMethod cloneMethod(CtMethod method, String suffix) {
CtMethod cloned_method = method.getFactory().Core().clone(method);
CtMethod cloned_method = method.clone();
cloned_method.setParent(method.getParent());
//rename the clone
cloned_method.setSimpleName(method.getSimpleName()+suffix+cloneNumber);
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/fr/inria/diversify/dspot/DSpot.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import fr.inria.diversify.buildSystem.DiversifyClassLoader;
import fr.inria.diversify.dspot.amp.*;
import fr.inria.diversify.dspot.assertGenerator.AssertGenerator;
import fr.inria.diversify.dspot.support.DSpotCompiler;
import fr.inria.diversify.factories.DiversityCompiler;
import fr.inria.diversify.buildSystem.android.InvalidSdkException;
import fr.inria.diversify.runner.InputConfiguration;
Expand All @@ -29,11 +30,11 @@ public class DSpot {
private List<Amplifier> amplifiers;
private int numberOfIterations;

public DiversityCompiler getCompiler() {
public DSpotCompiler getCompiler() {
return compiler;
}

private DiversityCompiler compiler;
private DSpotCompiler compiler;
private InputProgram inputProgram;
private DiversifyClassLoader applicationClassLoader;
private AssertGenerator assertGenerator;
Expand All @@ -50,7 +51,8 @@ public DSpot(InputConfiguration inputConfiguration) throws InvalidSdkException,
DSpotUtils.compile(inputProgram, mavenHome, mavenLocalRepository);
applicationClassLoader = DSpotUtils.initClassLoader(inputProgram, inputConfiguration);
DSpotUtils.addBranchLogger(inputProgram);
compiler = DSpotUtils.initDiversityCompiler(inputProgram, true);

compiler = DSpotCompiler.buildCompiler(inputProgram, true);
DSpotUtils.compileTests(inputProgram, mavenHome, mavenLocalRepository);

assertGenerator = new AssertGenerator(inputProgram, compiler, applicationClassLoader);
Expand Down
91 changes: 63 additions & 28 deletions src/main/java/fr/inria/diversify/dspot/DSpotUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

import fr.inria.diversify.buildSystem.DiversifyClassLoader;
import fr.inria.diversify.buildSystem.maven.MavenBuilder;
import fr.inria.diversify.factories.DiversityCompiler;
import fr.inria.diversify.dspot.support.DSpotCompiler;
import fr.inria.diversify.logger.Logger;
import fr.inria.diversify.processor.ProcessorUtil;
import fr.inria.diversify.processor.main.AddBlockEverywhereProcessor;
import fr.inria.diversify.processor.main.BranchCoverageProcessor;
import fr.inria.diversify.profiling.processor.main.AbstractLoggingInstrumenter;
import fr.inria.diversify.runner.InputConfiguration;
import fr.inria.diversify.runner.InputProgram;
import fr.inria.diversify.util.FileUtils;
import fr.inria.diversify.util.InitUtils;
import fr.inria.diversify.util.PrintClassUtils;
import fr.inria.diversify.util.*;
import spoon.compiler.Environment;
import spoon.processing.Processor;
import spoon.reflect.factory.Factory;
Expand All @@ -22,10 +20,7 @@

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;

/**
* User: Simon
Expand All @@ -34,31 +29,73 @@
*/
public class DSpotUtils {

public static void addBranchLogger(InputProgram inputProgram) throws IOException {
Factory factory = InitUtils.initSpoon(inputProgram, false);
public static void addBranchLogger(InputProgram inputProgram) {
try {
Factory factory = DSpotCompiler.buildCompiler(inputProgram, false).getFactory();

applyProcessor(factory, new AddBlockEverywhereProcessor(inputProgram));
applyProcessor(factory, new AddBlockEverywhereProcessor(inputProgram));

BranchCoverageProcessor m = new BranchCoverageProcessor(inputProgram, inputProgram.getProgramDir(), true);
m.setLogger(Logger.class.getCanonicalName());
AbstractLoggingInstrumenter.reset();
applyProcessor(factory, m);
BranchCoverageProcessor branchCoverageProcessor = new BranchCoverageProcessor(inputProgram, inputProgram.getProgramDir(), true);
branchCoverageProcessor.setLogger(Logger.class.getCanonicalName());
AbstractLoggingInstrumenter.reset();

File fileFrom = new File(inputProgram.getAbsoluteSourceCodeDir());
PrintClassUtils.printAllClasses(factory, fileFrom, fileFrom);
applyProcessor(factory, branchCoverageProcessor);

String loggerPackage = Logger.class.getPackage().getName().replace(".", "/");
File destDir = new File(inputProgram.getAbsoluteSourceCodeDir() + "/" + loggerPackage);
File srcDir = new File(System.getProperty("user.dir") + "/src/main/java/" + loggerPackage);
FileUtils.forceMkdir(destDir);
File fileFrom = new File(inputProgram.getAbsoluteSourceCodeDir());
printAllClasses(factory, fileFrom, fileFrom);

FileUtils.copyDirectory(srcDir, destDir);
String loggerPackage = Logger.class.getPackage().getName().replace(".", "/");
File destDir = new File(inputProgram.getAbsoluteSourceCodeDir() + "/" + loggerPackage);
File srcDir = new File(System.getProperty("user.dir") + "/src/main/java/" + loggerPackage);
FileUtils.forceMkdir(destDir);

ProcessorUtil.writeInfoFile(inputProgram.getProgramDir());
FileUtils.copyDirectory(srcDir, destDir);

ProcessorUtil.writeInfoFile(inputProgram.getProgramDir());
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static void printAllClasses(Factory factory, File out, File fileFrom) {
//Environment env = factory.getEnvironment();
//JavaOutputProcessorWithFilter processor = new JavaOutputProcessorWithFilter(out, new DefaultJavaPrettyPrinter(env), allClassesName(fileFrom));

factory.Class().getAll().forEach(type -> {
try {
PrintClassUtils.printJavaFile(out, type);
} catch (IOException e) {
e.printStackTrace();
}
});
}

@Deprecated
private static List<String> allClassesName(File dir) {
ArrayList list = new ArrayList();
File[] var2 = dir.listFiles();
int var3 = var2.length;

for(int var4 = 0; var4 < var3; ++var4) {
File file = var2[var4];
if(file.isDirectory()) {
list.addAll(allClassesName(file));
} else {
String name = file.getName();
if(name.endsWith(".java")) {
String[] tmp = name.substring(0, name.length() - 5).split("/");
list.add(tmp[tmp.length - 1]);
}
}
}

return list;
}

public static DiversityCompiler initDiversityCompiler(InputProgram inputProgram, boolean withTest) throws IOException, InterruptedException {
DiversityCompiler compiler = InitUtils.initSpoonCompiler(inputProgram, withTest);


public static DSpotCompiler initDiversityCompiler(InputProgram inputProgram, boolean withTest) throws IOException, InterruptedException {
DSpotCompiler compiler = DSpotCompiler.buildCompiler(inputProgram, withTest);
if(compiler.getBinaryOutputDirectory() == null) {
File classOutputDir = new File("tmpDir/tmpClasses_" + System.currentTimeMillis());
if (!classOutputDir.exists()) {
Expand Down Expand Up @@ -106,9 +143,7 @@ protected static void pCompile(InputProgram inputProgram, String[] phases, Stri

public static DiversifyClassLoader initClassLoader(InputProgram inputProgram, InputConfiguration inputConfiguration) {
Set<String> filter = new HashSet<>();
for(String s : inputConfiguration.getProperty("filter").split(";") ) {
filter.add(s);
}
Collections.addAll(filter, inputConfiguration.getProperty("filter").split(";"));

List<String> classPaths = new ArrayList<>();
classPaths.add(inputProgram.getProgramDir() + "/" + inputProgram.getClassesDir());
Expand Down
Loading

0 comments on commit ae6a85c

Please sign in to comment.