diff options
Diffstat (limited to 'tools/ahat/src/heapdump/Value.java')
-rw-r--r-- | tools/ahat/src/heapdump/Value.java | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/tools/ahat/src/heapdump/Value.java b/tools/ahat/src/heapdump/Value.java new file mode 100644 index 0000000000..6b2d38f7b1 --- /dev/null +++ b/tools/ahat/src/heapdump/Value.java @@ -0,0 +1,133 @@ +/* + * 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; + } +} |