| // 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.DexAnnotation; |
| import com.android.tools.r8.graph.DexAnnotationDirectory; |
| import com.android.tools.r8.graph.DexAnnotationSet; |
| import com.android.tools.r8.graph.DexCode; |
| import com.android.tools.r8.graph.DexDebugInfo; |
| import com.android.tools.r8.graph.DexEncodedArray; |
| import com.android.tools.r8.graph.DexEncodedMethod; |
| import com.android.tools.r8.graph.DexItem; |
| import com.android.tools.r8.graph.DexProgramClass; |
| import com.android.tools.r8.graph.DexTypeList; |
| import com.android.tools.r8.graph.ParameterAnnotationsList; |
| |
| /** |
| * Collection of the various components of the mixed section of a dex file. |
| * |
| * <p>This semantically is just a wrapper around a bunch of collections. We do not expose the |
| * collections directly to allow for implementations that under the hood do not use collections. |
| * |
| * <p>See {@link DexItem#collectMixedSectionItems(MixedSectionCollection)} for |
| * information on how to fill a {@link MixedSectionCollection}. |
| */ |
| public abstract class MixedSectionCollection { |
| |
| /** |
| * Adds the given class data to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexProgramClass dexClassData); |
| |
| /** |
| * Adds the given encoded array to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexEncodedArray dexEncodedArray); |
| |
| /** |
| * Adds the given annotation set to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexAnnotationSet dexAnnotationSet); |
| |
| /** |
| * Recurse on the given encoded method to add items to the collection. |
| * |
| * <p>Allows overriding the behavior when dex-file writing. |
| */ |
| public void visit(DexEncodedMethod dexEncodedMethod) { |
| dexEncodedMethod.collectMixedSectionItemsWithCodeMapping( |
| this, MethodToCodeObjectMapping.fromMethodBacking()); |
| } |
| |
| /** |
| * Adds the given code item to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexCode dexCode); |
| |
| /** |
| * Adds the given debug info to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexDebugInfo dexDebugInfo); |
| |
| /** |
| * Adds the given type list to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexTypeList dexTypeList); |
| |
| /** |
| * Adds the given annotation-set reference list to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(ParameterAnnotationsList annotationSetRefList); |
| |
| /** |
| * Adds the given annotation to the collection. |
| * |
| * Does not add any dependencies. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean add(DexAnnotation annotation); |
| |
| /** |
| * Adds the given annotation directory to the collection. |
| * |
| * Add a dependency between the clazz and the annotation directory. |
| * |
| * @return true if the item was not added before |
| */ |
| public abstract boolean setAnnotationsDirectoryForClass(DexProgramClass clazz, |
| DexAnnotationDirectory annotationDirectory); |
| } |