1c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver/* 2c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * Copyright 2012, Google Inc. 3c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * All rights reserved. 4c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * 5c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * Redistribution and use in source and binary forms, with or without 6c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * modification, are permitted provided that the following conditions are 7c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * met: 8c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * 9c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * * Redistributions of source code must retain the above copyright 10c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * notice, this list of conditions and the following disclaimer. 11c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * * Redistributions in binary form must reproduce the above 12c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * copyright notice, this list of conditions and the following disclaimer 13c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * in the documentation and/or other materials provided with the 14c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * distribution. 15c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * * Neither the name of Google Inc. nor the names of its 16c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * contributors may be used to endorse or promote products derived from 17c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * this software without specific prior written permission. 18c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * 19c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver */ 31c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver 32c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruverpackage org.jf.dexlib2.iface; 33c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver 34a8e05220c14778d93c97911044ff5124aadbd77cBen Gruverimport org.jf.dexlib2.iface.reference.MethodReference; 35a8e05220c14778d93c97911044ff5124aadbd77cBen Gruver 36c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruverimport javax.annotation.Nonnull; 37c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruverimport javax.annotation.Nullable; 3822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruverimport java.util.List; 3922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruverimport java.util.Set; 40c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver 4122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver/** 4222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * This class represents a specific method definition in a class. 4322c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 4422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * It also acts as a MethodReference to itself. Any equality/comparison is based on its identity as a MethodReference, 4522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * and shouldn't take into account any non-MethodReference specifics of this method. 4622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 47a8e05220c14778d93c97911044ff5124aadbd77cBen Gruverpublic interface Method extends MethodReference { 4822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 4922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets the type of the class that defines this method. 5022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 5122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return The type of the class that defines this method 5222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 5322c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver @Override @Nonnull String getDefiningClass(); 5422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 5522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 5622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets the name of this method. 5722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 5822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return The name of this method 5922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 6022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver @Override @Nonnull String getName(); 6122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 6222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 63d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver * Gets a list of the parameters of this method. 6422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 6522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * As per the MethodReference interface, the MethodParameter objects contained in the returned list also act 6622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * as a simple reference to the type of the parameter. However, the MethodParameter object can also contain 6722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * additional information about the parameter. 6822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 6922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Note: In some implementations, the returned list is likely to *not* provide efficient random access. 7022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 7122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return A list of MethodParameter objects, representing the parameters of this method. 7222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 73d4b08e1b21b144a2b300564734e272e4b85a5b56Ben Gruver @Nonnull List<? extends MethodParameter> getParameters(); 7422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 7522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 7622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets the return type of this method. 7722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 7822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return The return type of this method. 7922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 8022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver @Override @Nonnull String getReturnType(); 8122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 8222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 8322c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets the access flags for this method. 8422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 8522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * This will be a combination of the AccessFlags.* flags that are marked as compatible for use with a method. 8622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 8722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return The access flags for this method 8822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 89c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver int getAccessFlags(); 9022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 9122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 9222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets a set of the annotations that are applied to this method. 9322c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 9422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * The annotations in the returned set are guaranteed to have unique types. 9522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 9622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return A set of the annotations that are applied to this method 9722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 9822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver @Nonnull Set<? extends Annotation> getAnnotations(); 9922c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver 10022c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver /** 10122c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * Gets a MethodImplementation object that defines the implementation of the method. 10222c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 10322c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * If this is an abstract method in an abstract class, or an interface method in an interface definition, then the 10422c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * method has no implementation, and this will return null. 10522c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * 10622c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * @return A MethodImplementation object defining the implementation of this method, or null if the method has no 10722c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver * implementation 10822c3185bb7c8618437eabe6c597549e0989ec4e6Ben Gruver */ 109c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver @Nullable MethodImplementation getImplementation(); 110c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver} 111