|  | // Copyright (c) 2023, 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.retrace; | 
|  |  | 
|  | import com.android.tools.r8.DiagnosticsHandler; | 
|  | import com.android.tools.r8.keepanno.annotations.KeepForApi; | 
|  | import com.android.tools.r8.naming.MapVersion; | 
|  | import com.android.tools.r8.references.ClassReference; | 
|  | import com.android.tools.r8.references.FieldReference; | 
|  | import com.android.tools.r8.references.MethodReference; | 
|  | import com.android.tools.r8.retrace.internal.PartitionMappingSupplierBase; | 
|  |  | 
|  | @KeepForApi | 
|  | public class PartitionMappingSupplierAsync | 
|  | extends PartitionMappingSupplierBase<PartitionMappingSupplierAsync> | 
|  | implements MappingSupplierAsync<PartitionMappingSupplierAsync> { | 
|  |  | 
|  | private PartitionMappingSupplierAsync( | 
|  | RegisterMappingPartitionCallback registerCallback, | 
|  | PrepareMappingPartitionsCallback prepareCallback, | 
|  | FinishedPartitionMappingCallback finishedCallback, | 
|  | boolean allowExperimental, | 
|  | byte[] metadata, | 
|  | MapVersion fallbackMapVersion) { | 
|  | super( | 
|  | registerCallback, | 
|  | prepareCallback, | 
|  | finishedCallback, | 
|  | allowExperimental, | 
|  | metadata, | 
|  | fallbackMapVersion); | 
|  | } | 
|  |  | 
|  | /*** | 
|  | * Register an allowed mapping lookup to allow for prefetching of resources. | 
|  | * | 
|  | * @param classReference The minified class reference allowed to be lookup up. | 
|  | */ | 
|  | @Override | 
|  | public PartitionMappingSupplierAsync registerClassUse( | 
|  | DiagnosticsHandler diagnosticsHandler, ClassReference classReference) { | 
|  | return super.registerClassUse(diagnosticsHandler, classReference); | 
|  | } | 
|  |  | 
|  | /*** | 
|  | * Register an allowed mapping lookup to allow for prefetching of resources. | 
|  | * | 
|  | * @param methodReference The minified method reference allowed to be lookup up. | 
|  | */ | 
|  | @Override | 
|  | public PartitionMappingSupplierAsync registerMethodUse( | 
|  | DiagnosticsHandler diagnosticsHandler, MethodReference methodReference) { | 
|  | return super.registerMethodUse(diagnosticsHandler, methodReference); | 
|  | } | 
|  |  | 
|  | /*** | 
|  | * Register an allowed mapping lookup to allow for prefetching of resources. | 
|  | * | 
|  | * @param fieldReference The minified field reference allowed to be lookup up. | 
|  | */ | 
|  | @Override | 
|  | public PartitionMappingSupplierAsync registerFieldUse( | 
|  | DiagnosticsHandler diagnosticsHandler, FieldReference fieldReference) { | 
|  | return super.registerFieldUse(diagnosticsHandler, fieldReference); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public PartitionMappingSupplierAsync self() { | 
|  | return this; | 
|  | } | 
|  |  | 
|  | public static Builder builder() { | 
|  | return new Builder(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public Retracer createRetracer( | 
|  | DiagnosticsHandler diagnosticsHandler, MappingPartitionFromKeySupplier supplier) { | 
|  | return createRetracerFromPartitionSupplier(diagnosticsHandler, supplier); | 
|  | } | 
|  |  | 
|  | @KeepForApi | 
|  | public static class Builder extends PartitionMappingSupplierBuilderBase<Builder> { | 
|  |  | 
|  | private byte[] metadata; | 
|  |  | 
|  | private Builder() { | 
|  | super(MapVersion.MAP_VERSION_NONE); | 
|  | } | 
|  |  | 
|  | /*** | 
|  | * Sets the serialized metadata that was obtained when partitioning. | 
|  | * | 
|  | * @param metadata the serialized metadata | 
|  | */ | 
|  | public Builder setMetadata(byte[] metadata) { | 
|  | this.metadata = metadata; | 
|  | return self(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | protected Builder self() { | 
|  | return this; | 
|  | } | 
|  |  | 
|  | public PartitionMappingSupplierAsync build() { | 
|  | if (metadata == null) { | 
|  | throw new RuntimeException("Cannot build without providing metadata."); | 
|  | } | 
|  | return new PartitionMappingSupplierAsync( | 
|  | registerCallback, | 
|  | prepareCallback, | 
|  | finishedCallback, | 
|  | allowExperimental, | 
|  | metadata, | 
|  | fallbackMapVersion); | 
|  | } | 
|  | } | 
|  | } |