DexBackedClassDef.java revision 2e34c4499c1bb971ed5c5545f984ec1a0a080eb3
1be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver/* 2be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * Copyright 2012, Google Inc. 3be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * All rights reserved. 4be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * 5be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * Redistribution and use in source and binary forms, with or without 6be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * modification, are permitted provided that the following conditions are 7be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * met: 8be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * 9be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * * Redistributions of source code must retain the above copyright 10be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * notice, this list of conditions and the following disclaimer. 11be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * * Redistributions in binary form must reproduce the above 12be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * copyright notice, this list of conditions and the following disclaimer 13be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * in the documentation and/or other materials provided with the 14be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * distribution. 15be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * * Neither the name of Google Inc. nor the names of its 16be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * contributors may be used to endorse or promote products derived from 17be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * this software without specific prior written permission. 18be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * 19be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver */ 31be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 32be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverpackage org.jf.dexlib2.dexbacked; 33be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 34be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport com.google.common.collect.ImmutableList; 35be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport org.jf.dexlib2.dexbacked.util.*; 36be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport org.jf.dexlib2.iface.ClassDef; 37be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 38be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport javax.annotation.Nonnull; 39be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport javax.annotation.Nullable; 40be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverimport java.util.List; 41be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 42be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruverpublic class DexBackedClassDef implements ClassDef { 4336e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver @Nonnull public final DexBuffer dexBuf; 44be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 45be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull public final String name; 46be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public final int accessFlags; 47be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nullable public final String superclass; 48be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nullable public final String sourceFile; 49be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 50be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull private final AnnotationsDirectory annotationsDirectory; 51be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private final int staticInitialValuesOffset; 52be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 53be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private final int interfacesOffset; 54be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private final int classDataOffset; 55be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 56be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver //class_def_item offsets 57be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int ACCESS_FLAGS_OFFSET = 4; 58be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int SUPERCLASS_OFFSET = 8; 59be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int INTERFACES_OFFSET = 12; 60be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int SOURCE_FILE_OFFSET = 16; 61be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int ANNOTATIONS_OFFSET = 20; 62be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int CLASS_DATA_OFFSET = 24; 63be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private static final int STATIC_INITIAL_VALUES_OFFSET = 28; 64be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 6536e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver public DexBackedClassDef(@Nonnull DexBuffer dexBuf, 66be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver int classDefOffset) { 6736e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.dexBuf = dexBuf; 68be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 6936e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.name = dexBuf.getType(dexBuf.readSmallUint(classDefOffset)); 7036e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.accessFlags = dexBuf.readSmallUint(classDefOffset + ACCESS_FLAGS_OFFSET); 712e34c4499c1bb971ed5c5545f984ec1a0a080eb3Ben Gruver this.superclass = dexBuf.getOptionalType(dexBuf.readOptionalUint(classDefOffset + SUPERCLASS_OFFSET)); 7236e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.interfacesOffset = dexBuf.readSmallUint(classDefOffset + INTERFACES_OFFSET); 7390a1ffeda1ae9a4d3d5801aa4389cf2a559a46f2Ben Gruver this.sourceFile = dexBuf.getOptionalString(dexBuf.readOptionalUint(classDefOffset + SOURCE_FILE_OFFSET)); 74be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 7536e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver int annotationsDirectoryOffset = dexBuf.readSmallUint(classDefOffset + ANNOTATIONS_OFFSET); 7636e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.annotationsDirectory = AnnotationsDirectory.newOrEmpty(dexBuf, annotationsDirectoryOffset); 77be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 780f7b4c40f446889066e77e707a1f1033af87e6c6Ben Gruver this.classDataOffset = dexBuf.readSmallUint(classDefOffset + CLASS_DATA_OFFSET); 7936e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver this.staticInitialValuesOffset = dexBuf.readSmallUint(classDefOffset + STATIC_INITIAL_VALUES_OFFSET); 80be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 81be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 82be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 83be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull @Override public String getName() { return name; } 84be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override public int getAccessFlags() { return accessFlags; } 85be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nullable @Override public String getSuperclass() { return superclass; } 86be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nullable @Override public String getSourceFile() { return sourceFile; } 87be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 88be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 89be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 90be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public List<String> getInterfaces() { 91be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver if (interfacesOffset > 0) { 9236e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver final int size = dexBuf.readSmallUint(interfacesOffset); 93be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return new FixedSizeList<String>() { 9425d385a441b95d56987c81f00f19297d799e1b31Ben Gruver @Nonnull 95be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 96be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public String readItem(int index) { 972e34c4499c1bb971ed5c5545f984ec1a0a080eb3Ben Gruver return dexBuf.getType(dexBuf.readSmallUint(interfacesOffset + 4 + (2*index))); 98be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 99be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 100be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override public int size() { return size; } 101be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver }; 102be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 103be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return ImmutableList.of(); 104be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 105be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 106be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 107be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 108be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public List<? extends DexBackedAnnotation> getAnnotations() { 109be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return annotationsDirectory.getClassAnnotations(); 110be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 111be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 112be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 113be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 114be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public List<? extends DexBackedField> getFields() { 115be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver if (classDataOffset != 0) { 11636e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver DexReader reader = dexBuf.readerAt(classDataOffset); 117be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver int staticFieldCount = reader.readSmallUleb128(); 118be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver int instanceFieldCount = reader.readSmallUleb128(); 119be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver final int fieldCount = staticFieldCount + instanceFieldCount; 120be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver if (fieldCount > 0) { 121be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver reader.skipUleb128(); //direct_methods_size 122be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver reader.skipUleb128(); //virtual_methods_size 123be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 124be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver final int fieldsStartOffset = reader.getOffset(); 125be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 126be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return new VariableSizeListWithContext<DexBackedField>() { 127be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 128be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 129be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver public Iterator listIterator() { 13036e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver return new Iterator(dexBuf, fieldsStartOffset) { 131be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver private int previousFieldIndex = 0; 132be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull private final AnnotationsDirectory.AnnotationIterator annotationIterator = 133be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver annotationsDirectory.getFieldAnnotationIterator(); 134be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull private final StaticInitialValueIterator staticInitialValueIterator = 13536e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver StaticInitialValueIterator.newOrEmpty(dexBuf, staticInitialValuesOffset); 136be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 137be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 138be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 13925d385a441b95d56987c81f00f19297d799e1b31Ben Gruver protected DexBackedField readItem(@Nonnull DexReader reader, int index) { 140be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver DexBackedField item = new DexBackedField(reader, previousFieldIndex, 141be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver staticInitialValueIterator, annotationIterator); 142be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver previousFieldIndex = item.fieldIndex; 143be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return item; 144be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 145be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 146be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 14725d385a441b95d56987c81f00f19297d799e1b31Ben Gruver protected void skipItem(@Nonnull DexReader reader, int index) { 148be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver previousFieldIndex = DexBackedField.skipEncodedField(reader, previousFieldIndex); 149be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver staticInitialValueIterator.skipNext(); 150be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 151be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver }; 152be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 153be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 154be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override public int size() { return fieldCount; } 155be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver }; 156be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 157be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 158be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver return ImmutableList.of(); 159be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 160be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver 161be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Nonnull 162be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver @Override 1633f2861b47702ee56a8f3dbcd2feedbdfd31789b2Ben Gruver public List<? extends DexBackedMethod> getMethods() { 16463d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver if (classDataOffset > 0) { 16536e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver DexReader reader = dexBuf.readerAt(classDataOffset); 16663d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver int staticFieldCount = reader.readSmallUleb128(); 16763d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver int instanceFieldCount = reader.readSmallUleb128(); 16863d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver int directMethodCount = reader.readSmallUleb128(); 16963d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver int virtualMethodCount = reader.readSmallUleb128(); 17063d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver final int methodCount = directMethodCount + virtualMethodCount; 17163d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver if (methodCount > 0) { 17263d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver DexBackedField.skipAllFields(reader, staticFieldCount + instanceFieldCount); 17363d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver 17463d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver final int methodsStartOffset = reader.getOffset(); 17563d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver 17663d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver return new VariableSizeListWithContext<DexBackedMethod>() { 17763d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Nonnull 17863d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Override 17963d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver public Iterator listIterator() { 18036e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver return new Iterator(dexBuf, methodsStartOffset) { 18163d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver private int previousMethodIndex = 0; 18263d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Nonnull private final AnnotationsDirectory.AnnotationIterator methodAnnotationIterator = 18363d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver annotationsDirectory.getMethodAnnotationIterator(); 18463d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Nonnull private final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator = 18563d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver annotationsDirectory.getParameterAnnotationIterator(); 18663d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Nonnull private final StaticInitialValueIterator staticInitialValueIterator = 18736e2ee200517b36652a6e8fe1c5aa24ce249765eBen Gruver StaticInitialValueIterator.newOrEmpty(dexBuf, staticInitialValuesOffset); 18863d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver 18963d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Nonnull 19063d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Override 19125d385a441b95d56987c81f00f19297d799e1b31Ben Gruver protected DexBackedMethod readItem(@Nonnull DexReader reader, int index) { 19263d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver DexBackedMethod item = new DexBackedMethod(reader, previousMethodIndex, 19363d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver methodAnnotationIterator, parameterAnnotationIterator); 19463d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver previousMethodIndex = item.methodIndex; 19563d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver return item; 19663d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver } 19763d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver 19863d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Override 19925d385a441b95d56987c81f00f19297d799e1b31Ben Gruver protected void skipItem(@Nonnull DexReader reader, int index) { 20063d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver previousMethodIndex = DexBackedMethod.skipEncodedMethod(reader, previousMethodIndex); 20163d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver staticInitialValueIterator.skipNext(); 20263d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver } 20363d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver }; 20463d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver } 20563d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver 20663d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver @Override public int size() { return methodCount; } 20763d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver }; 20863d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver } 20963d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver } 21063d840670311d96aa92c38f1d118ab2d7f590ce3Ben Gruver return ImmutableList.of(); 211be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver } 212be799799ff8bbc5d86f8cfdc850947ab4f41695fBen Gruver} 213