package org.checkerframework.framework.type;

import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.type.TypeKind;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedArrayType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType;

/**
 * SyntheticArrays exists solely to fix AnnotatedTypeMirrors that need to be adapted from Array type
 * to a specific kind of array. There are no classes for arrays. Instead, for each type of array
 * (e.g. String[]) the compiler/JVM creates a synthetic type for them.
 */
public class SyntheticArrays {

  /**
   * Returns true if this combination of type/elem represents an array.clone.
   *
   * @param type a type with a method/field of elem
   * @param elem an element which is a member of type
   * @return true if this combination of type/elem represents an array.clone
   */
  public static boolean isArrayClone(final AnnotatedTypeMirror type, final Element elem) {
    return type.getKind() == TypeKind.ARRAY
        && elem.getKind() == ElementKind.METHOD
        && elem.getSimpleName().contentEquals("clone");
  }

  /**
   * Returns the annotated type of methodElem with its return type replaced by newReturnType.
   *
   * @param methodElem identifies a method that should have an AnnotatedArrayType as its return type
   * @param newReturnType identifies a type that should replace methodElem's return type
   * @return the annotated type of methodElem with its return type replaced by newReturnType
   */
  public static AnnotatedExecutableType replaceReturnType(
      final Element methodElem, final AnnotatedArrayType newReturnType) {
    final AnnotatedExecutableType method =
        (AnnotatedExecutableType) newReturnType.atypeFactory.getAnnotatedType(methodElem);
    method.returnType = newReturnType;
    return method;
  }
}
