12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis/***
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * ASM: a very small and fast Java bytecode manipulation framework
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Copyright (c) 2000-2007 INRIA, France Telecom
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * All rights reserved.
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * Redistribution and use in source and binary forms, with or without
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * modification, are permitted provided that the following conditions
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * are met:
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * 1. Redistributions of source code must retain the above copyright
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *    notice, this list of conditions and the following disclaimer.
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * 2. Redistributions in binary form must reproduce the above copyright
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *    notice, this list of conditions and the following disclaimer in the
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *    documentation and/or other materials provided with the distribution.
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * 3. Neither the name of the copyright holders nor the names of its
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *    contributors may be used to endorse or promote products derived from
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *    this software without specific prior written permission.
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * THE POSSIBILITY OF SUCH DAMAGE.
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennispackage org.mockito.asm.tree;
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport java.util.Map;
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport org.mockito.asm.MethodVisitor;
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis/**
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * A node that represents a line number declaration. These nodes are pseudo
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * instruction nodes in order to be inserted in an instruction list.
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis *
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis * @author Eric Bruneton
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis */
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennispublic class LineNumberNode extends AbstractInsnNode {
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    /**
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     * A line number. This number refers to the source file from which the class
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     * was compiled.
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     */
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    public int line;
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    /**
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     * The first instruction corresponding to this line number.
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     */
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    public LabelNode start;
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    /**
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     * Constructs a new {@link LineNumberNode}.
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     *
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     * @param line a line number. This number refers to the source file from
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis     *        which the class was compiled.
60     * @param start the first instruction corresponding to this line number.
61     */
62    public LineNumberNode(final int line, final LabelNode start) {
63        super(-1);
64        this.line = line;
65        this.start = start;
66    }
67
68    public int getType() {
69        return LINE;
70    }
71
72    public void accept(final MethodVisitor mv) {
73        mv.visitLineNumber(line, start.getLabel());
74    }
75
76    public AbstractInsnNode clone(final Map labels) {
77        return new LineNumberNode(line, clone(start, labels));
78    }
79}
80