<?xml version="1.0" encoding="UTF-8"?>

<!--
(c) Copyright IBM Corp. 2000, 2003.
All Rights Reserved.
-->

<templates><template name="for" description="iterate over array" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
	${line_selection}${cursor}
}</template><template name="for" description="iterate over array w/ temporary variable" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
	${array_type} ${array_element} = ${array}[${index}];
	${cursor}
}</template><template name="for" description="iterate over collection" context="java" enabled="true">for (Iterator ${iterator} = ${collection}.iterator(); ${iterator}.hasNext(); ) {
	${type} ${element} = (${type}) ${iterator}.next();
	${cursor}
}</template><template name="while" description="iterate with enumeration" context="java" enabled="true">while (${enumeration}.hasMoreElements()) {
	${type} ${element} = (${type}) ${enumeration}.nextElement();
	${cursor}
}</template><template name="while" description="iterate with iterator" context="java" enabled="true">while (${iterator}.hasNext()) {
	${type} ${element} = (${type}) ${iterator}.next();
	${cursor}
}</template><template name="do" description="do while statement" context="java" enabled="true">do {
	${line_selection}${cursor}
} while (${condition});</template><template name="switch" description="switch case statement" context="java" enabled="true">switch (${key}) {
	case ${value}:
		${cursor}
		break;

	default:
		break;
}</template><template name="if" description="if statement" context="java" enabled="true">if (${condition}) {
	${line_selection}${cursor}
}</template><template name="ifelse" description="if else statement" context="java" enabled="true">if (${condition}) {
	${cursor}
} else {
	
}</template><template name="elseif" description="else if block" context="java" enabled="true">else if (${condition}) {
	${cursor}
}</template><template name="else" description="else block" context="java" enabled="true">else {
	${cursor}
}</template><template name="try" description="try catch block" context="java" enabled="true">try {
	${line_selection}${cursor}
} catch (${Exception} e) {
	// ${todo}: handle exception
}</template><template name="catch" description="catch block" context="java" enabled="true">catch (${Exception} e) {
	${cursor}// ${todo}: handle exception
}</template><template name="main" description="main method" context="java" enabled="true">public static void main(String[] args) {
	${cursor}
}</template><template name="public_method" description="public method" context="java" enabled="true">public ${return_type} ${name}(${arguments}) {
	${cursor}
}</template><template name="protected_method" description="protected method" context="java" enabled="true">protected ${return_type} ${name}(${arguments}) {
	${cursor}
}</template><template name="private_method" description="private method" context="java" enabled="true">private ${return_type} ${name}(${arguments}) {
	${cursor}
}</template><template name="private_static_method" description="private static method" context="java" enabled="true">private static ${return_type} ${name}(${arguments}) {
	${cursor}
}</template><template name="instanceof" description="dynamic type test and cast" context="java" enabled="true">if (${name} instanceof ${type}) {
	${type} ${new_name} = (${type})${name};
	${cursor}
}</template><template name="cast" description="dynamic cast" context="java" enabled="true">${type} ${new_name} = (${type}) ${name};</template><template name="new" description="create new object" context="java" enabled="true">${type} ${name} = new ${type}(${arguments});</template><template name="lazy" description="lazy creation" context="java" enabled="true">if (${name} == null) {
	${name} = new ${type}(${arguments});
	${cursor}
}

return ${name};</template><template name="toarray" description="convert collection to array" context="java" enabled="true">(${type}[]) ${collection}.toArray(new ${type}[${collection}.size()]);</template><template name="sysout" description="print to standard out" context="java" enabled="true">System.out.println(${word_selection}${cursor});</template><template name="syserr" description="print to standard error" context="java" enabled="true">System.err.println(${word_selection}${cursor});</template><template name="&lt;code&gt;" description="&lt;code&gt;&lt;/code&gt;" context="javadoc" enabled="true">&lt;code&gt;${word_selection}${cursor}&lt;/code&gt;</template><template name="&lt;code&gt;" description="&lt;code&gt;null&lt;/code&gt;" context="javadoc" enabled="true">&lt;code&gt;null&lt;/code&gt;</template><template name="&lt;pre&gt;" description="&lt;pre&gt;&lt;/pre&gt;" context="javadoc" enabled="true">&lt;pre&gt;${word_selection}${cursor}&lt;/pre&gt;</template><template name="&lt;b&gt;" description="&lt;b&gt;&lt;/b&gt;" context="javadoc" enabled="true">&lt;b&gt;${word_selection}${cursor}&lt;/b&gt;</template><template name="&lt;i&gt;" description="&lt;i&gt;&lt;/i&gt;" context="javadoc" enabled="true">&lt;i&gt;${word_selection}${cursor}&lt;/i&gt;</template><template name="@author" description="author name" context="javadoc" enabled="true">@author ${user}</template><template name="while" description="while loop with condition" context="java" enabled="true">while (${condition}) {
	${line_selection}${cursor}
}</template><template name="test" description="test method" context="java" enabled="true">public void test${name}() {
	${cursor} 
}</template>
<template name="systrace" description="print current method to standard out" context="java" enabled="true">System.out.println(&quot;${enclosing_type}.${enclosing_method}()&quot;);</template>
</templates>