| // 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.optimize.argumentpropagation; |
| |
| import com.android.tools.r8.graph.AppView; |
| import com.android.tools.r8.graph.ProgramMethod; |
| import com.android.tools.r8.ir.code.InvokeMethod; |
| import com.android.tools.r8.ir.code.Value; |
| import com.android.tools.r8.optimize.argumentpropagation.codescanner.ValueState; |
| import com.android.tools.r8.optimize.compose.ArgumentPropagatorComposeModeling; |
| import com.android.tools.r8.shaking.AppInfoWithLiveness; |
| |
| public class ArgumentPropagatorCodeScannerModeling { |
| |
| private final ArgumentPropagatorComposeModeling composeModeling; |
| |
| ArgumentPropagatorCodeScannerModeling(AppView<AppInfoWithLiveness> appView) { |
| this.composeModeling = |
| appView |
| .options() |
| .getJetpackComposeOptions() |
| .isModelingChangedArgumentsToComposableFunctions() |
| ? new ArgumentPropagatorComposeModeling(appView) |
| : null; |
| } |
| |
| ValueState modelParameterStateForArgumentToFunction( |
| InvokeMethod invoke, |
| ProgramMethod singleTarget, |
| int argumentIndex, |
| Value argument, |
| ProgramMethod context) { |
| if (composeModeling != null) { |
| return composeModeling.modelParameterStateForChangedOrDefaultArgumentToComposableFunction( |
| invoke, singleTarget, argumentIndex, argument, context); |
| } |
| return null; |
| } |
| } |