<html>
  <head>
    <meta name="copyright" content="Copyright Technical University Berlin and others 2004, 2010. This page is made available under the Eclipse Public License v1.0. For full details see http://www.eclipse.org/legal/epl-v10.html" />
	<link rel=stylesheet type="text/css" href="../css/book.css">
    <title>Key features of the Object Teams Development Tooling</title>
    <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  </head>
  <body>
	<h1>Object Teams Development Tooling</h1>
	<p>
	The OTDT is a development environment for the 
	<a href="http://wiki.eclipse.org/OTJ">OT/J</a> programming language.
	</p>
	<p>
	Based on the Eclipse Java development tools (JDT), it includes the following key features, which
	are explained in the next chapters.<br/>
	
	</p>
	
    <h2>Key features of the OTDT</h2>
        More details can be found on the comprehensive <a href="features.html"><strong>feature list</strong></a>.
	<ul>
	  <li><b><a href="project.html">Creating</a> an Object Teams project</b> using a wizard</li>
	  <li><b><a href="wizards.html">Creating</a> team and role classes</b> using a wizard</li>
  	  <li><a href="editor.html"><b>Editing</b></a> OT/J:
  	  	<ul style="margin-bottom:0px">
  	  		<li>Syntax highlighting, <a href="editor.html#navigation">navigation</a>, <a href="contentassist.html">content/code assist</a>, <a href="callinmarker.html">base code annotations</a></li>
  	  		<li><a href="methodcompare.html"><b>Comparing</b></a> bound methods to facilitate co-evolution of a role with its base</li>
			<li><a href="refactoring.html"><b>Refactoring</b></a> Object Teams programs</li>
  	  	</ul></li>
  	  <li>Enhanced <b>structural/navigational views</b> and a tabular editor
  	  		<ul>
  	  		<li>A table based <a href="bindingeditor.html"><b>binding editor</b></a> specifically supports the creation of <i>connectors</i></li>
	  		<li><a href="packageexplorer.html">Package explorer</a> with support for role files/team packages</li>
	  		<li><a href="outline.html">Outline</a> showing all OT/J elements</li>
	  		<li><a href="typehierarchy.html">Type hierarchy</a> with support for team inheritance</li>
	  		<li><a href="callhierarchy.html">Call hierarchy</a> showing control flows induced by callout/callin method bindings</li>
	  		</ul>
	  </li>
	  <li><a href="compilation.html"><b>Compiling</b></a> Object Teams programs</li>
	  <li><a href="running.html"><b>Running</b></a> Object Teams programs</li>
 	  <li><a href="debugging.html"><b>Debugging</b></a> Object Teams programs</li>
	</ul>

	<h2>Prerequisites</h2>
	If you have never used the eclipse Java IDE before, please consider getting familiar with the
	<a href="/help/topic/org.eclipse.jdt.doc.user/concepts/concepts-1.htm">Java Development Tooling</a>, as
	the OTDT is built on top of and extends the JDT.
  
  	<h2>Feedback</h2>
	<p>
  	If you have questions regarding the <a href="otjld/def/index.html">OT/J</a> 
  	language or if you experience problems or bugs with the OTDT, do not hesitate to post to the
  	<a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.objectteams">Object Teams forum</a>.
	</p>
	
	<p>
  	<br>
	Happy hacking,<br>
	&nbsp;&nbsp;&nbsp;&nbsp;the OTDT Team.
	</p>
	
  </body>
</html>
