![JAR search and dependency download from the Maven repository](/logo.png)
org.evosuite.dse.MainConfig Maven / Gradle / Ivy
/**
* Copyright (C) 2010-2018 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see .
*/
package org.evosuite.dse;
/*
This class is taken and adapted from the DSC tool developed by Christoph Csallner.
Link at :
http://ranger.uta.edu/~csallner/dsc/index.html
*/
import org.evosuite.PackageInfo;
/**
* Constant values
*
*
* Notice our convention of passing Z3PARAM_ parameters to Z3.
*
*
* TODO: Can we merge this with the instrumentation's Config class?
*
* @author [email protected] (Christoph Csallner)
*/
public class MainConfig {
private static MainConfig singleton;
/**
* Singleton
*/
public static MainConfig get() {
return singleton;
}
/**
* If no config set yet, then set a new MainConfig.
*/
public static MainConfig setInstance() {
if (singleton == null)
singleton = new MainConfig();
return get();
}
/**
* If no config set yet, then set conf. This method should only be called if
* conf is an instance of a sub-class of MainConfig.
*/
public static MainConfig setInstance(MainConfig conf) {
if (singleton == null)
singleton = conf;
return get();
}
/**
* Constructor.
*
*
* Should only be called from subclass constructor (or
* {@link #setInstance()}).
*/
protected MainConfig() {
// empty
}
@Help("Do not instrument any of the classes that have any of these prefixes. "
+ "IMPORTANT: InstrumentConfig maintains the same list. "
+ "Both lists have to be updated for Dsc to work properly! "
+ "TODO: Merge these two lists.")
public LinkedStringList DO_NOT_INSTRUMENT_PREFIXES = new LinkedStringList("java.", //$NON-NLS-1$
"javax.", //$NON-NLS-1$ // FIXME: Allow instrumentation of javax: Deal with extension class loader
"sun.", //$NON-NLS-1$
"com.sun.", //$NON-NLS-1$
"$", //$NON-NLS-1$
"org.eclipse.", //$NON-NLS-1$
// "gnu.trove.", //$NON-NLS-1$
"org.junit.", //$NON-NLS-1$
"junit.", //$NON-NLS-1$
// "spoon.", //$NON-NLS-1$
PackageInfo.getEvoSuitePackage()+".", //$NON-NLS-1$
"edu.uta.cse.dbtest.", //$NON-NLS-1$
"edu.uta.cse.tada.", //$NON-NLS-1$
"edu.uta.cse.z3.", //$NON-NLS-1$
"org.objectweb.asm.", //$NON-NLS-1$
"roops.util.", //$NON-NLS-1$ // Reachability benchmarks
"org.apache.derby.", //$NON-NLS-1$ // TaDa
"tada.sqlparser.", //$NON-NLS-1$
"Zql.", //$NON-NLS-1$
"org.jcp.", //$NON-NLS-1$
"org.postgresql.", //$NON-NLS-1$
"edu.umass.cs.", //$NON-NLS-1$ //Kaituo
"com.yourkit.",
// "icse2010.", //$NON-NLS-1$ // Ishtiaque: ICSE 2010
"woda2010.", //$NON-NLS-1$ // Ishtiaque: WODA 2010
// "ecoop2010.", //$NON-NLS-1$// Ishtiaque: ECOOP 2010
"com.accenture.lab.crest.vm.", //$NON-NLS-1$//ISHTIAQUE: CREST
"com.mysql.", //$NON-NLS-1$ //Ishtiauqe MySQL access,
"org.apache.oro.text.regex." //$NON-NLS-1$
);
@Help("Prefixes of classes that will always be explored symbolically, "
+ "regardless if they appear in DO_NOT_INSTRUMENT_PREFIXES. "
+ "IMPORTANT: InstrumentConfig maintains the same list. "
+ "Both lists have to be updated for Dsc to work properly! "
+ "TODO: Merge these two lists.")
public LinkedStringList DO_INSTRUMENT_PREFIXES = new LinkedStringList(
"com.sun.javadoc.", //$NON-NLS-1$
"roops.util.RoopsArray" //$NON-NLS-1$
);
/* JUNIT options of generated JUnit test cases */
/* MOCK options */
/* General options */
/*
* DBTEST options FIXME(Mahbub): Move all DB-Test options into a separate
* class
*/
/* REPAIR options */
/* CREST / CARFAST options */
/* DUMP options */
/* General exploration options */
// TODO: implement MAX_SAT_CALLS_PATH
// @Help("USE_MAX ==> Maximum number of SAT calls Dsc will issue for a single "
// +
// "execution path through user code")
// public int MAX_SAT_CALLS_PATH = 5;
@Help("Artificial maximum number of local variables in a method/constructor")
public int MAX_LOCALS_DEFAULT = 200;
public final String CLINIT = ""; //$NON-NLS-1$
public final String INIT = ""; //$NON-NLS-1$
// TODO: Implement this, should be similar to running all Roops methods
// @Help("Run on all public static methods declared by public classes")
// public boolean RUN_ON_ALL_PUBLIC_PUBLIC_STATIC_METHODS = false;
// TODO: Refactor the Roops flags
// @Help("Run on all Roops benchmark methods")
// public boolean RUN_ON_ALL_ROOPS_BENCHMARK_METHODS = false;
/**
* TODO: Get a more precise answer by calling getAllLoadedClasses() on the
* java.lang.instrument.Instrumentation instance passed to our JvmAgent and
* diffing it with the list of classes we transformed.
*
* @param typeName
* some/package/SomeType
* @return if we omit typeName from instrumentation
*/
public boolean isIgnored(String type) {
String typeName = type.replace('/', '.'); //$NON-NLS-1$ //$NON-NLS-2$
for (String prefix : DO_INSTRUMENT_PREFIXES)
// positive list overrides exclusions
if (typeName.startsWith(prefix))
return false;
for (String prefix : DO_NOT_INSTRUMENT_PREFIXES)
if (typeName.startsWith(prefix))
return true;
return false;
}
/* LOG options */
// @Help("log trivially true conjuncts (x==x) etc. when logging the path condition in Dsc notation")
// public boolean LOG_PATH_COND_DSC_TRIVIAL_TRUE = false;
/* Convention: We represent a Z3 parameter PPP with as Z3PARAM_PPP */
/*
* Z3 configuration parameters.
*
* The parameters (together with their default values and description) are
* copied verbatim from the output of Z3 version 1.3: z3.exe
* -ini?
*
* You have to set these flags before creating a Z3 context, otherwise your
* settings will be ignored.
*/
@Help("Class path for finding new classes")
public String CLASS_PATH = System.getProperty("java.class.path");
}