12270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/* 22270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ProGuard -- shrinking, optimization, obfuscation, and preverification 32270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * of Java bytecode. 42270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 52270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) 62270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 72270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is free software; you can redistribute it and/or modify it 82270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * under the terms of the GNU General Public License as published by the Free 92270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Software Foundation; either version 2 of the License, or (at your option) 102270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * any later version. 112270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 122270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * This program is distributed in the hope that it will be useful, but WITHOUT 132270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 142270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 152270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * more details. 162270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 172270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * You should have received a copy of the GNU General Public License along 182270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * with this program; if not, write to the Free Software Foundation, Inc., 192270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 202270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 212270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompackage proguard.classfile.attribute.annotation.target; 222270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 232270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.*; 242270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.CodeAttribute; 252270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.annotation.TypeAnnotation; 262270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstromimport proguard.classfile.attribute.annotation.target.visitor.TargetInfoVisitor; 272270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 282270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom/** 292270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Representation of an annotation target. 302270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * 312270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * @author Eric Lafortune 322270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 332270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrompublic abstract class TargetInfo 342270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom{ 352270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public byte u1targetType; 362270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 372270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 382270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 392270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Creates an uninitialized TargetInfo. 402270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 412270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom protected TargetInfo() 422270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 432270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 442270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 452270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 462270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 472270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Creates an initialized TargetInfo. 482270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 492270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom protected TargetInfo(byte u1targetType) 502270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 512270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom this.u1targetType = u1targetType; 522270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 532270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 542270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 552270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 562270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Returns the type of the target. 572270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 582270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public byte getTargetType() 592270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 602270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom return u1targetType; 612270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 622270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 632270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 642270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom // Methods to be implemented by extensions. 652270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 662270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 672270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Accepts the given visitor, in the context of a type annotation on a class. 682270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 692270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public void accept(Clazz clazz, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor) 702270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 712270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a class"); 722270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 732270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 742270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 752270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Accepts the given visitor, in the context of a type annotation on a field. 762270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 772270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public void accept(Clazz clazz, Field field, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor) 782270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 792270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a field"); 802270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 812270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 822270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 832270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Accepts the given visitor, in the context of a type annotation on a method. 842270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 852270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public void accept(Clazz clazz, Method method, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor) 862270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 872270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on a method"); 882270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 892270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom 902270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom /** 912270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom * Accepts the given visitor, in the context of a type annotation code. 922270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom */ 932270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom public void accept(Clazz clazz, Method method, CodeAttribute codeAttribute, TypeAnnotation typeAnnotation, TargetInfoVisitor targetInfoVisitor) 942270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom { 952270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom throw new UnsupportedOperationException("Unsupported type annotation [0x"+Integer.toHexString(u1targetType)+"] on code"); 962270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom } 972270795fbe0b277bfd49f40950ecaa78583175ccBrian Carlstrom} 98