blob: 82b184f652f3c5c7052b0b951616ff8c838b8860 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.bcel.Repository;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.Field;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.ClassGen;
import org.apache.bcel.generic.FieldGen;
import org.apache.bcel.generic.MethodGen;
/**
* Test BCEL if an input file is identical to the outfile generated with BCEL. Of course there may some small
* differences, for example, because BCEL generates local variable tables by default.
*
* Try to:
*
* <pre>
* % java Id <someclass> % java listclass -code <someclass> &gt; foo % java listclass -code <someclass>.clazz &gt; bar %
* diff foo bar | more
*
* <pre>
*/
public class Id {
public static void main(final String[] argv) throws Exception {
JavaClass clazz;
if ((clazz = Repository.lookupClass(argv[0])) == null) {
clazz = new ClassParser(argv[0]).parse(); // May throw IOException
}
final ClassGen cg = new ClassGen(clazz);
for (final Method method : clazz.getMethods()) {
final MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool());
cg.replaceMethod(method, mg.getMethod());
}
for (final Field field : clazz.getFields()) {
final FieldGen fg = new FieldGen(field, cg.getConstantPool());
cg.replaceField(field, fg.getField());
}
cg.getJavaClass().dump(clazz.getClassName() + ".clazz");
}
}