blob: f294ea26767ef07b46058a332823bf42096c3e7d [file] [log] [blame]
// Copyright (c) 2021, 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.ir.optimize.classinliner.analysis;
import java.util.function.BiFunction;
public abstract class ParameterUsagePerContext {
NonEmptyParameterUsagePerContext asKnown() {
return null;
}
abstract ParameterUsagePerContext externalize();
/** Returns the usage information for this parameter in the given context. */
public abstract ParameterUsage get(AnalysisContext context);
/**
* Returns true if this is an instance of {@link BottomParameterUsagePerContext}.
*
* <p>In this case, the given parameter is always eligible for class inlining.
*/
public boolean isBottom() {
return false;
}
/**
* Returns true if this is an instance of {@link UnknownParameterUsagePerContext}.
*
* <p>In this case, the given parameter is never eligible for class inlining.
*/
public boolean isTop() {
return false;
}
ParameterUsagePerContext join(ParameterUsagePerContext parameterUsagePerContext) {
if (isTop() || parameterUsagePerContext.isTop()) {
return top();
}
return asKnown().join(parameterUsagePerContext.asKnown());
}
abstract ParameterUsagePerContext rebuild(
BiFunction<AnalysisContext, ParameterUsage, ParameterUsage> transformation);
static BottomParameterUsagePerContext bottom() {
return BottomParameterUsagePerContext.getInstance();
}
static UnknownParameterUsagePerContext top() {
return UnknownParameterUsagePerContext.getInstance();
}
}