<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Generating the SWT JNI Code</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
    <link rel="stylesheet" href="swt.css" type="text/css">
    <link rel="shortcut icon" href="http://www.eclipse.org/images/eclipse.ico" type="image/x-icon">
</head>
<body bgcolor="#ffffff" text="#000000">
<table width="875px" class="swtpage">
<colgroup><col width="125px"><col width="750px"></colgroup>
<tr><?php include "sidebar.php"; ?>
<td valign="top" style="padding: 10px"><h1 style="padding: 0; margin: 0; border-bottom: 1px solid #000000;">Generating the SWT JNI Code</h1>

<p>All of the C code used by SWT is generated by the <b>JNIGeneratorApp</b>
application from the <i>org.eclipse.swt.tools</i> project in Eclipse CVS.
This page describes how to use this tool when fixing bugs or adding
features to SWT.</p>

<h3>Adding native methods</h3>

<ol>
<li>Add the function prototype in <tt>OS.java</tt>, copying the style and structure
    of the other functions in that file.
    <p></p>
<li>Run <b>JNIGeneratorAppUI</b> from <i>org.eclipse.swt.tools</i>.  This
    is a GUI application for editing the metadata and a front end to the
    generation phase.  Select the appropriate class in the list and then
    find the method you added in <tt>OS.java</tt>.
    <p></p>
    <center><img src="images/jnigen.png" alt="JNIGeneratorAppUI"></center>
    <p></p>
<li>Set any flags and modify the casts for any primitive types.
    <p></p>
<li>Hit <i>Generate All</i> to generate the C code and metadata files.
    <p></p>
<li>Refresh the <i>org.eclipse.swt</i> project to tell Eclipse about the C
    changes, and refresh the <i>org.eclipse.swt.tools</i> project to see the
    metadata changes.
    <p></p>
<li>Compile the new C code and copy the new libraries to the appropriate
    fragment.  To compile the code, use the <tt>build.xml</tt> file in the
    <tt>Eclipse SWT PI/ws/library</tt> directory for your window system.
    Refresh your workspace after running the build to ensure Eclipse
    picks up the fresh binaries.
    <p></p>
    <center><img src="images/buildxml.png" alt="build.xml"></center>
    <p></p>
</ol>

<h3>Adding structs</h3>

<p>Often, methods return values or require parameters as a C struct.  To
add a new structure, simply add a new class in the same package as
the OS.java file which matches the definition of the C structure.
This will be picked up and correctly handled by <i>JNIGeneratorApp</i>.</p>

<p>If a struct is input-only or output-only, this information can be used
by <i>JNIGeneratorApp</i> to generate more efficient C code.  Use the
<b>flags</b> attribute of the native function to indicate this in the
metadata.</p>

<h3>More Hints</h3>

<ul>
<li>For GTK+ and Motif, all native functions must be wrapped in locking
    code.  When adding functions, simply copy the style and structure of the
    other native functions.
<li>Many functions on Mac OS X return structs which use <b>unions</b>.  For
    an example of how to add the markup for a union, see the
    <b>ControlFontStyleRec</b> structure and its metadata.
</ul>

<p>And there you go!  If you're having trouble, please post to the SWT
mailing list or file a new bug in bugzilla.</p>

</table>
</body>
</html>