| // Copyright (c) 2022, 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.cf.code.frame; |
| |
| import com.android.tools.r8.graph.DexType; |
| import java.util.function.Function; |
| |
| public interface PreciseFrameType extends FrameType { |
| |
| @Override |
| default PreciseFrameType map(Function<DexType, DexType> fn) { |
| if (isObject()) { |
| if (isInitialized()) { |
| DexType type = asInitializedReferenceType().getInitializedType(); |
| DexType newType = fn.apply(type); |
| if (type != newType) { |
| return FrameType.initializedReference(newType); |
| } |
| } |
| if (isUninitializedNew()) { |
| DexType type = getUninitializedNewType(); |
| DexType newType = fn.apply(type); |
| if (type != newType) { |
| return FrameType.uninitializedNew(getUninitializedLabel(), newType); |
| } |
| } |
| } |
| return this; |
| } |
| } |