@Override
  public ConfigProgram introspectField(AnnotatedField<?> field) {
    PersistenceContext pContext = field.getAnnotation(PersistenceContext.class);

    PersistenceContextType type = pContext.type();

    Field javaField = field.getJavaMember();
    String location = getLocation(javaField);

    if (!javaField.getType().isAssignableFrom(EntityManager.class)) {
      throw new ConfigException(
          L.l(
              "{0}: @PersistenceContext field must be assignable from EntityManager.",
              getLocation(javaField)));
    }

    ValueGenerator gen;

    if (PersistenceContextType.EXTENDED.equals(type))
      gen = generateExtendedContext(location, pContext);
    else gen = generateTransactionContext(location, pContext);

    return new FieldGeneratorProgram(javaField, gen);
  }
 private boolean isExtendedPersistenceContext(final AnnotationInstance annotation) {
   AnnotationValue value = annotation.value("type");
   return annotation.name().local().equals("PersistenceContext")
       && (value != null && PersistenceContextType.EXTENDED.name().equals(value.asString()));
 }