blob: 4912d46fcc09a905c67a92a4ea04d0408c9ade0c [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.ir.optimize.info.field;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexField;
import java.util.IdentityHashMap;
import java.util.Map;
/**
* A mapping from instance fields of a class to information about how a particular constructor
* initializes these instance fields.
*
* <p>Returns {@link UnknownInstanceFieldInitializationInfo} if no information is known about the
* initialization of a given instance field.
*/
public abstract class InstanceFieldInitializationInfoCollection {
public static Builder builder() {
return new Builder();
}
public abstract InstanceFieldInitializationInfo get(DexEncodedField field);
public abstract boolean isEmpty();
public static class Builder {
Map<DexField, InstanceFieldInitializationInfo> infos = new IdentityHashMap<>();
public void recordInitializationInfo(
DexEncodedField field, InstanceFieldInitializationInfo info) {
assert !infos.containsKey(field.field);
infos.put(field.field, info);
}
public InstanceFieldInitializationInfoCollection build() {
if (infos.isEmpty()) {
return EmptyInstanceFieldInitializationInfoCollection.getInstance();
}
return new NonTrivialInstanceFieldInitializationInfoCollection(infos);
}
}
}