|  | // Copyright (c) 2019, 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.shaking; | 
|  |  | 
|  | import com.android.tools.r8.graph.ProgramMethod; | 
|  | import com.android.tools.r8.shaking.RootSetUtils.RootSetBuilder; | 
|  | import java.util.function.Consumer; | 
|  |  | 
|  | public abstract class DelayedRootSetActionItem { | 
|  |  | 
|  | public boolean isInterfaceMethodSyntheticBridgeAction() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public InterfaceMethodSyntheticBridgeAction asInterfaceMethodSyntheticBridgeAction() { | 
|  | return null; | 
|  | } | 
|  |  | 
|  | public static class InterfaceMethodSyntheticBridgeAction extends DelayedRootSetActionItem { | 
|  | private final ProgramMethod methodToKeep; | 
|  | private final ProgramMethod singleTarget; | 
|  | private final Consumer<RootSetBuilder> action; | 
|  |  | 
|  | InterfaceMethodSyntheticBridgeAction( | 
|  | ProgramMethod methodToKeep, ProgramMethod singleTarget, Consumer<RootSetBuilder> action) { | 
|  | this.methodToKeep = methodToKeep; | 
|  | this.singleTarget = singleTarget; | 
|  | this.action = action; | 
|  | } | 
|  |  | 
|  | public ProgramMethod getMethodToKeep() { | 
|  | return methodToKeep; | 
|  | } | 
|  |  | 
|  | public ProgramMethod getSingleTarget() { | 
|  | return singleTarget; | 
|  | } | 
|  |  | 
|  | public Consumer<RootSetBuilder> getAction() { | 
|  | return action; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public boolean isInterfaceMethodSyntheticBridgeAction() { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public InterfaceMethodSyntheticBridgeAction asInterfaceMethodSyntheticBridgeAction() { | 
|  | return this; | 
|  | } | 
|  | } | 
|  | } |