blob: d4fe55581124a6671f93320957677b44e0893665 [file] [log] [blame]
// Copyright (c) 2020, 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.DexProgramClass;
import com.android.tools.r8.ir.desugar.LambdaDescriptor;
public abstract class InstantiatedObject {
public static InstantiatedObject of(DexProgramClass clazz) {
return new InstantiatedClass(clazz);
}
public static InstantiatedObject of(LambdaDescriptor lambda) {
return new InstantiatedLambda(lambda);
}
public boolean isClass() {
return false;
}
public DexProgramClass asClass() {
return null;
}
public boolean isLambda() {
return false;
}
public LambdaDescriptor asLambda() {
return null;
}
private static class InstantiatedClass extends InstantiatedObject {
final DexProgramClass clazz;
InstantiatedClass(DexProgramClass clazz) {
assert !clazz.isInterface() || clazz.isAnnotation();
this.clazz = clazz;
}
@Override
public boolean isClass() {
return true;
}
@Override
public DexProgramClass asClass() {
return clazz;
}
}
private static class InstantiatedLambda extends InstantiatedObject {
final LambdaDescriptor lambdaDescriptor;
public InstantiatedLambda(LambdaDescriptor lambdaDescriptor) {
this.lambdaDescriptor = lambdaDescriptor;
}
@Override
public boolean isLambda() {
return true;
}
@Override
public LambdaDescriptor asLambda() {
return lambdaDescriptor;
}
}
}