1 /* 2 * Copyright 2018, Google LLC 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google LLC nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 package com.android.tools.smali.dexlib2.iface.reference; 32 33 import javax.annotation.Nonnull; 34 import javax.annotation.Nullable; 35 36 /** 37 * This class represents a reference to a method handle 38 */ 39 public interface MethodHandleReference extends Reference, Comparable<MethodHandleReference> { 40 /** 41 * Gets the method handle type. 42 * 43 * @return One of the MethodHandleType values 44 */ getMethodHandleType()45 int getMethodHandleType(); 46 47 /** 48 * Gets the member that is being referenced by this method handle. 49 * 50 * @return A MethodReference or FieldReference, depending on the method handle type 51 */ getMemberReference()52 @Nonnull Reference getMemberReference(); 53 54 /** 55 * Returns a hashcode for this MethodHandleReference. 56 * 57 * This hashCode is defined to be the following: 58 * 59 * <pre> 60 * {@code 61 * int hashCode = getMethodHandleType(); 62 * hashCode = hashCode*31 + getMemberReference().hashCode(); 63 * }</pre> 64 * 65 * @return The hash code value for this MethodHandleReference 66 */ hashCode()67 @Override int hashCode(); 68 69 /** 70 * Compares this MethodHandleReference to another MethodHandleReference for equality. 71 * 72 * This MethodHandleReference is equal to another MethodHandleReference if all of its fields are equal. That is, if 73 * the return values of getMethodHandleType() and getMemberReference() are all equal. 74 * 75 * @param o The object to be compared for equality with this MethodHandleReference 76 * @return true if the specified object is equal to this MethodHandleReference 77 */ equals(@ullable Object o)78 @Override boolean equals(@Nullable Object o); 79 80 /** 81 * Compare this MethodHandleReference to another MethodHandleReference. 82 * 83 * The comparison is based on the comparison of the return values of getMethodHandleType() and getMemberReference() 84 * in that order. 85 * 86 * @param o The MethodHandleReference to compare with this MethodHandleReference 87 * @return An integer representing the result of the comparison 88 */ compareTo(@onnull MethodHandleReference o)89 @Override int compareTo(@Nonnull MethodHandleReference o); 90 } 91