private void addPersistentMembers(
      List<? extends Element> membersOfClass, AccessType membersKind) {
    for (Element memberOfClass : membersOfClass) {
      AccessType forcedAccessType = TypeUtils.determineAnnotationSpecifiedAccessType(memberOfClass);
      if (entityAccessTypeInfo.getAccessType() != membersKind && forcedAccessType == null) {
        continue;
      }

      if (TypeUtils.containsAnnotation(memberOfClass, Constants.TRANSIENT)
          || memberOfClass.getModifiers().contains(Modifier.TRANSIENT)
          || memberOfClass.getModifiers().contains(Modifier.STATIC)) {
        continue;
      }

      MetaAttributeGenerationVisitor visitor = new MetaAttributeGenerationVisitor(this, context);
      AnnotationMetaAttribute result = memberOfClass.asType().accept(visitor, memberOfClass);
      if (result != null) {
        members.put(result.getPropertyName(), result);
      }
    }
  }
  protected final void init() {
    getContext().logMessage(Diagnostic.Kind.OTHER, "Initializing type " + getQualifiedName() + ".");

    TypeUtils.determineAccessTypeForHierarchy(element, context);
    entityAccessTypeInfo = context.getAccessTypeInfo(getQualifiedName());

    List<? extends Element> fieldsOfClass = ElementFilter.fieldsIn(element.getEnclosedElements());
    addPersistentMembers(fieldsOfClass, AccessType.FIELD);

    List<? extends Element> methodsOfClass = ElementFilter.methodsIn(element.getEnclosedElements());
    addPersistentMembers(methodsOfClass, AccessType.PROPERTY);

    initialized = true;
  }