blob: 9ab1224a54e07aae78119143aac780bf503c2d9a [file] [log] [blame]
// 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.experimental.startup.profile;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.startup.StartupClassBuilder;
import com.android.tools.r8.utils.ClassReferenceUtils;
import java.util.function.Consumer;
import java.util.function.Function;
public class StartupClass extends StartupItem {
private final DexType type;
StartupClass(DexType type) {
this.type = type;
}
public static Builder builder() {
return new Builder();
}
public static Builder builder(DexItemFactory dexItemFactory) {
return new Builder(dexItemFactory);
}
@Override
public void accept(Consumer<StartupClass> classConsumer, Consumer<StartupMethod> methodConsumer) {
classConsumer.accept(this);
}
@Override
public <T> T apply(
Function<StartupClass, T> classFunction, Function<StartupMethod, T> methodFunction) {
return classFunction.apply(this);
}
@Override
public DexType getReference() {
return type;
}
@Override
public boolean isStartupClass() {
return true;
}
@Override
public StartupClass asStartupClass() {
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
StartupClass that = (StartupClass) o;
return type == that.type;
}
@Override
public int hashCode() {
return type.hashCode();
}
@Override
public String serializeToString() {
return getReference().toDescriptorString();
}
public static class Builder implements StartupClassBuilder {
private final DexItemFactory dexItemFactory;
private DexType type;
Builder() {
this(null);
}
Builder(DexItemFactory dexItemFactory) {
this.dexItemFactory = dexItemFactory;
}
@Override
public Builder setClassReference(ClassReference classReference) {
assert dexItemFactory != null;
return setClassReference(ClassReferenceUtils.toDexType(classReference, dexItemFactory));
}
public Builder setClassReference(DexType type) {
this.type = type;
return this;
}
public StartupClass build() {
return new StartupClass(type);
}
}
}