blob: 76c567ec161c40c489c9ef543dcc8a90301191c1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2008, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Knibb initial implementation
* Matthew Webster Eclipse 3.2 changes
* Martin Lippert extracted weaving service factory
* Martin Lippert caching of generated classes
*******************************************************************************/
package org.eclipse.equinox.service.weaving;
import java.io.IOException;
import java.util.Map;
/**
* The IWeavingService is the interface for weavers for individual bundles. This
* weaver is used by the core equinox aspects runtime to weave bytecodes when a
* class is loaded and not read from cache.
*
* @author Martin Lippert
*/
public interface IWeavingService {
/**
* Flush all generated classes from the weaving service so that memory kept
* by the weaving service for additional classes can be freed.
*
* @param loader The class loader the weaving service belongs to
*/
public void flushGeneratedClasses(ClassLoader loader);
/**
* Has the weaving service generated new classes on the fly for the given
* class?
*
* @param loader The class loader of the woven class
* @param className The name of the woven class
* @return true, if the weaving service has generated additional classes for
* the woven class (closures, for example)
*/
public boolean generatedClassesExistFor(ClassLoader loader, String className);
/**
* Returns a map that contains all generated classes for the given class.
* Implementations of this method should remove those classes from internal
* lists (to free memory). This means also that calling this method a second
* time will return an emptry map.
*
* @param className The name of the class for which additional classes were
* generated
* @return The generated classes (key: generated class name, value:
* generated class bytecode)
*/
public Map<String, byte[]> getGeneratedClassesFor(String className);
/**
* The key of a concrete weaver for a bundle defines the setting in which
* the weaver works. This key typically defines a unique key for the set of
* aspects which are woven into this bundle. The core equinox aspects
* runtime uses this key to feed the caching service. This means, the weaver
* should return different keys for different set of aspects (including
* versions), respectively when the cache should switch its context.
*
* @return A unique key to define the set of aspects that are woven into the
* bundle to which this weaver belongs
*/
public String getKey();
/**
* This method is called for each class which is loaded into the JVM and not
* read from cache to do the actual weaving, if necessary.
*
* @param name The fully qualified name of the class to be loaded
* @param classbytes The original unmodified bytecode of the class read by
* the standard OSGi classloading mechanism
* @param loader The classloader whichi s responsible for loading the class
* @return The modified (woven) bytecode of the class or null, if no
* modification happened
* @throws IOException
*/
public byte[] preProcess(String name, byte[] classbytes, ClassLoader loader)
throws IOException;
}