}
public void createToString(final JDefinedClass implClass, final ClassOutline classOutline) {
final JClass extends1 = implClass._extends();
implClass._implements(Cloneable.class);
final Collection<JFieldVar> fields = Util.getAllFieldsFields(classOutline, false);
LOG.info("generate clone fields#: " + implClass.name() + " (" + fields.size() + ") " + extends1.fullName());
// generate hashCode() and equals()-method
final JMethod clone = implClass.method(JMod.PUBLIC, implClass, "clone");
// annotate with @Override
clone.annotate(Override.class);
// clone._throws(CloneNotSupportedException.class);
final JVar copy = clone.body().decl(implClass, "copy");
if (extends1.fullName().equals("java.lang.Object")) {
final JTryBlock ctry = clone.body()._try();
ctry.body().assign(copy, JExpr.cast(implClass, JExpr._super().invoke("clone")));
ctry._catch(cloneNotSupportedException.boxify()).body()._throw(JExpr._new(internalError.boxify()).arg(JExpr.direct("_x.toString()")));
} else {
clone.body().assign(copy, JExpr.cast(implClass, JExpr._super().invoke("clone")));
}
for (final JFieldVar jFieldVar : fields) {
if (jFieldVar.type().fullName().equals("java.lang.String")) {
continue;
} else if (enums.contains(jFieldVar.type().fullName())) {
LOG.info("SKIP ENUM: " + jFieldVar.type().fullName());
continue;
} else if (jFieldVar.name().equals("altitudeMode")) {
LOG.info("SKIP AltitudeModeEnum: " + jFieldVar.type().fullName());
continue;
} else if (jFieldVar.type().fullName().equals("java.lang.Boolean")) {
continue;
} else if (jFieldVar.type().fullName().equals("int")) {
continue;
} else if (jFieldVar.type().fullName().equals("float")) {
continue;
} else if (jFieldVar.type().fullName().equals("double")) {
continue;
} else if (jFieldVar.type().fullName().equals("char")) {
continue;
} else if (jFieldVar.type().fullName().equals("byte")) {
continue;
} else if (jFieldVar.type().fullName().equals("boolean")) {
continue;
} else if (jFieldVar.type().fullName().startsWith("java.util.List")) {
// LOG.info(">>>>>>>>"+jFieldVar.type().boxify().name());
final List<JClass> type = jFieldVar.type().boxify().getTypeParameters();
JClass clazz = type.get(0);
if (clazz.fullName().startsWith("javax.xml.bind.JAXBElement<")) {
LOG.info("111>>>>>>>>" + clazz.fullName());
if (clazz.fullName().startsWith("javax.xml.bind.JAXBElement<")) {
final List<JClass> typeParameters = clazz.getTypeParameters();
final JClass clazz2 = typeParameters.get(0);
LOG.info("222>>>>>>>>" + clazz2.fullName());
if (clazz2.fullName().startsWith("? extends")) {
clazz = clazz2._extends();
// if (clazz2._extends().fullName().equals("java.lang.Object")) {
LOG.info("333a>>>>>>>" + clazz.fullName());
} else {
clazz = clazz2;
LOG.info("333b>>>>>>>" + clazz.fullName());