blob: a50ec93d2625c4928e7cfa6e8d26293fb7a2cc01 [file] [log] [blame]
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="../css/ot.css" />
<link rel="stylesheet" type="text/css" href="../css/otjld.css" />
<title>OT/J Language Definition v1.3.1</title>
</head>
<body class="otdt">
<div id="content">
<table class="nav">
<tr>
<td class="back"><a id="top"></a><a href="s9.html" rel="prev">&lt;&lt;&nbsp;&sect;9&nbsp;Value Dependent Classes</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="sB.html" rel="next">&sect;B&nbsp;Changes between versions&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="chapter" id="sA">
<div class="headl">
<div class="headr">
<h1>&sect;A&nbsp;OT/J Syntax</h1>
</div>
</div>
<div id="toc-box">
<ul class="toc-box">
<li><a href="sA.html">&sect;A&nbsp;OT/J Syntax</a></li>
<li><a href="#sA.0">&sect;A.0&nbsp;Keywords</a></li>
<li><a href="#sA.1">&sect;A.1&nbsp;Class definitions</a></li>
<li><a href="#sA.2">&sect;A.2&nbsp;Modifiers</a></li>
<li><a href="#sA.3">&sect;A.3&nbsp;Method bindings</a></li>
<li><a href="#sA.4">&sect;A.4&nbsp;Parameter mappings</a></li>
<li><a href="#sA.5">&sect;A.5&nbsp;Statements</a></li>
<li><a href="#sA.6">&sect;A.6&nbsp;Types</a></li>
<li><a href="#sA.7">&sect;A.7&nbsp;Guard predicates</a></li>
<li><a href="#sA.8">&sect;A.8&nbsp;Precedence declaration</a></li>
<li><a href="#sA.9">&sect;A.9&nbsp;Value dependent types</a></li>
<li><a href="#sA.10">&sect;A.10&nbsp;Packages and imports</a></li>
</ul>
</div>
<div class="intro">
<h3>Notation</h3>
<p>The following grammar rules extend the Java grammar given in the
<a href="http://java.sun.com/docs/books/jls/second_edition/html/syntax.doc.html"
class="ext">Java Language Specification</a>.
We adopt the conventions of printing non-terminal symbols in italic font
(e.g., <tt><em>ClassDeclaration</em></tt>),
and terminal symbols in roman font (e.g., <tt>class</tt>).
Names printed in black refer to definitions from the original Java grammar.
Object Teams additions are printed in <strong class="blue">blue boldface</strong>.
For those rules that simply add a new option to an existing rule,
the original options are indicated by an ellipse (<code>...</code>).
</p>
</div>
<div class="sect depth2" id="sA.0">
<h2 class="sect">&sect;A.0&nbsp;Keywords<a class="img" href="sA.html#sA.0"
title="PermaLink to &sect;A.0&nbsp;Keywords"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<p>The keywords introduced by OT/J have different scopes, which means outside their
given scope these keywords can be used for regular identifiers. Only these names
are keywords unconditionally:
</p>
<div class="listing plain"><pre>readonly, team, within</pre></div>
<div class="sect depth3" id="sA.0.1">
<h3 class="sect">&sect;A.0.1&nbsp;Scoped keywords<a class="img" href="sA.html#sA.0.1"
title="PermaLink to &sect;A.0.1&nbsp;Scoped keywords"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#sA.0">&uarr;&nbsp;&sect;A.0</a></span></h3>
<p>The following names are keywords in OT/J only if they appear within a team or role class,
ie., after the keyword <strong class="blue">team</strong> has been recognized:
</p>
<div class="listing plain"><pre>as, base, callin, playedBy, precedence, tsuper, with, when</pre></div>
<p>These names are keywords only in the context of a callin or callout binding
respectively (<a href="#sA.3" title="&sect;A.3&nbsp;Method bindings" class="sect">&sect;A.3</a>):
</p>
<div class="listing plain"><pre>after, before, replace, get, set</pre></div>
</div>
<div class="sect depth3" id="sA.0.2">
<h3 class="sect">&sect;A.0.2&nbsp;Inheriting scoped keywords<a class="img" href="sA.html#sA.0.2"
title="PermaLink to &sect;A.0.2&nbsp;Inheriting scoped keywords"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#sA.0">&uarr;&nbsp;&sect;A.0</a></span></h3>
<p>While regular Java classes may use the scoped keywords
(<a href="#sA.0.1" title="&sect;A.0.1&nbsp;Scoped keywords" class="sect">&sect;A.0.1</a>) of OT/J freely, it is an error if a role class
inherits a feature whose name is a scoped keyword.
</p>
</div>
<div class="sect depth3" id="sA.0.3">
<h3 class="sect">&sect;A.0.3&nbsp;Internal names<a class="img" href="sA.html#sA.0.3"
title="PermaLink to &sect;A.0.3&nbsp;Internal names"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#sA.0">&uarr;&nbsp;&sect;A.0</a></span></h3>
<p>Compiler and runtime environment generate internal methods and fields which start with
the prefix <code>_OT$</code>. It is illegal to use any of these methods and fields within client code.
</p>
</div>
</div>
<div class="sect depth2" id="sA.1">
<h2 class="sect">&sect;A.1&nbsp;Class definitions<a class="img" href="sA.html#sA.1"
title="PermaLink to &sect;A.1&nbsp;Class definitions"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<p>Class definitions add two new keywords <code>team</code> and
<code>playedBy</code>. Classes which use these keywords are called
<strong>teams</strong> and <strong>bound roles</strong>, respectively.
Any class that inherits from a bound role class (either by an
<code>extends</code> clause or by implicit inheritance, cf.
<a href="s1.html#s1.3.1.c"
title="&sect;1.3.1.(c)&nbsp;Overriding and implicit inheritance"
class="sect">&sect;1.3.1.(c)</a>) is again a bound role class.
</p>
<table class="syntaxrule" id="sA.1.1">
<tr>
<td class="sect">&sect;&nbsp;A.1.1</td>
<td class="rule"><span class="title">ClassDeclaration</span><br /><em>[Modifiers] </em><strong class="blue"><em>[</em>team<em>]</em></strong> class <em>Identifier [</em>extends <em>Type] [</em>implements <em>TypeList]</em><br /><span class="indent5"></span><strong class="blue"><em>[</em>playedBy <em>Type] [Guard]</em></strong><em> ClassBody</em></td>
</tr>
</table>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li>A class which has a <code>playedBy</code> clause (a <strong>bound
role</strong> class) may not be declared static and
must be directly contained in a class that has the
<code>team</code> modifier (a <strong>team</strong> class).
</li>
<li>A class which inherits from a team class must have the
<code>team</code> modifier, too.
</li>
<li>A class which has a guard (see <a href="s5.html#s5.4" title="&sect;5.4&nbsp;Guard predicates" class="sect">&sect;5.4</a>)
must be a team or a role.
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.2">
<h2 class="sect">&sect;A.2&nbsp;Modifiers<a class="img" href="sA.html#sA.2"
title="PermaLink to &sect;A.2&nbsp;Modifiers"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<p>The rule for method modifiers adds one keyword: <code>callin</code>:
</p>
<table class="syntaxrule" id="sA.2.1">
<tr>
<td class="sect">&sect;&nbsp;A.2.1</td>
<td class="rule"><span class="title">Modifier</span><br />... <br /><strong class="blue">callin</strong></td>
</tr>
</table>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li>The class of a method which has the <code>callin</code> modifier
may not be declared static and must be directly contained in a team class.
</li>
<li>A method that has the <code>callin</code> modifier may not
appear in an explicit method call (rule Apply in JLS).
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.3">
<h2 class="sect">&sect;A.3&nbsp;Method bindings<a class="img" href="sA.html#sA.3"
title="PermaLink to &sect;A.3&nbsp;Method bindings"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<p>The rule of items declarable in a class body is augmented by method
bindings:
</p>
<table class="syntaxrule" id="sA.3.1">
<tr>
<td class="sect">&sect;&nbsp;A.3.1</td>
<td class="rule"><span class="title">ClassBodyDeclaration</span><br />... <br /><strong class="blue"><em>CalloutBinding</em></strong><br /><strong class="blue"><em>CallinBinding</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.2">
<tr>
<td class="sect">&sect;&nbsp;A.3.2</td>
<td class="rule"><span class="title">CalloutBinding</span><br /><em>[Modifier] [TypeArguments] <strong class="blue">MethodSpec CalloutKind MethodSpec CalloutParameterMappings</strong></em><br /><em>[Modifier] [TypeArguments] <strong class="blue">MethodSpec CalloutKind CalloutModifier FieldSpec</strong></em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.3">
<tr>
<td class="sect">&sect;&nbsp;A.3.3</td>
<td class="rule"><span class="title">Callin binding</span><br /><em>[ Identifier </em>:<em> ] [TypeArguments]</em><strong class="blue"><em> MethodSpec</em> &lt;- <em>CallinModifier MethodSpecs </em><br /><span class="indent5"></span>
[<em>Guard</em>]<em> CallinParameterMappings</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.4">
<tr>
<td class="sect">&sect;&nbsp;A.3.4</td>
<td class="rule"><span class="title">MethodSpec</span><br /><em>Identifier</em><br /><em>ResultType MethodDeclarator</em><br /><em>ConstructorDeclarator</em></td>
</tr>
</table>
<div class="note">
Note, that <em>ResultType</em>, <em>MethodDeclarator</em> and <em>ConstructorDeclarator</em> are not explicit in the
overall syntax of the Java language specification. For convenience we refer to the definition in
sections <a href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4"
class="ext">8.4. Method Declarations</a>
and <a href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8"
class="ext">8.8. Constructor Declarations</a>
of the Java language specification.
</div>
<table class="syntaxrule" id="sA.3.5">
<tr>
<td class="sect">&sect;&nbsp;A.3.5</td>
<td class="rule"><span class="title">MethodSpecs</span><br /><strong class="blue"><em>MethodSpec [</em>, <em>MethodSpecs]</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.6">
<tr>
<td class="sect">&sect;&nbsp;A.3.6</td>
<td class="rule"><span class="title">CalloutKind</span><br /><strong class="blue">-&gt;<br />=&gt;</strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.7">
<tr>
<td class="sect">&sect;&nbsp;A.3.7</td>
<td class="rule"><span class="title">CallinModifier</span><br /><strong class="blue">before</strong><br /><strong class="blue">after</strong><br /><strong class="blue">replace</strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.8">
<tr>
<td class="sect">&sect;&nbsp;A.3.8</td>
<td class="rule"><span class="title">CalloutModifier</span><br /><strong class="blue">get</strong><br /><strong class="blue">set</strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.3.9">
<tr>
<td class="sect">&sect;&nbsp;A.3.9</td>
<td class="rule"><span class="title">FieldSpec</span><br /><em>[Type] Identifier</em></td>
</tr>
</table>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li><code>CalloutBinding</code>s and <code>CallinBinding</code>s
may occur only in bound role classes.
</li>
<li>A <code>CalloutBinding</code> or <code>CallinBinding</code>
may not mix identifiers and full signatures (<code>MethodDeclarationHead</code>)
for its method specifiers (<code>MethodSpec</code>).
<br />
Binding a full method signature to a field requires the <code>FieldSpec</code>
to include the <code>Type</code>.
</li>
<li>The method specifier at the left hand side of a
<code>CallinBinding</code> which has the <code>replace</code> modifier
must refer to a method that has the <code>callin</code> modifier.
</li>
<li>The <code>Modifier</code> of a callout binding can only be one of the visility
modifiers <code>public</code>, <code>protected</code> or <code>private</code>.
A short callout binding (i.e., without signatures) must not specify
a visibility modifier.
</li>
<li>A <code>MethodSpec</code> of the shape <code>ConstructorDeclarator</code> is
legal only on the right hand side of a callin after binding (see <a href="s4.html#s4.1.i" title="&sect;4.1.(i)&nbsp;Callin to constructor"
class="sect">&sect;4.1.(i)</a>).
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.4">
<h2 class="sect">&sect;A.4&nbsp;Parameter mappings<a class="img" href="sA.html#sA.4"
title="PermaLink to &sect;A.4&nbsp;Parameter mappings"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.4.1">
<tr>
<td class="sect">&sect;&nbsp;A.4.1</td>
<td class="rule"><span class="title">CalloutParameterMappings</span><br /><strong class="blue">with { <em>CalloutParameterMappingList [,]</em> }</strong><br /><strong class="blue">;</strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.4.2">
<tr>
<td class="sect">&sect;&nbsp;A.4.2</td>
<td class="rule"><span class="title">CallinParameterMappings</span><br /><strong class="blue">with { <em>CallinParameterMappingList [,]</em> }</strong><br /><strong class="blue">;</strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.4.3">
<tr>
<td class="sect">&sect;&nbsp;A.4.3</td>
<td class="rule"><span class="title">CalloutParameterMappingList</span><br /><strong class="blue"><em>CalloutParameterMapping [</em>,<em> CalloutParameterMappingList]</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.4.4">
<tr>
<td class="sect">&sect;&nbsp;A.4.4</td>
<td class="rule"><span class="title">CallinParameterMappingList</span><br /><strong class="blue"><em>CallinParameterMapping [</em>,<em> CallinParameterMappingList]</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.4.5">
<tr>
<td class="sect">&sect;&nbsp;A.4.5</td>
<td class="rule"><span class="title">CalloutParameterMapping</span><br /><em>Expression</em><strong class="blue"> -&gt; </strong><em>Identifier</em><br /><strong class="blue">result &lt;- </strong><em>Expression</em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.4.6">
<tr>
<td class="sect">&sect;&nbsp;A.4.6</td>
<td class="rule"><span class="title">CallinParameterMapping</span><br /><em>Identifier</em><strong class="blue"> &lt;- </strong><em>Expression</em><br /><em>Expression</em><strong class="blue"> -&gt; </strong><strong class="blue">result</strong></td>
</tr>
</table>
<div class="note">
<h5>Note:</h5>
By defining ";" as an option for parameter mappings, the grammar enforces that
method bindings without a parameter mapping are terminated by a ";".
Also method bindings with parameter mappings may optionally be terminated by a ";",
which in that case is interpreted as an empty member declaration, following the
same pattern how non-abstract methods in Java may optionally have a trailing ";".
</div>
</div>
<div class="sect depth2" id="sA.5">
<h2 class="sect">&sect;A.5&nbsp;Statements<a class="img" href="sA.html#sA.5"
title="PermaLink to &sect;A.5&nbsp;Statements"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.5.1">
<tr>
<td class="sect">&sect;&nbsp;A.5.1</td>
<td class="rule"><span class="title">Statement</span><br />... <br /><em><strong class="blue">Within</strong><br /><strong class="blue">BaseCall</strong><br /><strong class="blue">TSuperCall</strong></em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.5.2">
<tr>
<td class="sect">&sect;&nbsp;A.5.2</td>
<td class="rule"><span class="title">Within</span><br /><strong class="blue">within</strong> ( <em>Expression</em> ) <em>Statement</em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.5.3">
<tr>
<td class="sect">&sect;&nbsp;A.5.3</td>
<td class="rule"><span class="title">BaseCall</span><br /><strong class="blue">base</strong> . <em>Identifier</em> ( <em>Arguments<sub>opt</sub></em> )
<br /><strong class="blue">base</strong> ( <em>Arguments<sub>opt</sub></em> )
</td>
</tr>
</table>
<table class="syntaxrule" id="sA.5.4">
<tr>
<td class="sect">&sect;&nbsp;A.5.4</td>
<td class="rule"><span class="title">TSuperCall</span><br /><strong class="blue">tsuper</strong> . <em>Identifier</em> ( <em>Arguments<sub>opt</sub></em> )
<br /><strong class="blue">tsuper</strong> ( <em>Arguments<sub>opt</sub></em> )
</td>
</tr>
</table>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li>The expression of a <code>Within</code> must evaluate
to an instance of a team class.
</li>
<li>The first form of a <code>BaseCall</code> may occur only
in the body of a method that has the <code>callin</code> modifier.
The identifier must be the name of the enclosing method.
</li>
<li>The second form of a <code>BaseCall</code> may occur only in a constructor of a
bound role class.
</li>
<li>The first form of a <code>TSuperCall</code> may occur only in a method of
a role class.
</li>
<li>The second form of a <code>TSuperCall</code> may occur only in a constructor of a
role class.
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.6">
<h2 class="sect">&sect;A.6&nbsp;Types<a class="img" href="sA.html#sA.6" title="PermaLink to &sect;A.6&nbsp;Types"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.6.1">
<tr>
<td class="sect">&sect;&nbsp;A.6.1</td>
<td class="rule"><span class="title">Type</span><br />... <br /><strong class="blue"><em>LiftingType</em></strong><br /><strong class="blue"><em>AnchoredType</em></strong></td>
</tr>
</table>
<table class="syntaxrule" id="sA.6.2">
<tr>
<td class="sect">&sect;&nbsp;A.6.2</td>
<td class="rule"><span class="title">LiftingType</span><br /><em>Type</em><strong class="blue"> as </strong><em>Type</em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.6.3">
<tr>
<td class="sect">&sect;&nbsp;A.6.3</td>
<td class="rule"><span class="title">AnchoredType</span><br /><strong class="blue"><em>Path</em></strong>.<em>Type</em></td>
</tr>
</table>
<table class="syntaxrule" id="sA.6.4">
<tr>
<td class="sect">&sect;&nbsp;A.6.4</td>
<td class="rule"><span class="title">Path</span><br /><em>Identifier</em><br /><strong class="blue"><em>Path</em></strong>.<em>Identifier</em></td>
</tr>
</table>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li id="sA.6.a"><span class="title">Location</span><br />
A <code>LiftingType</code> may only occur in the parameter list
of a method of a team class.
</li>
<li id="sA.6.b"><span class="title">Role in scope</span><br />
The right hand side type in a <code>LiftingType</code>
must be a class directly contained in the enclosing team class
(the class may be acquired by <a href="s1.html#s1.3.1.c"
title="&sect;1.3.1.(c)&nbsp;Overriding and implicit inheritance"
class="sect">implicit inheritance (&sect;1.3.1.(c))</a>).
</li>
<li id="sA.6.c"><span class="title">Team path</span><br /><em>Note, that the syntax of &sect;A.6.3/4 is deprecated in favor of <a href="#sA.9" title="&sect;A.9&nbsp;Value dependent types" class="sect">&sect;A.9</a></em>.
<br />
The path in an <code>AnchoredType</code> must refer to an instance of a team class.
Each identifier in the path must be declared with the <code>final</code> modifier.
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.7">
<h2 class="sect">&sect;A.7&nbsp;Guard predicates<a class="img" href="sA.html#sA.7"
title="PermaLink to &sect;A.7&nbsp;Guard predicates"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.7.1">
<tr>
<td class="sect">&sect;&nbsp;A.7.1</td>
<td class="rule"><span class="title">Guard</span><br /><strong class="blue"><em>[</em>base<em>]</em> when</strong> ( <em>Expression</em> )
</td>
</tr>
</table>
<table class="syntaxrule" id="sA.7.2">
<tr>
<td class="sect">&sect;&nbsp;A.7.2</td>
<td class="rule"><span class="title">MethodDeclaration</span><br />...<br /><em>MethodHeader <strong class="blue">[Guard]</strong> MethodBody</em></td>
</tr>
</table>
<p>Other rules referring to <em><code>Guard</code></em>:
<a href="#sA.1.1" title="&sect;A.1.1&nbsp;ClassDeclaration" class="sect">ClassDeclaration (&sect;A.1.1)</a>,
<a href="#sA.3.3" title="&sect;A.3.3&nbsp;Callin binding" class="sect">CallinBinding (&sect;A.3.3)</a></p>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li>The <code>Expression</code> in a guard must have type <code>boolean</code>.
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.8">
<h2 class="sect">&sect;A.8&nbsp;Precedence declaration<a class="img" href="sA.html#sA.8"
title="PermaLink to &sect;A.8&nbsp;Precedence declaration"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.8.1">
<tr>
<td class="sect">&sect;&nbsp;A.8.1</td>
<td class="rule"><span class="title">PrecedenceDeclaration</span><br /><strong class="blue">precedence [after] </strong><em> CallinNameList</em> ;
</td>
</tr>
</table>
<table class="syntaxrule" id="sA.8.2">
<tr>
<td class="sect">&sect;&nbsp;A.8.2</td>
<td class="rule"><span class="title">CallinNameList</span><br /><em>Name [, CallinNameList]</em></td>
</tr>
</table>
</div>
<div class="sect depth2" id="sA.9">
<h2 class="sect">&sect;A.9&nbsp;Value dependent types<a class="img" href="sA.html#sA.9"
title="PermaLink to &sect;A.9&nbsp;Value dependent types"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.9.1">
<tr>
<td class="sect">&sect;&nbsp;A.9.1</td>
<td class="rule"><span class="title">TypeParameter</span><br /><em>TypeVariable [TypeBound]</em><br /><strong class="blue"><em>ReferenceType Name</em></strong></td>
</tr>
</table>
<p>See <a href="http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#108850"
class="ext">JLS 3 &sect;4.4</a></p>
<table class="syntaxrule" id="sA.9.2">
<tr>
<td class="sect">&sect;&nbsp;A.9.2</td>
<td class="rule"><span class="title">ActualTypeArgument</span><br /><em>ReferenceType</em><br /><em>Wildcard</em><br /><strong class="blue"><em>@Name</em></strong></td>
</tr>
</table>
<p>See <a href="http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#107353"
class="ext">JLS 3 &sect;4.5.1</a></p>
<div class="constraints">
<h5 class="constraints">Contextual constraints:</h5>
<ol class="constraints">
<li id="sA.9.a"><span class="title">ActualTypeParameter</span><br />
An <code>ActualTypeArgument</code> of the form <code>@Name</code> may only occur
as a parameter of a simple name type reference.
</li>
</ol>
</div>
</div>
<div class="sect depth2" id="sA.10">
<h2 class="sect">&sect;A.10&nbsp;Packages and imports<a class="img" href="sA.html#sA.10"
title="PermaLink to &sect;A.10&nbsp;Packages and imports"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a><span class="toplink"><a href="#top">&uarr;&nbsp;&sect;A</a></span></h2>
<table class="syntaxrule" id="sA.10.1">
<tr>
<td class="sect">&sect;&nbsp;A.10.1</td>
<td class="rule"><span class="title">PackageDeclaration</span><br />...<br /><strong class="blue">team </strong>package<em> QualifiedName</em> ;
</td>
</tr>
</table>
<table class="syntaxrule" id="sA.10.2">
<tr>
<td class="sect">&sect;&nbsp;A.10.2</td>
<td class="rule"><span class="title">Import</span><br />...<br /><strong>import </strong><strong class="blue">base </strong><em>QualifiedName</em> ;
</td>
</tr>
</table>
</div>
</div>
<table class="nav">
<tr>
<td class="back"><a href="s9.html" rel="prev">&lt;&lt;&nbsp;&sect;9&nbsp;Value Dependent Classes</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="sB.html" rel="next">&sect;B&nbsp;Changes between versions&nbsp;&gt;&gt;</a></td>
</tr>
</table>
</div>
<div id="footer">
<hr /><a class="w3c img" href="http://jigsaw.w3.org/css-validator/check/referer"
shape="rect"><img src="../images/valid-css2-blue.png" alt="Valid CSS!" height="31" width="88" /></a><a class="w3c img" href="http://validator.w3.org/check?uri=referer" shape="rect"><img src="../images/valid-xhtml10-blue.png" alt="Valid XHTML 1.0 Strict" height="31"
width="88" /></a><address>&copy; Stephan Herrmann, Christine Hundt, Marco Mosconi</address>
OT/J version 1.3.1 &mdash; last modified: 2013-05-28
</div>
</body>
</html>