1 /*** 2 * Julia: France Telecom's implementation of the Fractal API 3 * Copyright (C) 2001-2002 France Telecom R&D 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * 19 * Contact: Eric.Bruneton@rd.francetelecom.com 20 * 21 * Author: Eric Bruneton 22 */ 23 24 package org.objectweb.fractal.julia.asm; 25 26 import org.objectweb.fractal.julia.loader.Loader; 27 import org.objectweb.fractal.julia.loader.Tree; 28 29 /** 30 * The interface that all Julia's class generators must implement. 31 */ 32 33 public interface ClassGenerator { 34 35 /** 36 * Generates the class whose descriptor is given, with the given name. The 37 * generated class must implement the {@link 38 * org.objectweb.fractal.julia.loader.Generated} interface, and its {@link 39 * org.objectweb.fractal.julia.loader.Generated#getFcGeneratorParameters 40 * getFcGeneratorParameters} method must return <tt>args.toString()</tt>. 41 * 42 * @param name the name of the class to be generated. 43 * @param args the descriptor of the class to be generated. This 44 * descriptor <i>must</i> be of the form "(objectDescriptor arg1 ... 45 * argN)" (see {@link 46 * Loader#loadClass(org.objectweb.fractal.julia.loader.Tree) loadClass}). 47 * @param loader the loader to be used to load or generate auxiliary classes, 48 * if needed. 49 * @param classLoader the class loader to be used to load auxiliary classes, 50 * if needed. 51 * @return a class named <tt>name</tt> and whose content is described by the 52 * given class descriptor. 53 * @throws ClassGenerationException if a problem occurs during the generation 54 * of the class. 55 */ 56 57 byte[] generateClass (String name, Tree args, Loader loader, ClassLoader classLoader) 58 throws ClassGenerationException; 59 } 60