package sharpen.xobotos.api.interop;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import sharpen.core.csharp.ast.CSDllImport;
import sharpen.core.csharp.ast.CSDllImport.CallingConvention;
import sharpen.core.csharp.ast.CSDllImport.CharSet;
import sharpen.xobotos.api.AbstractReference;
import sharpen.xobotos.api.interop.marshal.MarshalInfo.MarshalEntry;
import sharpen.xobotos.config.ConfigurationException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@XStreamAlias(value = "native-configuration")
public class NativeConfiguration extends AbstractReference implements IncludeFileProvider {
@XStreamAlias("dll-name")
private String _dllName;
@XStreamAlias("function-prefix")
private String _functionPrefix;
@XStreamAlias("output-dir")
private String _outputDir;
@SuppressWarnings("unused")
@XStreamImplicit(itemFieldName = "marshal-info")
private List<MarshalEntry> _marshalInfo;
@XStreamImplicit(itemFieldName = "include")
private List<String> _includes;
@SuppressWarnings("unused")
@XStreamImplicit(itemFieldName = "native-handle")
private List<NativeHandle> _nativeHandles;
private Object readResolve() {
if (_dllName == null)
throw new ConfigurationException("<native-bindings> is missing <dll-name>");
if (_outputDir == null)
throw new ConfigurationException("<native-bindings> is missing <output-dir>");
if (_includes == null)
_includes = new ArrayList<String>();
return this;
}
public String getFunctionPrefix() {
return _functionPrefix;
}
public String getOutputDir() {
return _outputDir;
}
@Override
public List<String> getIncludes() {
return Collections.unmodifiableList(_includes);
}
public CSDllImport getDllImportAttribute() {
return new CSDllImport(_dllName, CallingConvention.CDecl, CharSet.Unicode);
}
}