summaryrefslogtreecommitdiffstats
path: root/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java')
-rw-r--r--src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java b/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
new file mode 100644
index 0000000..f01a695
--- /dev/null
+++ b/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
@@ -0,0 +1,126 @@
+/*
+ * Fernflower - The Analytical Java Decompiler
+ * http://www.reversed-java.com
+ *
+ * (C) 2008 - 2010, Stiver
+ *
+ * This software is NEITHER public domain NOR free software
+ * as per GNU License. See license.txt for more details.
+ *
+ * This software is distributed WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A PARTICULAR PURPOSE.
+ */
+
+package org.jetbrains.java.decompiler.struct.consts;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+/*
+ * Integer, Long, Float, Double, String, Class, UTF8
+ */
+
+public class PrimitiveConstant extends PooledConstant {
+
+ // *****************************************************************************
+ // public fields
+ // *****************************************************************************
+
+ public int index;
+
+ public Object value;
+
+ public boolean isArray;
+
+ // *****************************************************************************
+ // constructors
+ // *****************************************************************************
+
+ public PrimitiveConstant(int type, Object value) {
+ this.type = type;
+ this.value = value;
+
+ initConstant();
+ }
+
+ public PrimitiveConstant(int type, int index) {
+ this.type = type;
+ this.index = index;
+ }
+
+ // *****************************************************************************
+ // public methods
+ // *****************************************************************************
+
+ public int getInt() {
+ return ((Integer)value).intValue();
+ }
+
+ public long getLong() {
+ return ((Long)value).longValue();
+ }
+
+ public float getFloat() {
+ return ((Float)value).floatValue();
+ }
+
+ public double getDouble() {
+ return ((Double)value).doubleValue();
+ }
+
+ public String getString() {
+ return (String)value;
+ }
+
+ public void resolveConstant(ConstantPool pool) {
+
+ if(type == CONSTANT_Class || type == CONSTANT_String || type == CONSTANT_MethodType) {
+ value = pool.getPrimitiveConstant(index).getString();
+ initConstant();
+ }
+ }
+
+ public void writeToStream(DataOutputStream out) throws IOException {
+
+ out.writeByte(type);
+ switch(type) {
+ case CONSTANT_Integer:
+ out.writeInt(getInt());
+ break;
+ case CONSTANT_Float:
+ out.writeFloat(getFloat());
+ break;
+ case CONSTANT_Long:
+ out.writeLong(getLong());
+ break;
+ case CONSTANT_Double:
+ out.writeDouble(getDouble());
+ break;
+ case CONSTANT_Utf8:
+ out.writeUTF(getString());
+ break;
+ default: // CONSTANT_Class, CONSTANT_String, CONSTANT_MethodType
+ out.writeShort(index);
+ }
+ }
+
+ public boolean equals(Object o) {
+ if(o == this) return true;
+ if(o == null || !(o instanceof PrimitiveConstant)) return false;
+
+ PrimitiveConstant cn = (PrimitiveConstant)o;
+ return this.type == cn.type &&
+ this.isArray == cn.isArray &&
+ this.value.equals(cn.value);
+
+ }
+
+ private void initConstant() {
+ if(type == CONSTANT_Class) {
+ String className = getString();
+ isArray = (className.length() > 0 && className.charAt(0)=='['); // empty string for a class name seems to be possible in some android files
+ }
+ }
+
+}