blob: 33708e11c52e7509cdac6b723513c45abcd1e635 [file] [log] [blame]
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>CustomIntLiteral.java</title>
<link rel="stylesheet" type="text/css" href="/objectteams/css/otj.css" title="Default Style" media="screen" />
</head>
<body>
<div class="code">
<pre>
<!-- start of source code -->
<span class="import">package</span> <span class="identifier">embedding</span>.<span class="identifier">custom</span>.<span class="identifier">ast</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">core</span>.<span class="identifier">compiler</span>.<span class="identifier">CharOperation</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">ast</span>.<span class="identifier">IntLiteral</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">impl</span>.<span class="identifier">Constant</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">impl</span>.<span class="identifier">IntConstant</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">lookup</span>.<span class="identifier">BlockScope</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">lookup</span>.<span class="identifier">TypeBinding</span><span class="symbol">;</span>
<span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">parser</span>.<span class="identifier">TerminalTokens</span><span class="symbol">;</span>
<span class="doccomment">/**
* Compiler AST representation of our new syntax element.
*/</span>
@<span class="identifier">SuppressWarnings</span><span class="brace">(</span><span class="string">&quot;restriction&quot;</span><span class="brace">)</span>
<span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">CustomIntLiteral</span> <span class="keyword">extends</span> <span class="identifier">IntLiteral</span>
<span class="brace">{</span>
<span class="keyword">static</span> <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">numbers</span> <span class="symbol">=</span> <span class="keyword">new</span> <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">{</span>
<span class="brace">{</span>
<span class="string">&quot;english&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>
<span class="brace">}</span>,
<span class="brace">{</span>
<span class="string">&quot;zero&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>,
<span class="string">&quot;one&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>,
<span class="string">&quot;two&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>
<span class="brace">}</span>,
<span class="brace">{</span>
<span class="string">&quot;german&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>
<span class="brace">}</span>,
<span class="brace">{</span>
<span class="string">&quot;null&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>,
<span class="string">&quot;eins&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>,
<span class="string">&quot;zwei&quot;</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>
<span class="brace">}</span>
<span class="brace">}</span><span class="symbol">;</span>
<span class="comment">// example additional property of this node:</span>
<span class="keyword">public</span> <span class="identifier">String</span> <span class="identifier">language</span><span class="symbol">;</span>
<span class="keyword">public</span> <span class="keyword">int</span> <span class="identifier">innerSourceStart</span><span class="symbol">;</span>
<span class="keyword">public</span> <span class="keyword">int</span> <span class="identifier">innerSourceEnd</span><span class="symbol">;</span>
<span class="keyword">public</span> <span class="identifier">CustomIntLiteral</span><span class="brace">(</span><span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">token</span>, <span class="keyword">int</span> <span class="identifier">outerSourceStart</span>, <span class="keyword">int</span> <span class="identifier">outerSourceEnd</span>, <span class="keyword">int</span> <span class="identifier">innerSourceStart</span>, <span class="keyword">int</span> <span class="identifier">innerSourceEnd</span><span class="brace">)</span> <span class="brace">{</span>
<span class="keyword">super</span><span class="brace">(</span><span class="identifier">token</span>, <span class="identifier">outerSourceStart</span>, <span class="identifier">outerSourceEnd</span><span class="brace">)</span><span class="symbol">;</span>
<span class="keyword">this</span>.<span class="identifier">language</span> <span class="symbol">=</span> <span class="string">&quot;english&quot;</span><span class="symbol">;</span>
<span class="keyword">this</span>.<span class="identifier">innerSourceStart</span> <span class="symbol">=</span> <span class="identifier">innerSourceStart</span><span class="symbol">;</span>
<span class="keyword">this</span>.<span class="identifier">innerSourceEnd</span> <span class="symbol">=</span> <span class="identifier">innerSourceEnd</span><span class="symbol">;</span>
<span class="brace">}</span>
@<span class="identifier">Override</span>
<span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">computeConstant</span><span class="brace">(</span><span class="brace">)</span> <span class="brace">{</span>
<span class="comment">// this.value is pre-computed, just use that:</span>
<span class="keyword">this</span>.<span class="identifier">constant</span> <span class="symbol">=</span> <span class="identifier">IntConstant</span>.<span class="identifier">fromValue</span><span class="brace">(</span><span class="keyword">this</span>.<span class="identifier">value</span><span class="brace">)</span><span class="symbol">;</span>
<span class="brace">}</span>
@<span class="identifier">Override</span>
<span class="keyword">public</span> <span class="identifier">TypeBinding</span> <span class="identifier">resolveType</span><span class="brace">(</span><span class="identifier">BlockScope</span> <span class="identifier">scope</span><span class="brace">)</span> <span class="brace">{</span>
<span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">trimmed</span> <span class="symbol">=</span> <span class="identifier">CharOperation</span>.<span class="identifier">trim</span><span class="brace">(</span><span class="identifier">source</span><span class="brace">(</span><span class="brace">)</span><span class="brace">)</span><span class="symbol">;</span>
<span class="keyword">for</span> <span class="brace">(</span><span class="keyword">int</span> <span class="identifier">l</span><span class="symbol">=</span><span class="number">0</span><span class="symbol">;</span> <span class="identifier">l</span><span class="symbol">&lt;</span><span class="identifier">numbers</span>.<span class="identifier">length</span><span class="symbol">;</span> <span class="identifier">l</span><span class="symbol">+</span><span class="symbol">=</span><span class="number">2</span><span class="brace">)</span> <span class="brace">{</span>
<span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">langNumbers</span> <span class="symbol">=</span> <span class="identifier">numbers</span><span class="brace">[</span><span class="identifier">l</span><span class="symbol">+</span><span class="number">1</span><span class="brace">]</span><span class="symbol">;</span>
<span class="keyword">for</span> <span class="brace">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="symbol">=</span><span class="number">0</span><span class="symbol">;</span> <span class="identifier">i</span><span class="symbol">&lt;</span><span class="identifier">langNumbers</span>.<span class="identifier">length</span><span class="symbol">;</span> <span class="identifier">i</span><span class="symbol">+</span><span class="symbol">+</span><span class="brace">)</span> <span class="brace">{</span>
<span class="keyword">if</span> <span class="brace">(</span><span class="identifier">CharOperation</span>.<span class="identifier">equals</span><span class="brace">(</span><span class="identifier">langNumbers</span><span class="brace">[</span><span class="identifier">i</span><span class="brace">]</span>, <span class="identifier">trimmed</span><span class="brace">)</span><span class="brace">)</span> <span class="brace">{</span>
<span class="keyword">this</span>.<span class="identifier">value</span> <span class="symbol">=</span> <span class="identifier">i</span><span class="symbol">;</span>
<span class="keyword">this</span>.<span class="identifier">language</span> <span class="symbol">=</span> <span class="keyword">new</span> <span class="identifier">String</span><span class="brace">(</span><span class="identifier">numbers</span><span class="brace">[</span><span class="identifier">l</span><span class="brace">]</span><span class="brace">[</span><span class="number">0</span><span class="brace">]</span><span class="brace">)</span><span class="symbol">;</span>
<span class="keyword">return</span> <span class="keyword">super</span>.<span class="identifier">resolveType</span><span class="brace">(</span><span class="identifier">scope</span><span class="brace">)</span><span class="symbol">;</span>
<span class="brace">}</span>
<span class="brace">}</span>
<span class="brace">}</span>
<span class="keyword">this</span>.<span class="identifier">constant</span> <span class="symbol">=</span> <span class="identifier">Constant</span>.<span class="identifier">NotAConstant</span><span class="symbol">;</span>
<span class="identifier">scope</span>.<span class="identifier">problemReporter</span><span class="brace">(</span><span class="brace">)</span>.<span class="identifier">parseErrorReplaceToken</span><span class="brace">(</span><span class="keyword">this</span>.<span class="identifier">sourceStart</span>, <span class="keyword">this</span>.<span class="identifier">sourceEnd</span>, <span class="identifier">TerminalTokens</span>.<span class="identifier">TokenNamenull</span>, <span class="identifier">trimmed</span>, <span class="string">&quot;Unrecognized&quot;</span>, <span class="string">&quot;CustomIntLiteral&quot;</span><span class="brace">)</span><span class="symbol">;</span>
<span class="keyword">return</span> <span class="identifier">TypeBinding</span>.<span class="identifier">INT</span><span class="symbol">;</span>
<span class="brace">}</span>
<span class="brace">}</span>
<!-- end of source code -->
</pre>
</div>
</body>
</html>