/**
   * Returns a JavaParameter for a given property.
   *
   * @param name Name
   * @param p Property
   * @param namespace Namespace
   * @param klass Class
   * @return Parameter
   */
  private JavaAttribute getParam(String name, Property p, Namespace namespace, JavaClass klass) {
    final JavaAttribute jp;
    final PropertyController pc = new PropertyController(name, p);
    if (p.isEnum()) {
      final JavaEnum e = pc.getEnum(namespace, name);
      jp = new JavaAttribute(name, e, klass);
      klass.linkInnerEnum(e);
    } else {
      final JavaClass type = pc.getClass(namespace, name, klass);
      jp = new JavaAttribute(name, type, klass);

      type.setUsedAsParameter();
      if (type.isInner()) {
        final String k = type.getName();
        if (innerClassDupes.containsKey(k)) {
          if (innerClassDupes.get(k) != null) {
            // update "old" type with new name and set null
            innerClassDupes.get(k).suffixName(getSuffixFromMembers(innerClassDupes.get(k)));
            innerClassDupes.put(k, null);
          }
          // update type with new name
          type.suffixName(getSuffixFromMembers(type));
        } else {
          innerClassDupes.put(k, type);
        }
        klass.linkInnerType(type);
      }
    }
    jp.setDescription(p.getDescription());
    jp.setRequired(p.isRequired());
    jp.resolveType();
    return jp;
  }