| // Copyright (c) 2017, 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 static com.android.tools.r8.dex.Constants.VDEX_NUMBER_OF_DEX_FILES_OFFSET; | 
 |  | 
 | import com.android.tools.r8.errors.CompilationError; | 
 | import com.google.common.collect.ImmutableList; | 
 | import java.util.ArrayList; | 
 | import java.util.List; | 
 |  | 
 | /** | 
 |  * Parse a VDEX and isolate the different dex files it contains. | 
 |  */ | 
 | public class VDexParser { | 
 |  | 
 |   private VDexReader vDexReader; | 
 |   private List<byte[]> dexFiles = new ArrayList<>(); | 
 |  | 
 |   public void close() { | 
 |     vDexReader = null; | 
 |     dexFiles = ImmutableList.of(); | 
 |   } | 
 |  | 
 |   public VDexParser(VDexReader vDexReader) { | 
 |     this.vDexReader = vDexReader; | 
 |     vDexReader.setByteOrder(); | 
 |     parseDexFiles(); | 
 |   } | 
 |  | 
 |   public List<byte[]> getDexFiles() { | 
 |     return dexFiles; | 
 |   } | 
 |  | 
 |   @SuppressWarnings("UnusedVariable") | 
 |   private void parseDexFiles() { | 
 |     vDexReader.position(VDEX_NUMBER_OF_DEX_FILES_OFFSET); | 
 |     int numberOfDexFiles = vDexReader.getUint(); | 
 |     int dexSize = vDexReader.getUint(); | 
 |     int verifierDepsSize = vDexReader.getUint(); | 
 |     int quickeningInfoSize = vDexReader.getUint(); | 
 |  | 
 |     int offset = VDexReader.firstDexOffset(numberOfDexFiles); | 
 |     int totalDexSize = 0; | 
 |     for (int i = 0; i < numberOfDexFiles; i++) { | 
 |       int size = vDexReader.getUint(offset + Constants.FILE_SIZE_OFFSET); | 
 |       vDexReader.position(offset); | 
 |       dexFiles.add(vDexReader.getByteArray(size)); | 
 |       totalDexSize += size; | 
 |       offset += size; | 
 |     } | 
 |     if (totalDexSize != dexSize) { | 
 |       throw new CompilationError("Invalid vdex file. Mismatch in total dex files size"); | 
 |     } | 
 |   } | 
 | } |