summaryrefslogtreecommitdiff
path: root/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java')
-rw-r--r--plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java126
1 files changed, 126 insertions, 0 deletions
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
new file mode 100644
index 000000000000..4cd4dd88dff7
--- /dev/null
+++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/struct/consts/PrimitiveConstant.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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
+ }
+ }
+}