001/***
002 * ASM: a very small and fast Java bytecode manipulation framework
003 * Copyright (c) 2000-2011 INRIA, France Telecom
004 * All rights reserved.
005 *
006 * Redistribution and use in source and binary forms, with or without
007 * modification, are permitted provided that the following conditions
008 * are met:
009 * 1. Redistributions of source code must retain the above copyright
010 *    notice, this list of conditions and the following disclaimer.
011 * 2. Redistributions in binary form must reproduce the above copyright
012 *    notice, this list of conditions and the following disclaimer in the
013 *    documentation and/or other materials provided with the distribution.
014 * 3. Neither the name of the copyright holders nor the names of its
015 *    contributors may be used to endorse or promote products derived from
016 *    this software without specific prior written permission.
017 *
018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
028 * THE POSSIBILITY OF SUCH DAMAGE.
029 */
030package io.ebean.enhance.asm.tree;
031
032import io.ebean.enhance.asm.ClassVisitor;
033import io.ebean.enhance.asm.Type;
034
035/**
036 * A node that represents an inner class.
037 * 
038 * @author Eric Bruneton
039 */
040public class InnerClassNode {
041
042    /**
043     * The internal name of an inner class (see
044     * {@link Type#getInternalName() getInternalName}).
045     */
046    public String name;
047
048    /**
049     * The internal name of the class to which the inner class belongs (see
050     * {@link Type#getInternalName() getInternalName}). May be
051     * <tt>null</tt>.
052     */
053    public String outerName;
054
055    /**
056     * The (simple) name of the inner class inside its enclosing class. May be
057     * <tt>null</tt> for anonymous inner classes.
058     */
059    public String innerName;
060
061    /**
062     * The access flags of the inner class as originally declared in the
063     * enclosing class.
064     */
065    public int access;
066
067    /**
068     * Constructs a new {@link InnerClassNode}.
069     * 
070     * @param name
071     *            the internal name of an inner class (see
072     *            {@link Type#getInternalName()
073     *            getInternalName}).
074     * @param outerName
075     *            the internal name of the class to which the inner class
076     *            belongs (see {@link Type#getInternalName()
077     *            getInternalName}). May be <tt>null</tt>.
078     * @param innerName
079     *            the (simple) name of the inner class inside its enclosing
080     *            class. May be <tt>null</tt> for anonymous inner classes.
081     * @param access
082     *            the access flags of the inner class as originally declared in
083     *            the enclosing class.
084     */
085    public InnerClassNode(final String name, final String outerName,
086            final String innerName, final int access) {
087        this.name = name;
088        this.outerName = outerName;
089        this.innerName = innerName;
090        this.access = access;
091    }
092
093    /**
094     * Makes the given class visitor visit this inner class.
095     * 
096     * @param cv
097     *            a class visitor.
098     */
099    public void accept(final ClassVisitor cv) {
100        cv.visitInnerClass(name, outerName, innerName, access);
101    }
102}