1*0c56280aSSorin Basca /* 2*0c56280aSSorin Basca * Licensed to the Apache Software Foundation (ASF) under one or more 3*0c56280aSSorin Basca * contributor license agreements. See the NOTICE file distributed with 4*0c56280aSSorin Basca * this work for additional information regarding copyright ownership. 5*0c56280aSSorin Basca * The ASF licenses this file to You under the Apache License, Version 2.0 6*0c56280aSSorin Basca * (the "License"); you may not use this file except in compliance with 7*0c56280aSSorin Basca * the License. You may obtain a copy of the License at 8*0c56280aSSorin Basca * 9*0c56280aSSorin Basca * http://www.apache.org/licenses/LICENSE-2.0 10*0c56280aSSorin Basca * 11*0c56280aSSorin Basca * Unless required by applicable law or agreed to in writing, software 12*0c56280aSSorin Basca * distributed under the License is distributed on an "AS IS" BASIS, 13*0c56280aSSorin Basca * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*0c56280aSSorin Basca * See the License for the specific language governing permissions and 15*0c56280aSSorin Basca * limitations under the License. 16*0c56280aSSorin Basca * 17*0c56280aSSorin Basca */ 18*0c56280aSSorin Basca 19*0c56280aSSorin Basca import org.apache.bcel.Repository; 20*0c56280aSSorin Basca import org.apache.bcel.classfile.ClassParser; 21*0c56280aSSorin Basca import org.apache.bcel.classfile.Field; 22*0c56280aSSorin Basca import org.apache.bcel.classfile.JavaClass; 23*0c56280aSSorin Basca import org.apache.bcel.classfile.Method; 24*0c56280aSSorin Basca import org.apache.bcel.generic.ClassGen; 25*0c56280aSSorin Basca import org.apache.bcel.generic.FieldGen; 26*0c56280aSSorin Basca import org.apache.bcel.generic.MethodGen; 27*0c56280aSSorin Basca 28*0c56280aSSorin Basca /** 29*0c56280aSSorin Basca * Test BCEL if an input file is identical to the outfile generated 30*0c56280aSSorin Basca * with BCEL. Of course there may some small differences, e.g., because 31*0c56280aSSorin Basca * BCEL generates local variable tables by default. 32*0c56280aSSorin Basca * 33*0c56280aSSorin Basca * Try to: 34*0c56280aSSorin Basca * <pre> 35*0c56280aSSorin Basca * % java id <someclass> 36*0c56280aSSorin Basca * % java listclass -code <someclass> > foo 37*0c56280aSSorin Basca * % java listclass -code <someclass>.clazz > bar 38*0c56280aSSorin Basca * % diff foo bar | more 39*0c56280aSSorin Basca * <pre> 40*0c56280aSSorin Basca * 41*0c56280aSSorin Basca * @version $Id$ 42*0c56280aSSorin Basca */ 43*0c56280aSSorin Basca public class id { 44*0c56280aSSorin Basca main(String[] argv)45*0c56280aSSorin Basca public static void main(String[] argv) throws Exception { 46*0c56280aSSorin Basca JavaClass clazz; 47*0c56280aSSorin Basca 48*0c56280aSSorin Basca if ((clazz = Repository.lookupClass(argv[0])) == null) { 49*0c56280aSSorin Basca clazz = new ClassParser(argv[0]).parse(); // May throw IOException 50*0c56280aSSorin Basca } 51*0c56280aSSorin Basca 52*0c56280aSSorin Basca ClassGen cg = new ClassGen(clazz); 53*0c56280aSSorin Basca 54*0c56280aSSorin Basca for (Method method : clazz.getMethods()) { 55*0c56280aSSorin Basca MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool()); 56*0c56280aSSorin Basca cg.replaceMethod(method, mg.getMethod()); 57*0c56280aSSorin Basca } 58*0c56280aSSorin Basca 59*0c56280aSSorin Basca for (Field field : clazz.getFields()) { 60*0c56280aSSorin Basca FieldGen fg = new FieldGen(field, cg.getConstantPool()); 61*0c56280aSSorin Basca cg.replaceField(field, fg.getField()); 62*0c56280aSSorin Basca } 63*0c56280aSSorin Basca 64*0c56280aSSorin Basca cg.getJavaClass().dump(clazz.getClassName() + ".clazz"); 65*0c56280aSSorin Basca } 66*0c56280aSSorin Basca } 67