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

import com.android.tools.r8.graph.DexClasspathClass;
import com.android.tools.r8.synthesis.SyntheticNaming.SyntheticKind;
import com.android.tools.r8.utils.structural.RepresentativeMap;
import com.google.common.hash.Hasher;

/**
 * Definition of a synthetic classpath class.
 *
 * <p>This class is internal to the synthetic items collection, thus package-protected.
 */
class SyntheticClasspathClassDefinition
    extends SyntheticClassDefinition<
        SyntheticClasspathClassReference, SyntheticClasspathClassDefinition, DexClasspathClass>
    implements SyntheticClasspathDefinition {

  SyntheticClasspathClassDefinition(
      SyntheticKind kind, SynthesizingContext context, DexClasspathClass clazz) {
    super(kind, context, clazz);
  }

  @Override
  public boolean isClasspathDefinition() {
    return true;
  }

  @Override
  public SyntheticClasspathDefinition asClasspathDefinition() {
    return this;
  }

  @Override
  SyntheticClasspathClassReference toReference() {
    return new SyntheticClasspathClassReference(getKind(), getContext(), clazz.getType());
  }

  @Override
  public boolean isValid() {
    return clazz.isPublic() && clazz.isFinal() && clazz.accessFlags.isSynthetic();
  }

  @Override
  void internalComputeHash(Hasher hasher, RepresentativeMap map) {
    clazz.hashWithTypeEquivalence(hasher, map);
  }

  @Override
  int internalCompareTo(SyntheticClasspathClassDefinition o, RepresentativeMap map) {
    return clazz.compareWithTypeEquivalenceTo(o.clazz, map);
  }

  @Override
  public String toString() {
    return "SyntheticClasspathClass{ clazz = "
        + clazz.type.toSourceString()
        + ", kind = "
        + getKind()
        + ", context = "
        + getContext()
        + " }";
  }
}
