<?xml version="1.0"?>
<!--
 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.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 https://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Byte Code Engineering Library (BCEL)</title>
    <author email="dev@commons.apache.org">Apache Commons Team</author>
  </properties>

  <body>

  <section name="Abstract">
  <p>
    Extensions and improvements of the programming language Java and
    its related execution environment (Java Virtual Machine, JVM) are
    the subject of a large number of research projects and
    proposals. There are projects, for instance, to add parameterized
    types to Java, to implement <a
    href="https://www.eclipse.org/aspectj/">Aspect-Oriented Programming</a>, to
    perform sophisticated static analysis, and to improve the run-time
    performance.
  </p>

  <p>
    Since Java classes are compiled into portable binary class files
    (called <em>byte code</em>), it is the most convenient and
    platform-independent way to implement these improvements not by
    writing a new compiler or changing the JVM, but by transforming
    the byte code. These transformations can either be performed
    after compile-time, or at load-time. Many programmers are doing
    this by implementing their own specialized byte code manipulation
    tools, which are, however, restricted in the range of their
    re-usability.
  </p>

  <p>
    To deal with the necessary class file transformations, we
    introduce an API that helps developers to conveniently implement
    their transformations.
  </p>
  </section>

  <section name="Table of Contents">
    <ul>
      <li><a href="introduction.html">Introduction</a></li>
      <li><a href="jvm.html">The Java Virtual Machine</a></li>
      <li><a href="bcel-api.html">The BCEL API</a></li>
      <li><a href="application-areas.html">Application Areas</a></li>
      <li><a href="appendix.html">Appendix</a></li>
    </ul>
  </section>

</body>
</document>
