PreMain.java
- /*******************************************************************************
- * Copyright (c) 2009, 2025 Mountainminds GmbH & Co. KG and Contributors
- * This program and the accompanying materials are made available under
- * the terms of the Eclipse Public License 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
- package org.jacoco.agent.rt.internal;
- import java.lang.instrument.Instrumentation;
- import org.jacoco.core.runtime.AgentOptions;
- import org.jacoco.core.runtime.IRuntime;
- import org.jacoco.core.runtime.InjectedClassRuntime;
- import org.jacoco.core.runtime.ModifiedSystemClassRuntime;
- /**
- * The agent which is referred as the <code>Premain-Class</code>. The agent
- * configuration is provided with the agent parameters in the command line.
- */
- public final class PreMain {
- private PreMain() {
- // no instances
- }
- /**
- * This method is called by the JVM to initialize Java agents.
- *
- * @param options
- * agent options
- * @param inst
- * instrumentation callback provided by the JVM
- * @throws Exception
- * in case initialization fails
- */
- public static void premain(final String options, final Instrumentation inst)
- throws Exception {
- final AgentOptions agentOptions = new AgentOptions(options);
- final Agent agent = Agent.getInstance(agentOptions);
- final IRuntime runtime = createRuntime(inst);
- runtime.startup(agent.getData());
- inst.addTransformer(new CoverageTransformer(runtime, agentOptions,
- IExceptionLogger.SYSTEM_ERR));
- }
- private static IRuntime createRuntime(final Instrumentation inst)
- throws Exception {
- if (AgentModule.isSupported()) {
- final AgentModule module = new AgentModule();
- module.openPackage(inst, Object.class);
- final Class<InjectedClassRuntime> clazz = module
- .loadClassInModule(InjectedClassRuntime.class);
- return clazz.getConstructor(Class.class, String.class)
- .newInstance(Object.class, "$JaCoCo");
- }
- return ModifiedSystemClassRuntime.createFor(inst,
- "java/lang/UnknownError");
- }
- }