package sharpen.xobotos.api.interop; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamOmitField; import sharpen.core.csharp.ast.CSTypeReference; import sharpen.core.csharp.ast.CSTypeReferenceExpression; import sharpen.xobotos.config.ConfigurationException; import sharpen.xobotos.config.annotations.AttributeReference; @XStreamAlias("native-handle") public class NativeHandle extends NativeTypeTemplate { @XStreamAsAttribute @XStreamAlias("name") private String _name; @XStreamAsAttribute @XStreamAlias("type") private String _type; @XStreamAlias("class") private String _nativeClass; @XStreamAsAttribute @XStreamAlias("field") private String _field; @XStreamAsAttribute @XStreamAlias("property") private String _property; @XStreamOmitField @AttributeReference("parent") private NativeHandle _parent; @XStreamAsAttribute @XStreamAlias("has-refcount") private boolean _hasRefCnt; private Object readResolve() { if (_name == null) throw new ConfigurationException("Missing 'name' in <native-handle>"); if (_type == null) throw new ConfigurationException("Missing 'type' in <native-handle>"); if (_nativeClass == null) throw new ConfigurationException("Missing 'native-class' in <native-handle>"); return this; } public String getName() { return _name; } public String getField() { return _field; } public String getProperty() { return _property; } public String getNativeClass() { return _nativeClass; } public CSTypeReferenceExpression getManagedType() { return new CSTypeReference(_type + "." + _name); } public String getManagedTypeName() { return _type; } public boolean hasRefCount() { return _hasRefCnt; } public NativeHandle getParent() { return _parent; } }