// 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.graph;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public abstract class InitClassLens {

  public static Builder builder() {
    return new Builder();
  }

  public static DefaultInitClassLens getDefault() {
    return DefaultInitClassLens.getInstance();
  }

  public abstract DexField getInitClassField(DexType clazz);

  public boolean isFinal() {
    return false;
  }

  public static class Builder {

    private final Map<DexType, DexField> mapping = new ConcurrentHashMap<>();

    public void map(DexType type, DexField field) {
      assert field.holder == type;
      mapping.put(type, field);
    }

    public FinalInitClassLens build() {
      return new FinalInitClassLens(mapping);
    }
  }
}
