View Javadoc

1   /**
2    *  MicroEmulator
3    *  Copyright (C) 2006-2007 Bartek Teodorczyk <barteo@barteo.net>
4    *  Copyright (C) 2006-2007 Vlad Skarzhevskyy
5    *
6    *  It is licensed under the following two licenses as alternatives:
7    *    1. GNU Lesser General Public License (the "LGPL") version 2.1 or any newer version
8    *    2. Apache License (the "AL") Version 2.0
9    *
10   *  You may not use this file except in compliance with at least one of
11   *  the above two licenses.
12   *
13   *  You may obtain a copy of the LGPL at
14   *      http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
15   *
16   *  You may obtain a copy of the AL at
17   *      http://www.apache.org/licenses/LICENSE-2.0
18   *
19   *  Unless required by applicable law or agreed to in writing, software
20   *  distributed under the License is distributed on an "AS IS" BASIS,
21   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22   *  See the LGPL or the AL for the specific language governing permissions and
23   *  limitations.
24   *
25   *  @version $Id: ClassPreprocessor.java 1605 2008-02-25 21:07:14Z barteo $
26   */
27  package org.microemu.app.classloader;
28  
29  import java.io.IOException;
30  import java.io.InputStream;
31  
32  import org.microemu.log.Logger;
33  import org.objectweb.asm.ClassReader;
34  import org.objectweb.asm.ClassVisitor;
35  import org.objectweb.asm.ClassWriter;
36  
37  /**
38   * @author vlads
39   *
40   */
41  public class ClassPreprocessor {
42  
43  	public static byte[] instrument(final InputStream classInputStream, InstrumentationConfig config) {
44  		try {
45  			ClassReader cr = new ClassReader(classInputStream);
46  			ClassWriter cw = new ClassWriter(0);
47  			ClassVisitor cv = new ChangeCallsClassVisitor(cw, config);
48  			cr.accept(cv, 0);
49  			return cw.toByteArray();
50  		} catch (IOException e) {
51  			Logger.error("Error loading MIDlet class", e);
52  			return null;
53  		} 
54      }
55  	
56  }