package rocks.inspectit.agent.java.analyzer;

/**
 * This interface is used to delegate the analysis and instrumentation of the given bytecode from
 * the javaagent.
 *
 * @author <NAME>
 *
 */
public interface IByteCodeAnalyzer {

	/**
	 * The method returns the instrumented bytecode of the class which is passed to this method as
	 * the first parameter.
	 *
	 * @param byteCode
	 *            The bytecode, which is necessary to check if a parent class is registered by a
	 *            sensor and needs to be installed for every child class.
	 * @param className
	 *            The class name.
	 * @param classLoader
	 *            The class loader.
	 * @return The instrumented byte code or <code>null</code> if nothing was done (or an error
	 *         happened)
	 */
	byte[] analyzeAndInstrument(byte[] byteCode, String className, ClassLoader classLoader);

}
