/**********************************************************************
 * This file is part of "Object Teams Dynamic Runtime Environment"
 * 
 * Copyright 2015, 2018 GK Software SE
 * 
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Please visit http://www.eclipse.org/objectteams for updates and contact.
 * 
 * Contributors:
 * 	  Stephan Herrmann - Initial API and implementation
 */
package org.eclipse.objectteams.otredyn.transformer;

import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.objectteams.runtime.IReweavingTask;

/**
 * Callback protocol to let the transformer query its context.
 * @since 1.1.0
 */
public interface IWeavingContext {

	/**
	 * @deprecated please use {@link #isWeavable(String, boolean, boolean)}.
	 */
	@Deprecated
	default boolean isWeavable(String className, boolean considerSupers) {
		return isWeavable(className, considerSupers, true);
	}

	/**
	 * Is the given class included in load-time weaving, i.e., will
	 * the weaving context pass the class to the transformer during
	 * initial loading?
	 * @param className full qualified classname, dot-separated for packages 
	 * 		and dollar-separated for nested classes.
	 * @param considerSupers controls whether super classes should be searched, too.
	 * @param allWeavingReasons should all weaving reasons be considered during this check?
	 * @return true if the given class is included in load-time weaving.
	 * @since 1.3.2
	 */
	boolean isWeavable(String className, boolean considerSupers, boolean allWeavingReasons);
	
	/**
	 * When reweaving for className is required, check if this needs to
	 * be scheduled for later.
	 * <br/>
	 * When answering <code>true</code> the weaving context will remember
	 * the given task and invoke it when ready to do so.
	 * <br/>
	 * When answering <code>false</code> the class can be immediately rewoven,
	 * and the weaving context does not directly participate in this.
	 * @param className full qualified classname, dot-separated for packages 
	 * 		and dollar-separated for nested classes. 
	 * @param task
	 * @return <code>true</code> indicates the task has been scheduled for later.
	 */
	boolean scheduleReweaving(@NonNull String className, @NonNull IReweavingTask task);
}
