1 /*
2  * reserved comment block
3  * DO NOT REMOVE OR ALTER!
4  */
5 /*
6  * Licensed to the Apache Software Foundation (ASF) under one or more
7  * contributor license agreements.  See the NOTICE file distributed with
8  * this work for additional information regarding copyright ownership.
9  * The ASF licenses this file to You under the Apache License, Version 2.0
10  * (the "License"); you may not use this file except in compliance with
11  * the License.  You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  */
21 
22 package com.sun.org.apache.bcel.internal.classfile;
23 
24 import java.io.DataOutputStream;
25 import java.io.IOException;
26 
27 import com.sun.org.apache.bcel.internal.Const;
28 
29 /**
30  * @since 6.0
31  */
32 public class EnumElementValue extends ElementValue
33 {
34     // For enum types, these two indices point to the type and value
35     private final int typeIdx;
36 
37     private final int valueIdx;
38 
EnumElementValue(final int type, final int typeIdx, final int valueIdx, final ConstantPool cpool)39     public EnumElementValue(final int type, final int typeIdx, final int valueIdx,
40             final ConstantPool cpool)
41     {
42         super(type, cpool);
43         if (type != ENUM_CONSTANT) {
44             throw new RuntimeException(
45                     "Only element values of type enum can be built with this ctor - type specified: " + type);
46         }
47         this.typeIdx = typeIdx;
48         this.valueIdx = valueIdx;
49     }
50 
51     @Override
dump(final DataOutputStream dos)52     public void dump(final DataOutputStream dos) throws IOException
53     {
54         dos.writeByte(super.getType()); // u1 type of value (ENUM_CONSTANT == 'e')
55         dos.writeShort(typeIdx); // u2
56         dos.writeShort(valueIdx); // u2
57     }
58 
59     @Override
stringifyValue()60     public String stringifyValue()
61     {
62         final ConstantUtf8 cu8 = (ConstantUtf8) super.getConstantPool().getConstant(valueIdx,
63                 Const.CONSTANT_Utf8);
64         return cu8.getBytes();
65     }
66 
getEnumTypeString()67     public String getEnumTypeString()
68     {
69         final ConstantUtf8 cu8 = (ConstantUtf8) super.getConstantPool().getConstant(typeIdx,
70                 Const.CONSTANT_Utf8);
71         return cu8.getBytes();// Utility.signatureToString(cu8.getBytes());
72     }
73 
getEnumValueString()74     public String getEnumValueString()
75     {
76         final ConstantUtf8 cu8 = (ConstantUtf8) super.getConstantPool().getConstant(valueIdx,
77                 Const.CONSTANT_Utf8);
78         return cu8.getBytes();
79     }
80 
getValueIndex()81     public int getValueIndex()
82     {
83         return valueIdx;
84     }
85 
getTypeIndex()86     public int getTypeIndex()
87     {
88         return typeIdx;
89     }
90 }
91