<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog @ SIB Visions &#187; JDT</title>
	<atom:link href="http://blog.sibvisions.com/tag/jdt/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sibvisions.com</link>
	<description>Blog @ SIB Visions</description>
	<lastBuildDate>Fri, 24 Apr 2026 07:44:44 +0000</lastBuildDate>
		<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Application Coder</title>
		<link>https://blog.sibvisions.com/2015/05/11/application-coder/</link>
		<comments>https://blog.sibvisions.com/2015/05/11/application-coder/#comments</comments>
		<pubDate>Mon, 11 May 2015 08:00:09 +0000</pubDate>
		<dc:creator>rjahn</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JDT]]></category>
		<category><![CDATA[jquery-ui]]></category>
		<category><![CDATA[JVx]]></category>
		<category><![CDATA[Vaadin]]></category>
		<category><![CDATA[vaadinUI]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=4352</guid>
		<description><![CDATA[This article is about our new Research project: Application Coder.
The application is a very simple Java Code Editor. It shows a tree with Java files and has a Code Editor for modifying files. The code editor is the popular Ace Editor and we use Eclipse JDT for java compilation. The application was written as standard [...]]]></description>
			<content:encoded><![CDATA[<p>This article is about our new Research project: <strong>Application Coder</strong>.</p>
<p>The application is a very simple Java Code Editor. It shows a tree with Java files and has a Code Editor for modifying files. The code editor is the popular <a href="http://ace.c9.io/">Ace Editor</a> and we use <a href="https://eclipse.org/jdt/">Eclipse JDT</a> for java compilation. The application was written as standard <a href="http://sourceforge.net/projects/jvx/">JVx application</a> with vaadin UI.</p>
<p>We made tests as single-page vaadin application, embedded with iframes and embedded with div areas. All versions work without problems but the last one is preferred. If you <a href="https://vaadin.com/book/vaadin7/-/page/advanced.embedding.html">embedd a vaadin application</a> with divs, it's a little bit tricky because you have to configure the client-side on your own, but you get full access to the whole html page. This wouldn't be possible if you use an iframe because you can't access the main html page.</p>
<p>Some cool features of our editor are: <em>error annotations</em> and <em>error markers</em>. And the best feature is our <strong>LIVE Preview</strong> of code changes!</p>
<p><div id="attachment_4361" class="wp-caption aligncenter nomargin" style="width: 310px"><a href="http://blog.sibvisions.com/wp-content/uploads/2015/05/codererror.png" rel="lightbox[4352]"><img src="http://blog.sibvisions.com/wp-content/uploads/2015/05/codererror-300x244.png" alt="Annotations and marker" title="Annotations and marker" width="300" height="244" class="size-medium wp-image-4361" /></a><p class="wp-caption-text">Annotations and marker</p></div><br />
Watch this video:</p>
<p><center><div class="wp-caption aligncenter nomargin" style="width: 570px"><iframe width="560" height="315" src="https://www.youtube.com/embed/tcz8cl0Y7ns" frameborder="0" allowfullscreen></iframe><p class="wp-caption-text">Application coder</p></div><br />
</center>The application coder is not only a Java code editor, it was designed especially for JVx applications, because it groups client code and business logic. The preview also starts a JVx application and LIVE preview reloads the application.</p>
<p>Our coder application has a push mechanism and reloads every preview window automatically and immediate after compilation.</p>
<p>Above video shows multiple instances of our coder application, embedded in divs and it's possible to drag around and resize the applications (thanks to <a href="https://jqueryui.com/resizable/">jquery-ui</a>).</p>
<p>The application is a perfect showcase of JVx because it's not a database application as many other JVx applications. We've used vaadin, jquery-ui and vaadin-addons to create a great UX. JVx is technology independent and open for other technologies.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2015/05/11/application-coder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Source Code modification with Eclipse AST</title>
		<link>https://blog.sibvisions.com/2012/12/03/source-code-modification-with-eclipse-ast/</link>
		<comments>https://blog.sibvisions.com/2012/12/03/source-code-modification-with-eclipse-ast/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 13:00:32 +0000</pubDate>
		<dc:creator>rjahn</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[AST]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDT]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=1840</guid>
		<description><![CDATA[We heavily use Eclipse AST and JDT. The problem with both APIs is that you don't find a lot of documentation or examples. The best documentation was and is the source code. It shows all secrets.
Last friday at Eclipse DemoCamp Vienna, I discussed with CodeCop about AST and JDT and the missing documentation  
I [...]]]></description>
			<content:encoded><![CDATA[<p>We heavily use Eclipse AST and JDT. The problem with both APIs is that you don't find a lot of documentation or examples. The best documentation was and is the source code. It shows all secrets.</p>
<p>Last friday at Eclipse DemoCamp Vienna, I discussed with <a href="http://blog.code-cop.org/">CodeCop</a> about AST and JDT and the missing documentation <img src='https://blog.sibvisions.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I wrote a simple class for class/superclass/package/javadoc manipulation some months ago. It is included in VisionX and is not free, but no matter. Here is the source code:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="coMULTI">/* <br />
(c) SIB Visions 2012 </p>
<p>http://www.sibvisions.com<br />
*/</span><br />
<span class="kw1">public</span> <span class="kw1">class</span> SimpleSourceFile <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><br />
&nbsp; &nbsp; <span class="co1">// Class members</span><br />
&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the source parser. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> ASTParser parser<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the parsed tokens of the source file. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> CompilationUnit cuSource<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the original document. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw3">Document</span> docOrig<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the class type info. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> TypeDeclaration tdClass<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the javadoc of the class. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> JavadocInfo jdoc<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the full qualified name of the class. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw3">String</span> sClassName<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the full qualified name of the super class after loading. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw3">String</span> sLoadedSuperClass<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** the full qualified name of the parent class. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw3">String</span> sSuperClass<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/** whether the source is changed. */</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">boolean</span> bChanged <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><br />
&nbsp; &nbsp; <span class="co1">// Initialization</span><br />
&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Creates a new instance of &lt;code&gt;SimpleSourceFile&lt;/code&gt; without source<br />
&nbsp; &nbsp; &nbsp;* information.<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> SimpleSourceFile<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Creates a new instance of &lt;code&gt;SimpleSourceFile&lt;/code&gt; with a given <br />
&nbsp; &nbsp; &nbsp;* source file.<br />
&nbsp; &nbsp; &nbsp;* &nbsp;<br />
&nbsp; &nbsp; &nbsp;* @param pFile the java source file<br />
&nbsp; &nbsp; &nbsp;* @throws IOException if an error occurs during reading the file<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> SimpleSourceFile<span class="br0">&#40;</span><span class="kw3">File</span> pFile<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">IOException</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>pFile.<span class="me1">exists</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JavaSource source <span class="sy0">=</span> JavaSource.<span class="me1">get</span><span class="br0">&#40;</span>pFile.<span class="me1">getAbsolutePath</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>source <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">synchronized</span><span class="br0">&#40;</span>source<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span><span class="kw1">new</span> <span class="kw3">String</span><span class="br0">&#40;</span>FileUtil.<span class="me1">getContent</span><span class="br0">&#40;</span>pFile<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span><span class="kw1">new</span> <span class="kw3">String</span><span class="br0">&#40;</span>FileUtil.<span class="me1">getContent</span><span class="br0">&#40;</span>pFile<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Creates a new instance of &lt;code&gt;SimpleSourceFile&lt;/code&gt; with a given <br />
&nbsp; &nbsp; &nbsp;* source stream. The stream is closed after reading<br />
&nbsp; &nbsp; &nbsp;* &nbsp;<br />
&nbsp; &nbsp; &nbsp;* @param pStream the java source stream<br />
&nbsp; &nbsp; &nbsp;* @throws IOException if an error occurs during reading the stream<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> SimpleSourceFile<span class="br0">&#40;</span><span class="kw3">InputStream</span> pStream<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">IOException</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span><span class="br0">&#40;</span>pStream, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Creates a new instance of &lt;code&gt;SimpleSourceFile&lt;/code&gt; with a given <br />
&nbsp; &nbsp; &nbsp;* source stream.<br />
&nbsp; &nbsp; &nbsp;* &nbsp;<br />
&nbsp; &nbsp; &nbsp;* @param pStream the java source stream<br />
&nbsp; &nbsp; &nbsp;* @param pAutoClose whether the stream should be closed after reading<br />
&nbsp; &nbsp; &nbsp;* @throws IOException if an error occurs during reading the stream<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> SimpleSourceFile<span class="br0">&#40;</span><span class="kw3">InputStream</span> pStream, <span class="kw4">boolean</span> pAutoClose<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">IOException</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span><span class="kw1">new</span> <span class="kw3">String</span><span class="br0">&#40;</span>FileUtil.<span class="me1">getContent</span><span class="br0">&#40;</span>pStream, pAutoClose<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span><br />
&nbsp; &nbsp; <span class="co1">// User-defined methods</span><br />
&nbsp; &nbsp; <span class="co1">//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Loads the properties from the source file.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pSource the java source<br />
&nbsp; &nbsp; &nbsp;*/</span>@SuppressWarnings<span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;unchecked&quot;</span>, <span class="st0">&quot;rawtypes&quot;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> load<span class="br0">&#40;</span><span class="kw3">String</span> pSource<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; jdoc <span class="sy0">=</span> <span class="kw1">new</span> JavadocInfo<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>parser <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parser <span class="sy0">=</span> ASTUtil.<span class="me1">createParser</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; parser.<span class="me1">setSource</span><span class="br0">&#40;</span>pSource.<span class="me1">toCharArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; cuSource <span class="sy0">=</span> <span class="br0">&#40;</span>CompilationUnit<span class="br0">&#41;</span> parser.<span class="me1">createAST</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>docOrig <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; docOrig.<span class="me1">set</span><span class="br0">&#40;</span>pSource<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; docOrig <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw3">Document</span><span class="br0">&#40;</span>pSource<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//we support only one class per file</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">List</span> types <span class="sy0">=</span> cuSource.<span class="me1">types</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>types.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 0 <span class="sy0">&amp;&amp;</span> types.<span class="me1">get</span><span class="br0">&#40;</span>0<span class="br0">&#41;</span> <span class="kw1">instanceof</span> TypeDeclaration<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tdClass <span class="sy0">=</span> <span class="br0">&#40;</span>TypeDeclaration<span class="br0">&#41;</span> types.<span class="me1">get</span><span class="br0">&#40;</span>0<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sPackage<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//we have to use the current package, if set</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cuSource.<span class="me1">getPackage</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sPackage <span class="sy0">=</span> cuSource.<span class="me1">getPackage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot;.&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sPackage <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sClassName <span class="sy0">=</span> sPackage <span class="sy0">+</span> tdClass.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>tdClass.<span class="me1">getSuperclassType</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sSuperName <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>SimpleType<span class="br0">&#41;</span><span class="br0">&#40;</span>tdClass.<span class="me1">getSuperclassType</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sSuperName.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="st0">'.'</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sSuperClass <span class="sy0">=</span> sSuperName<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//try to detect the full qualified name of the super class through the imports</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">List</span> <span class="sy0">&lt;</span> ImportDeclaration <span class="sy0">&gt;</span> liImports <span class="sy0">=</span> cuSource.<span class="me1">imports</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> bFound <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>liImports <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sTempName <span class="sy0">=</span> <span class="st0">&quot;.&quot;</span> <span class="sy0">+</span> sSuperName<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sImport<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> 0, anz <span class="sy0">=</span> liImports.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">!</span>bFound <span class="sy0">&amp;&amp;</span> i <span class="sy0">&lt;</span> anz<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sImport <span class="sy0">=</span> liImports.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sImport.<span class="me1">endsWith</span><span class="br0">&#40;</span>sTempName<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bFound <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sSuperClass <span class="sy0">=</span> liImports.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bFound<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//we use the current package</span><br />
<span class="co2"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sSuperClass</span> <span class="sy0">=</span> sPackage <span class="sy0">+</span> sSuperName<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//cache for optimizing imports in apply</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sLoadedSuperClass <span class="sy0">=</span> sSuperClass<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jdoc <span class="sy0">=</span> <span class="kw1">new</span> JavadocInfo<span class="br0">&#40;</span>tdClass.<span class="me1">getJavadoc</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, pSource<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tdClass <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//currently loaded file can not be changed!</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bChanged <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Sets the comment for the class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pText the comment<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setClassComment<span class="br0">&#40;</span><span class="kw3">String</span> pText<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bChanged <span class="sy0">|=</span> <span class="sy0">!</span>CommonUtil.<span class="me1">equals</span><span class="br0">&#40;</span>pText, jdoc.<span class="me1">getDescription</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; jdoc.<span class="me1">setDescription</span><span class="br0">&#40;</span>pText<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Gets the comment for the class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @return the comment<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw3">String</span> getClassComment<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> jdoc.<span class="me1">getDescription</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Sets the full qualified name of the class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pName the class name<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setClassName<span class="br0">&#40;</span><span class="kw3">String</span> pName<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>pName <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> <span class="kw3">IllegalArgumentException</span><span class="br0">&#40;</span><span class="st0">&quot;It is not allowed to remove the class definition (class name = null)!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; bChanged <span class="sy0">|=</span> <span class="sy0">!</span>CommonUtil.<span class="me1">equals</span><span class="br0">&#40;</span>pName, sClassName<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; sClassName <span class="sy0">=</span> pName<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Gets the full qualified name of the class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @return the class name<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw3">String</span> getClassName<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sClassName<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Sets the full qualified class name of the parent class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pSuperClass the full qualified class name of the parent class<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setSuperClass<span class="br0">&#40;</span><span class="kw3">String</span> pSuperClass<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bChanged <span class="sy0">|=</span> <span class="sy0">!</span>CommonUtil.<span class="me1">equals</span><span class="br0">&#40;</span>pSuperClass, sSuperClass<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; sSuperClass <span class="sy0">=</span> pSuperClass<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Gets the full qualified class name of the parent class.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @return the class name<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw3">String</span> getSuperClass<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> sSuperClass<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Replaces the relevant information with the specific values<br />
&nbsp; &nbsp; &nbsp;* and saves the source file.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @throws Exception if the source modification fails<br />
&nbsp; &nbsp; &nbsp;*/</span>@SuppressWarnings<span class="br0">&#40;</span><span class="st0">&quot;unchecked&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw4">void</span> apply<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bChanged<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; AST ast <span class="sy0">=</span> cuSource.<span class="me1">getAST</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; ASTRewrite arw <span class="sy0">=</span> ASTRewrite.<span class="me1">create</span><span class="br0">&#40;</span>ast<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Change Package, Classname and Constructor</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sCurrentPackage<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//set package</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> sClassInfo <span class="sy0">=</span> ClassUtil.<span class="me1">splitName</span><span class="br0">&#40;</span>sClassName<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>cuSource.<span class="me1">getPackage</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>cuSource.<span class="me1">getPackage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, PackageDeclaration.<span class="me1">NAME_PROPERTY</span>, ast.<span class="me1">newName</span><span class="br0">&#40;</span>sClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sCurrentPackage <span class="sy0">=</span> sClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PackageDeclaration pdcl <span class="sy0">=</span> ast.<span class="me1">newPackageDeclaration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pdcl.<span class="me1">setName</span><span class="br0">&#40;</span>ast.<span class="me1">newName</span><span class="br0">&#40;</span>sClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>cuSource, CompilationUnit.<span class="me1">PACKAGE_PROPERTY</span>, pdcl, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sCurrentPackage <span class="sy0">=</span> sClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>cuSource, CompilationUnit.<span class="me1">PACKAGE_PROPERTY</span>, <span class="kw2">null</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sCurrentPackage <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>tdClass <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//new class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tdClass <span class="sy0">=</span> ast.<span class="me1">newTypeDeclaration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tdClass.<span class="me1">setName</span><span class="br0">&#40;</span>ast.<span class="me1">newSimpleName</span><span class="br0">&#40;</span>sClassInfo<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ListRewrite lrwImp <span class="sy0">=</span> arw.<span class="me1">getListRewrite</span><span class="br0">&#40;</span>cuSource, CompilationUnit.<span class="me1">TYPES_PROPERTY</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lrwImp.<span class="me1">insertFirst</span><span class="br0">&#40;</span>tdClass, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//change class name</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SimpleName snClass <span class="sy0">=</span> ast.<span class="me1">newSimpleName</span><span class="br0">&#40;</span>sClassInfo<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>tdClass, TypeDeclaration.<span class="me1">NAME_PROPERTY</span>, snClass, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//chage constructors</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MethodDeclaration<span class="br0">&#91;</span><span class="br0">&#93;</span> methods <span class="sy0">=</span> tdClass.<span class="me1">getMethods</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>methods <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>MethodDeclaration method<span class="sy0">:</span> methods<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>method.<span class="me1">isConstructor</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>method, MethodDeclaration.<span class="me1">NAME_PROPERTY</span>, snClass, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//change Superclass</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">List</span> <span class="sy0">&lt;</span> ImportDeclaration <span class="sy0">&gt;</span> liImports <span class="sy0">=</span> cuSource.<span class="me1">imports</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//remove &quot;old&quot; import</span><br />
<span class="co2"> &nbsp; &nbsp; &nbsp; &nbsp;if</span> <span class="br0">&#40;</span>sLoadedSuperClass <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>liImports <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> bFound <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> liImports.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> <span class="sy0">!</span>bFound <span class="sy0">&amp;&amp;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sLoadedSuperClass.<span class="me1">equals</span><span class="br0">&#40;</span>liImports.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bFound <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">remove</span><span class="br0">&#40;</span>liImports.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; liImports.<span class="me1">remove</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sSuperClass <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>tdClass, TypeDeclaration.<span class="me1">SUPERCLASS_TYPE_PROPERTY</span>, <span class="kw2">null</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//check new super class import</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> sSuperClassInfo <span class="sy0">=</span> ClassUtil.<span class="me1">splitName</span><span class="br0">&#40;</span>sSuperClass<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sSuperClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">boolean</span> bFound <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>sCurrentPackage <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bFound <span class="sy0">=</span> sSuperClassInfo<span class="br0">&#91;</span>0<span class="br0">&#93;</span>.<span class="me1">equals</span><span class="br0">&#40;</span>sCurrentPackage<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bFound<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>liImports <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> 0, anz <span class="sy0">=</span> liImports.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy0">!</span>bFound <span class="sy0">&amp;&amp;</span> i <span class="sy0">&lt;</span> anz<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bFound <span class="sy0">=</span> sSuperClass.<span class="me1">equals</span><span class="br0">&#40;</span>liImports.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//class not already importet -&gt; add import</span><br />
<span class="co2"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bFound<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ImportDeclaration idSuper <span class="sy0">=</span> ast.<span class="me1">newImportDeclaration</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; idSuper.<span class="me1">setName</span><span class="br0">&#40;</span>ast.<span class="me1">newName</span><span class="br0">&#40;</span>sSuperClass<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ListRewrite lrwImp <span class="sy0">=</span> arw.<span class="me1">getListRewrite</span><span class="br0">&#40;</span>cuSource, CompilationUnit.<span class="me1">IMPORTS_PROPERTY</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lrwImp.<span class="me1">insertLast</span><span class="br0">&#40;</span>idSuper, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>tdClass, TypeDeclaration.<span class="me1">SUPERCLASS_TYPE_PROPERTY</span>, ast.<span class="me1">newSimpleType</span><span class="br0">&#40;</span>ast.<span class="me1">newName</span><span class="br0">&#40;</span>sSuperClassInfo<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Change Javadoc of the class</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="st0">&quot;&quot;</span>.<span class="me1">equals</span><span class="br0">&#40;</span>jdoc.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//no javadoc</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>tdClass, TypeDeclaration.<span class="me1">JAVADOC_PROPERTY</span>, <span class="kw2">null</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arw.<span class="me1">set</span><span class="br0">&#40;</span>tdClass, TypeDeclaration.<span class="me1">JAVADOC_PROPERTY</span>, jdoc.<span class="me1">createJavadoc</span><span class="br0">&#40;</span>tdClass.<span class="me1">getAST</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Modify AST</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; TextEdit edit <span class="sy0">=</span> arw.<span class="me1">rewriteAST</span><span class="br0">&#40;</span>docOrig, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; edit.<span class="me1">apply</span><span class="br0">&#40;</span>docOrig<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; ASTUtil.<span class="me1">applyFormat</span><span class="br0">&#40;</span>docOrig<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//simple reparse (important for the comments)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; parser.<span class="me1">setSource</span><span class="br0">&#40;</span>docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toCharArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; cuSource <span class="sy0">=</span> <span class="br0">&#40;</span>CompilationUnit<span class="br0">&#41;</span> parser.<span class="me1">createAST</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Modify comments</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Class comment after the last bracket</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> iCorr <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">List</span> <span class="sy0">&lt;</span> Comment <span class="sy0">&gt;</span> liComments <span class="sy0">=</span> cuSource.<span class="me1">getCommentList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>liComments <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sOldName <span class="sy0">=</span> tdClass.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getFullyQualifiedName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">String</span> sText<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Comment com<span class="sy0">:</span> liComments<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sText <span class="sy0">=</span> docOrig.<span class="me1">get</span><span class="br0">&#40;</span>com.<span class="me1">getStartPosition</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> iCorr, com.<span class="me1">getLength</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> iPos <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> iClassLen <span class="sy0">=</span> sClassInfo<span class="br0">&#91;</span>1<span class="br0">&#93;</span>.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> iLenDiff <span class="sy0">=</span> sOldName.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> iClassLen<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> iNextPos<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CharacterType ctypePrev<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CharacterType ctypeNext<span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>iPos <span class="sy0">=</span> sText.<span class="me1">indexOf</span><span class="br0">&#40;</span>sOldName, iPos<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">&gt;=</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>iPos <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ctypePrev <span class="sy0">=</span> StringUtil.<span class="me1">getCharacterType</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span> <span class="sy0">+</span> sText.<span class="me1">charAt</span><span class="br0">&#40;</span>iPos <span class="sy0">-</span> 1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ctypePrev <span class="sy0">=</span> CharacterType.<span class="me1">OnlySpecial</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iNextPos <span class="sy0">=</span> iPos <span class="sy0">+</span> sOldName.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>iNextPos <span class="sy0">&lt;=</span> sText.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ctypeNext <span class="sy0">=</span> StringUtil.<span class="me1">getCharacterType</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span> <span class="sy0">+</span> sText.<span class="me1">charAt</span><span class="br0">&#40;</span>iNextPos<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ctypeNext <span class="sy0">=</span> CharacterType.<span class="me1">OnlySpecial</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//don't replace word parts e.g. ContactsWorkScreen should not be replaced with Contacts</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>ctypePrev <span class="sy0">==</span> CharacterType.<span class="me1">OnlySpecial</span> <span class="sy0">||</span> ctypePrev <span class="sy0">==</span> CharacterType.<span class="me1">OnlyWhitespace</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span>ctypeNext <span class="sy0">==</span> CharacterType.<span class="me1">OnlySpecial</span> <span class="sy0">||</span> ctypeNext <span class="sy0">==</span> CharacterType.<span class="me1">OnlyWhitespace</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; docOrig.<span class="me1">replace</span><span class="br0">&#40;</span>com.<span class="me1">getStartPosition</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> iPos <span class="sy0">-</span> iCorr, sOldName.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, sClassInfo<span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iCorr <span class="sy0">+=</span> iLenDiff<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iPos <span class="sy0">+=</span> iClassLen<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iPos <span class="sy0">=</span> iNextPos<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Update</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//----------------------------------------------------</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; load<span class="br0">&#40;</span>docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; bChanged <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Stores the changed source into the given file.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pFile the target file for the source<br />
&nbsp; &nbsp; &nbsp;* @throws Exception if an error occurs during saving<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> saveAs<span class="br0">&#40;</span><span class="kw3">File</span> pFile<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; apply<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; JavaSource source <span class="sy0">=</span> JavaSource.<span class="me1">get</span><span class="br0">&#40;</span>pFile.<span class="me1">getAbsolutePath</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>source <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">synchronized</span><span class="br0">&#40;</span>source<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileUtil.<span class="me1">save</span><span class="br0">&#40;</span>pFile, docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; source.<span class="me1">reload</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileUtil.<span class="me1">save</span><span class="br0">&#40;</span>pFile, docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Stores the changed source into the given stream.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param pStream the target stream for the source<br />
&nbsp; &nbsp; &nbsp;* @throws Exception if an error occurs during saving<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> saveAs<span class="br0">&#40;</span><span class="kw3">OutputStream</span> pStream<span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; apply<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; pStream.<span class="me1">write</span><span class="br0">&#40;</span>docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pStream.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="co3">/**<br />
&nbsp; &nbsp; &nbsp;* Returns the modified source code.<br />
&nbsp; &nbsp; &nbsp;* &nbsp;<br />
&nbsp; &nbsp; &nbsp;* @return the modified source code<br />
&nbsp; &nbsp; &nbsp;* @throws Exception if the source modification fails<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">protected</span> <span class="kw3">String</span> getSource<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> <span class="kw3">Exception</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; apply<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> docOrig.<span class="me1">get</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span> <span class="co1">// SimpleSourceFile</span></div>
</div>
<p>Important imports:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.AST</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.ASTParser</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.Comment</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.CompilationUnit</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.ImportDeclaration</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.MethodDeclaration</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.PackageDeclaration</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.SimpleName</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.SimpleType</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.TypeDeclaration</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.rewrite.ASTRewrite</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jdt.core.dom.rewrite.ListRewrite</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.jface.text.Document</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.eclipse.text.edits.TextEdit</span><span class="sy0">;</span></div>
</div>
<p>The class contains references to other classes like CommonUtil, FileUtil, StringUtil. These classes are included in <a href="http://sourceforge.net/projects/jvx/">JVx</a>. There are two classes (JavaSource, ClassUtil) that are not free, but you should find out how it works without these classes.</p>
<p>If you'll set a new superclass, the superclass and its import, if available, will be updated. If you'll set a new classname, all constructors will be updated.</p>
<p>And once again: The best documentation is the source code <img src='https://blog.sibvisions.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2012/12/03/source-code-modification-with-eclipse-ast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
