|  | // 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; | 
|  |  | 
|  | /** | 
|  | * A section as defined by the Dex file format. | 
|  | */ | 
|  | public class DexSection { | 
|  | public final int type; | 
|  | public final int length; | 
|  | public final int offset; | 
|  | private int end; | 
|  |  | 
|  | public DexSection(int type, int unused, int length, int offset) { | 
|  | this.type = type; | 
|  | assert unused == 0; | 
|  | this.length = length; | 
|  | this.offset = offset; | 
|  | this.end = -1; | 
|  | } | 
|  |  | 
|  | void setEnd(int end) { | 
|  | this.end = end; | 
|  | } | 
|  |  | 
|  | // Returns the byte size of this section. | 
|  | public int size() { | 
|  | return end - offset; | 
|  | } | 
|  |  | 
|  | public String typeName() { | 
|  | // Type names are in UpperCamelCase because they're used as labels in | 
|  | // benchmarks. | 
|  | switch (type) { | 
|  | case Constants.TYPE_HEADER_ITEM: | 
|  | return "Header"; | 
|  | case Constants.TYPE_STRING_ID_ITEM: | 
|  | return "Strings"; | 
|  | case Constants.TYPE_TYPE_ID_ITEM: | 
|  | return "Types"; | 
|  | case Constants.TYPE_PROTO_ID_ITEM: | 
|  | return "Protos"; | 
|  | case Constants.TYPE_FIELD_ID_ITEM: | 
|  | return "Fields"; | 
|  | case Constants.TYPE_METHOD_ID_ITEM: | 
|  | return "Methods"; | 
|  | case Constants.TYPE_CLASS_DEF_ITEM: | 
|  | return "ClassDefs"; | 
|  | case Constants.TYPE_MAP_LIST: | 
|  | return "Maps"; | 
|  | case Constants.TYPE_TYPE_LIST: | 
|  | return "TypeLists"; | 
|  | case Constants.TYPE_ANNOTATION_SET_REF_LIST: | 
|  | return "AnnotationSetRefs"; | 
|  | case Constants.TYPE_ANNOTATION_SET_ITEM: | 
|  | return "AnnotationSets"; | 
|  | case Constants.TYPE_CLASS_DATA_ITEM: | 
|  | return "ClassData"; | 
|  | case Constants.TYPE_CODE_ITEM: | 
|  | return "Code"; | 
|  | case Constants.TYPE_STRING_DATA_ITEM: | 
|  | return "StringData"; | 
|  | case Constants.TYPE_DEBUG_INFO_ITEM: | 
|  | return "DebugInfo"; | 
|  | case Constants.TYPE_ANNOTATION_ITEM: | 
|  | return "Annotation"; | 
|  | case Constants.TYPE_ENCODED_ARRAY_ITEM: | 
|  | return "EncodedArrays"; | 
|  | case Constants.TYPE_ANNOTATIONS_DIRECTORY_ITEM: | 
|  | return "AnnotationsDirectory"; | 
|  | default: | 
|  | return "Unknown"; | 
|  | } | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public String toString() { | 
|  | return typeName() + " @" + offset + " " + length; | 
|  | } | 
|  | } |