1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/* 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Copyright 2012, Google Inc. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * All rights reserved. 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Redistribution and use in source and binary forms, with or without 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * modification, are permitted provided that the following conditions are 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * met: 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * * Redistributions of source code must retain the above copyright 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * notice, this list of conditions and the following disclaimer. 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * * Redistributions in binary form must reproduce the above 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * copyright notice, this list of conditions and the following disclaimer 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * in the documentation and/or other materials provided with the 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * distribution. 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * * Neither the name of Google Inc. nor the names of its 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * contributors may be used to endorse or promote products derived from 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * this software without specific prior written permission. 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpackage org.jf.dexlib2.base.reference; 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport com.google.common.collect.Ordering; 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport org.jf.dexlib2.iface.reference.MethodReference; 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport org.jf.util.CharSequenceUtils; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport org.jf.util.CollectionUtils; 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport javax.annotation.Nonnull; 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathimport javax.annotation.Nullable; 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic abstract class BaseMethodReference implements MethodReference { 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath @Override 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public int hashCode() { 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int hashCode = getDefiningClass().hashCode(); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath hashCode = hashCode*31 + getName().hashCode(); 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath hashCode = hashCode*31 + getReturnType().hashCode(); 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return hashCode*31 + getParameterTypes().hashCode(); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath @Override 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public boolean equals(@Nullable Object o) { 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (o != null && o instanceof MethodReference) { 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MethodReference other = (MethodReference)o; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return getDefiningClass().equals(other.getDefiningClass()) && 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath getName().equals(other.getName()) && 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath getReturnType().equals(other.getReturnType()) && 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CharSequenceUtils.listEquals(getParameterTypes(), other.getParameterTypes()); 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return false; 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath @Override 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public int compareTo(@Nonnull MethodReference o) { 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int res = getDefiningClass().compareTo(o.getDefiningClass()); 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (res != 0) return res; 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = getName().compareTo(o.getName()); 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (res != 0) return res; 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath res = getReturnType().compareTo(o.getReturnType()); 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (res != 0) return res; 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return CollectionUtils.compareAsIterable(Ordering.usingToString(), getParameterTypes(), o.getParameterTypes()); 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath