/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.keshmesh.walaconfig; import com.google.common.base.Joiner; import com.ibm.wala.ipa.callgraph.ContextItem; import com.ibm.wala.ipa.callgraph.propagation.InstanceKey; /** * * @author Mohsen Vakilian * @author Stas Negara * */ public class ReceiverString implements ContextItem { private final InstanceKey instances[]; public ReceiverString(InstanceKey instanceKey) { this.instances = new InstanceKey[] { instanceKey }; } ReceiverString(InstanceKey instanceKey, int max_length, ReceiverString base) { int instancesLength = Math.min(max_length, base.getCurrentLength() + 1); instances = new InstanceKey[instancesLength]; instances[0] = instanceKey; System.arraycopy(base.instances, 0, instances, 1, instancesLength - 1); } private int getCurrentLength() { return instances.length; } public InstanceKey getReceiver() { return instances[0]; } @Override public String toString() { return "[" + Joiner.on(" :: ").join(instances) + "]"; } @Override public int hashCode() { int code = 11; for (int i = 0; i < instances.length; i++) { code *= instances[i].hashCode(); } return code; } @Override public boolean equals(Object o) { if (o instanceof ReceiverString) { ReceiverString oc = (ReceiverString) o; if (oc.instances.length == instances.length) { for (int i = 0; i < instances.length; i++) { if (!(instances[i].equals(oc.instances[i]))) { return false; } } return true; } } return false; } }