| // 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.profile.art.rewriting; |
| |
| import com.android.tools.r8.graph.DexClass; |
| import com.android.tools.r8.graph.DexClassAndMethod; |
| import com.android.tools.r8.graph.DexClasspathClass; |
| import com.android.tools.r8.graph.DexMethod; |
| import com.android.tools.r8.graph.DexProgramClass; |
| import com.android.tools.r8.graph.DexType; |
| import com.android.tools.r8.graph.ProgramMethod; |
| import com.android.tools.r8.ir.desugar.CfPostProcessingDesugaringEventConsumer; |
| import com.android.tools.r8.ir.desugar.itf.InterfaceDesugaringSyntheticHelper; |
| import java.util.Set; |
| import java.util.concurrent.ExecutionException; |
| |
| public class ArtProfileRewritingCfPostProcessingDesugaringEventConsumer |
| extends CfPostProcessingDesugaringEventConsumer { |
| |
| private final ConcreteArtProfileCollectionAdditions additionsCollection; |
| private final CfPostProcessingDesugaringEventConsumer parent; |
| |
| private ArtProfileRewritingCfPostProcessingDesugaringEventConsumer( |
| ConcreteArtProfileCollectionAdditions additionsCollection, |
| CfPostProcessingDesugaringEventConsumer parent) { |
| this.additionsCollection = additionsCollection; |
| this.parent = parent; |
| } |
| |
| public static CfPostProcessingDesugaringEventConsumer attach( |
| ArtProfileCollectionAdditions artProfileCollectionAdditions, |
| CfPostProcessingDesugaringEventConsumer eventConsumer) { |
| if (artProfileCollectionAdditions.isNop()) { |
| return eventConsumer; |
| } |
| return new ArtProfileRewritingCfPostProcessingDesugaringEventConsumer( |
| artProfileCollectionAdditions.asConcrete(), eventConsumer); |
| } |
| |
| @Override |
| public void acceptAPIConversionCallback(ProgramMethod method) { |
| parent.acceptAPIConversionCallback(method); |
| } |
| |
| @Override |
| public void acceptCollectionConversion(ProgramMethod arrayConversion) { |
| parent.acceptCollectionConversion(arrayConversion); |
| } |
| |
| @Override |
| public void acceptCovariantRetargetMethod(ProgramMethod method) { |
| parent.acceptCovariantRetargetMethod(method); |
| } |
| |
| @Override |
| public void acceptDesugaredLibraryRetargeterDispatchClasspathClass(DexClasspathClass clazz) { |
| parent.acceptDesugaredLibraryRetargeterDispatchClasspathClass(clazz); |
| } |
| |
| @Override |
| public void acceptDesugaredLibraryRetargeterForwardingMethod(ProgramMethod method) { |
| parent.acceptDesugaredLibraryRetargeterForwardingMethod(method); |
| } |
| |
| @Override |
| public void acceptEmulatedInterfaceMarkerInterface( |
| DexProgramClass clazz, DexClasspathClass newInterface) { |
| parent.acceptEmulatedInterfaceMarkerInterface(clazz, newInterface); |
| } |
| |
| @Override |
| public void acceptEnumConversionClasspathClass(DexClasspathClass clazz) { |
| parent.acceptEnumConversionClasspathClass(clazz); |
| } |
| |
| @Override |
| public void acceptGenericApiConversionStub(DexClasspathClass dexClasspathClass) { |
| parent.acceptGenericApiConversionStub(dexClasspathClass); |
| } |
| |
| @Override |
| public void acceptInterfaceInjection(DexProgramClass clazz, DexClass newInterface) { |
| parent.acceptInterfaceInjection(clazz, newInterface); |
| } |
| |
| @Override |
| public void acceptInterfaceMethodDesugaringForwardingMethod( |
| ProgramMethod method, DexClassAndMethod baseMethod) { |
| additionsCollection.applyIfContextIsInProfile( |
| baseMethod, additionsBuilder -> additionsBuilder.addRule(method)); |
| parent.acceptInterfaceMethodDesugaringForwardingMethod(method, baseMethod); |
| } |
| |
| @Override |
| public void acceptThrowingMethod(ProgramMethod method, DexType errorType) { |
| parent.acceptThrowingMethod(method, errorType); |
| } |
| |
| @Override |
| public void acceptWrapperClasspathClass(DexClasspathClass clazz) { |
| parent.acceptWrapperClasspathClass(clazz); |
| } |
| |
| @Override |
| public Set<DexMethod> getNewlyLiveMethods() { |
| return parent.getNewlyLiveMethods(); |
| } |
| |
| @Override |
| public void finalizeDesugaring() throws ExecutionException { |
| parent.finalizeDesugaring(); |
| } |
| |
| @Override |
| public void warnMissingInterface( |
| DexProgramClass context, DexType missing, InterfaceDesugaringSyntheticHelper helper) { |
| parent.warnMissingInterface(context, missing, helper); |
| } |
| } |