• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * ProGuard -- shrinking, optimization, obfuscation, and preverification
3  *             of Java bytecode.
4  *
5  * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by the Free
9  * Software Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */
21 package proguard.classfile.attribute.annotation.target;
22 
23 import proguard.classfile.*;
24 import proguard.classfile.attribute.CodeAttribute;
25 import proguard.classfile.attribute.annotation.TypeAnnotation;
26 import proguard.classfile.attribute.annotation.target.visitor.*;
27 
28 /**
29  * Representation of a local variable annotation target.
30  *
31  * @author Eric Lafortune
32  */
33 public class LocalVariableTargetInfo extends TargetInfo
34 {
35     public int                          u2tableLength;
36     public LocalVariableTargetElement[] table;
37 
38 
39     /**
40      * Creates an uninitialized LocalVariableTargetInfo.
41      */
LocalVariableTargetInfo()42     public LocalVariableTargetInfo()
43     {
44     }
45 
46 
47     /**
48      * Creates a partially initialized LocalVariableTargetInfo.
49      */
LocalVariableTargetInfo(byte u1targetType)50     public LocalVariableTargetInfo(byte u1targetType)
51     {
52         super(u1targetType);
53     }
54 
55 
56     /**
57      * Creates an initialized LocalVariableTargetInfo.
58      */
LocalVariableTargetInfo(byte u1targetType, int u2tableLength, LocalVariableTargetElement[] table)59     protected LocalVariableTargetInfo(byte                         u1targetType,
60                                       int                          u2tableLength,
61                                       LocalVariableTargetElement[] table)
62     {
63         super(u1targetType);
64 
65         this.u2tableLength = u2tableLength;
66         this.table         = table;
67     }
68 
69 
70     /**
71      * Applies the given visitor to all target elements.
72      */
targetElementsAccept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, LocalVariableTargetElementVisitor localVariableTargetElementVisitor)73     public void targetElementsAccept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, LocalVariableTargetElementVisitor localVariableTargetElementVisitor)
74     {
75         for (int index = 0; index < u2tableLength; index++)
76         {
77             // We don't need double dispatching here, since there is only one
78             // type of TypePathInfo.
79             localVariableTargetElementVisitor.visitLocalVariableTargetElement(clazz, method, codeAttribute, typeAnnotation, this, table[index]);
80         }
81     }
82 
83 
84     // Implementations for TargetInfo.
85 
86     /**
87      * Lets the visitor visit, with Method and CodeAttribute null.
88      */
accept(Clazz clazz, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)89     public void accept(Clazz clazz, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
90     {
91         targetInfoVisitor.visitLocalVariableTargetInfo(clazz, null, null, typeAnnotation, this);
92     }
93 
94 
accept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)95     public void accept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor)
96     {
97         targetInfoVisitor.visitLocalVariableTargetInfo(clazz, method, codeAttribute, typeAnnotation, this);
98     }
99 }
100