| // Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 | package com.android.tools.r8.dex; | 
 |  | 
 | import com.android.tools.r8.graph.DexCallSite; | 
 | import com.android.tools.r8.graph.DexField; | 
 | import com.android.tools.r8.graph.DexItem; | 
 | import com.android.tools.r8.graph.DexMethod; | 
 | import com.android.tools.r8.graph.DexMethodHandle; | 
 | import com.android.tools.r8.graph.DexProgramClass; | 
 | import com.android.tools.r8.graph.DexProto; | 
 | import com.android.tools.r8.graph.DexString; | 
 | import com.android.tools.r8.graph.DexType; | 
 | import com.android.tools.r8.graph.GraphLens; | 
 | import com.android.tools.r8.graph.IndexedDexItem; | 
 | import com.android.tools.r8.graph.InitClassLens; | 
 |  | 
 | /** | 
 |  * Common interface for constant pools. | 
 |  * | 
 |  * <p>This is semantically a wrapper around a number of sets for all subtypes of | 
 |  * {@link IndexedDexItem}. <b>Items should not be added directly to this collection.</b> Instead see | 
 |  * {@link DexItem#collectIndexedItems}. | 
 |  * | 
 |  * <p>Note that the various add methods of this class are not transitive, i.e., they do not add | 
 |  * components of the {@link IndexedDexItem} itself. Use a call to | 
 |  * {@link IndexedDexItem#collectIndexedItems} for this. | 
 |  */ | 
 | public interface IndexedItemCollection { | 
 |  | 
 |   /** | 
 |    * Adds the given class to the collection. | 
 |    * | 
 |    * <p>Does not add the class' components. | 
 |    * | 
 |    * @return true if the class was not in the pool before. | 
 |    */ | 
 |   boolean addClass(DexProgramClass dexProgramClass); | 
 |  | 
 |   /** | 
 |    * Adds the given field to the collection. | 
 |    * | 
 |    * <p>Does not add the field's components. | 
 |    * | 
 |    * @return true if the field was not in the pool before. | 
 |    */ | 
 |   boolean addField(DexField field); | 
 |  | 
 |   /** | 
 |    * Adds the given method to the collection. | 
 |    * | 
 |    * <p>Does not add the method's components. | 
 |    * | 
 |    * @return true if the method was not in the pool before. | 
 |    */ | 
 |   boolean addMethod(DexMethod method); | 
 |  | 
 |   /** | 
 |    * Adds the given string to the collection. | 
 |    * | 
 |    * <p>Does not add the string's components. | 
 |    * | 
 |    * @return true if the string was not in the pool before. | 
 |    */ | 
 |   boolean addString(DexString string); | 
 |  | 
 |   /** | 
 |    * Adds the given proto to the collection. | 
 |    * | 
 |    * <p>Does not add the proto's components. | 
 |    * | 
 |    * @return true if the proto was not in the pool before. | 
 |    */ | 
 |   boolean addProto(DexProto proto); | 
 |  | 
 |   /** | 
 |    * Adds the given type to the collection. | 
 |    * | 
 |    * <p>Does not add the type's components. | 
 |    * | 
 |    * @return true if the type was not in the pool before. | 
 |    */ | 
 |   boolean addType(DexType type); | 
 |  | 
 |   /** | 
 |    * Adds the given call site to the collection. | 
 |    * | 
 |    * <p>Does not add the call site's components. | 
 |    * | 
 |    * @return true if the call site was not in the pool before. | 
 |    */ | 
 |   boolean addCallSite(DexCallSite callSite); | 
 |  | 
 |   /** | 
 |    * Adds the given method handle to the collection. | 
 |    * | 
 |    * <p>Does not add the method handle site's components. | 
 |    * | 
 |    * @return true if the method handle was not in the pool before. | 
 |    */ | 
 |   boolean addMethodHandle(DexMethodHandle methodHandle); | 
 |  | 
 |   default GraphLens getGraphLens() { | 
 |     return GraphLens.getIdentityLens(); | 
 |   } | 
 |  | 
 |   default InitClassLens getInitClassLens() { | 
 |     return InitClassLens.getThrowingInstance(); | 
 |   } | 
 |  | 
 |   default DexString getRenamedName(DexMethod method) { | 
 |     return method.name; | 
 |   } | 
 |  | 
 |   default DexString getRenamedName(DexField field) { | 
 |     return field.name; | 
 |   } | 
 |  | 
 |   default DexString getRenamedDescriptor(DexType type) { | 
 |     return type.descriptor; | 
 |   } | 
 | } |