package org.jvnet.jaxb2_commons.xjc.outline.artificial; import org.jvnet.jaxb2_commons.xjc.outline.MClassOutline; import org.jvnet.jaxb2_commons.xjc.outline.MPropertyAccessor; import org.jvnet.jaxb2_commons.xml.bind.model.MPropertyInfo; import com.sun.codemodel.JBlock; import com.sun.codemodel.JExpr; import com.sun.codemodel.JExpression; import com.sun.codemodel.JMethod; import com.sun.codemodel.JMod; import com.sun.codemodel.JVar; import com.sun.tools.xjc.model.nav.NClass; import com.sun.tools.xjc.model.nav.NType; import com.sun.tools.xjc.outline.Outline; public class SinglePropertyOutline extends AbstractSinglePropertyOutline { public SinglePropertyOutline(Outline outline, MClassOutline classOutline, MPropertyInfo<NType, NClass> target) { super(outline, classOutline, target); } protected JMethod generateGetter() { final JMethod getter = referenceClass.method(JMod.PUBLIC, type, getGetterMethodName()); getter.body()._return(field); return getter; } protected JMethod generateSetter() { final JMethod setter = referenceClass.method(JMod.PUBLIC, codeModel.VOID, getSetterMethodName()); final JVar value = setter.param(type, "value"); setter.body().assign(JExpr._this().ref(field), value); return setter; } public MPropertyAccessor createPropertyAccessor(JExpression target) { return new PropertyAccessor(target); } protected class PropertyAccessor extends AbstractSinglePropertyOutline.PropertyAccessor { public PropertyAccessor(JExpression target) { super(target); } public JExpression isSet() { return field.ne(JExpr._null()); } public void unset(JBlock body) { body.assign(field, JExpr._null()); } } }