001 package edu.rice.cs.cunit.classFile.attributes; 002 003 import edu.rice.cs.cunit.classFile.attributes.visitors.IAttributeVisitor; 004 import edu.rice.cs.cunit.classFile.code.instructions.LineNumberTable; 005 import edu.rice.cs.cunit.classFile.constantPool.APoolInfo; 006 import edu.rice.cs.cunit.classFile.constantPool.AUTFPoolInfo; 007 import edu.rice.cs.cunit.classFile.constantPool.ConstantPool; 008 009 import java.util.ArrayList; 010 011 /** 012 * Represents an unknown attribute in a class file. 013 * 014 * @author Mathias Ricken 015 */ 016 public class UnknownAttributeInfo extends AAttributeInfo { 017 /** 018 * Constructor. 019 * 020 * @param name attribute name 021 * @param data attribute data 022 * @param cp constant pool 023 * 024 * @throws ClassFormatError 025 */ 026 public UnknownAttributeInfo(AUTFPoolInfo name, byte[] data, ConstantPool cp) throws ClassFormatError { 027 super(name, data, cp); 028 } 029 030 /** 031 * Execute a visitor on this attribute. 032 * 033 * @param visitor visitor 034 * @param param visitor-specific parameter 035 * 036 * @return visitor-specific return value 037 */ 038 public <R, D> R execute(IAttributeVisitor<R, D> visitor, D param) { 039 return visitor.unknownCase(this, param); 040 } 041 042 /** 043 * Adjust program counter values contained in this attribute, starting at startPC, by adding deltaPC to them. 044 * 045 * @param startPC program counter to start at 046 * @param deltaPC change in program counter values 047 */ 048 public void adjustPC(int startPC, int deltaPC) { 049 // nothing to do 050 } 051 052 /** 053 * Translate the program counter values contained in this attribute from an old line number table to a new one. 054 * 055 * @param index critical point (insertion or deletion point) 056 * @param deltaIndex delta value to add to all old line numbers greater than the critical point 057 * @param oldLnt old line number table 058 * @param newLnt new line number table 059 */ 060 public void translatePC(int index, int deltaIndex, LineNumberTable oldLnt, LineNumberTable newLnt) { 061 // nothing to do 062 } 063 064 /** 065 * Creates and returns a copy of this object. 066 */ 067 public Object clone() throws CloneNotSupportedException { 068 return super.clone(); 069 } 070 071 /** 072 * Returns the name of the attribute as it appears in the class file. 073 * 074 * @return name of the attribute. 075 */ 076 public static String getAttributeName() { 077 throw new Error("This is not an actual attribute. Should never query for it!"); 078 } 079 }