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