private void outputConstructor(@NonNls StringBuilder out) {
    out.append(hasEnumConstants() ? "" : "public ").append(className).append('(');
    if (requiresBackPointer) {
      final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER);
      out.append(originalClassName);
      if (!typeParams.isEmpty()) {
        out.append('<');
        boolean first = true;
        for (PsiTypeParameter typeParam : typeParams) {
          if (!first) {
            out.append(',');
          }
          out.append(typeParam.getName());
          first = false;
        }
        out.append('>');
      }
      out.append(' ').append(parameterName);
    } else if (hasEnumConstants()) {
      out.append(myEnumParameterType.getCanonicalText()).append(" ").append("value");
    }

    out.append(") {\n");
    if (requiresBackPointer) {
      final String parameterName = myJavaCodeStyleManager.propertyNameToVariableName(backPointerName, VariableKind.PARAMETER);
      if (backPointerName.equals(parameterName)) {
        out.append("this.");
      }
      out.append(backPointerName).append('=').append(parameterName).append(";\n");

    } else if (hasEnumConstants()) {
      final String fieldName = getValueFieldName();
      if (fieldName.equals("value")) {
        out.append("this.");
      }
      out.append(fieldName).append("=value;\n");
    }
    out.append("}\n");
  }
private void outputConstructor(@NonNls StringBuilder out)