| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * 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 com.android.ahat.heapdump; |
| |
| /** |
| * Value represents a field value in a heap dump. The field value is either a |
| * subclass of AhatInstance or a primitive Java type. |
| */ |
| public class Value { |
| private Object mObject; |
| |
| /** |
| * Constructs a value from a generic Java Object. |
| * The Object must either be a boxed Java primitive type or a subclass of |
| * AhatInstance. The object must not be null. |
| */ |
| Value(Object object) { |
| // TODO: Check that the Object is either an AhatSnapshot or boxed Java |
| // primitive type? |
| assert object != null; |
| mObject = object; |
| } |
| |
| /** |
| * Returns true if the Value is an AhatInstance, as opposed to a Java |
| * primitive value. |
| */ |
| public boolean isAhatInstance() { |
| return mObject instanceof AhatInstance; |
| } |
| |
| /** |
| * Return the Value as an AhatInstance if it is one. |
| * Returns null if the Value represents a Java primitive value. |
| */ |
| public AhatInstance asAhatInstance() { |
| if (isAhatInstance()) { |
| return (AhatInstance)mObject; |
| } |
| return null; |
| } |
| |
| /** |
| * Returns true if the Value is an Integer. |
| */ |
| public boolean isInteger() { |
| return mObject instanceof Integer; |
| } |
| |
| /** |
| * Return the Value as an Integer if it is one. |
| * Returns null if the Value does not represent an Integer. |
| */ |
| public Integer asInteger() { |
| if (isInteger()) { |
| return (Integer)mObject; |
| } |
| return null; |
| } |
| |
| /** |
| * Returns true if the Value is an Long. |
| */ |
| public boolean isLong() { |
| return mObject instanceof Long; |
| } |
| |
| /** |
| * Return the Value as an Long if it is one. |
| * Returns null if the Value does not represent an Long. |
| */ |
| public Long asLong() { |
| if (isLong()) { |
| return (Long)mObject; |
| } |
| return null; |
| } |
| |
| /** |
| * Return the Value as a Byte if it is one. |
| * Returns null if the Value does not represent a Byte. |
| */ |
| public Byte asByte() { |
| if (mObject instanceof Byte) { |
| return (Byte)mObject; |
| } |
| return null; |
| } |
| |
| /** |
| * Return the Value as a Char if it is one. |
| * Returns null if the Value does not represent a Char. |
| */ |
| public Character asChar() { |
| if (mObject instanceof Character) { |
| return (Character)mObject; |
| } |
| return null; |
| } |
| |
| public String toString() { |
| return mObject.toString(); |
| } |
| |
| public static Value getBaseline(Value value) { |
| if (value == null || !value.isAhatInstance()) { |
| return value; |
| } |
| return new Value(value.asAhatInstance().getBaseline()); |
| } |
| |
| @Override public boolean equals(Object other) { |
| if (other instanceof Value) { |
| Value value = (Value)other; |
| return mObject.equals(value.mObject); |
| } |
| return false; |
| } |
| } |