diff --git a/org.eclipse.photran-dev-docs/.cdtproject b/org.eclipse.photran-dev-docs/.cdtproject
deleted file mode 100644
index 1b2ea83..0000000
--- a/org.eclipse.photran-dev-docs/.cdtproject
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse-cdt version="2.0"?>
-
-<cdtproject/>
diff --git a/org.eclipse.photran-dev-docs/.cproject b/org.eclipse.photran-dev-docs/.cproject
deleted file mode 100644
index 5ed875c..0000000
--- a/org.eclipse.photran-dev-docs/.cproject
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?fileVersion 4.0.0?>
-
-<cproject>
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="converted.config.1692608738">
-<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.1692608738" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
-<externalSettings/>
-<extensions/>
-</storageModule>
-</cconfiguration>
-</storageModule>
-</cproject>
diff --git "a/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder \0501\051.launch" "b/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder \0501\051.launch"
deleted file mode 100644
index 82be9fa..0000000
--- "a/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder \0501\051.launch"
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
-<mapAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_DISABLED_BUILDER" value="net.sourceforge.texlipse.builder.TexlipseBuilder"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder.launch b/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder.launch
deleted file mode 100644
index 82be9fa..0000000
--- a/org.eclipse.photran-dev-docs/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder.launch
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
-<mapAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS"/>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_DISABLED_BUILDER" value="net.sourceforge.texlipse.builder.TexlipseBuilder"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/org.eclipse.photran-dev-docs/.externalToolBuilders/org.eclipse.cdt.make.core.makeBuilder.launch b/org.eclipse.photran-dev-docs/.externalToolBuilders/org.eclipse.cdt.make.core.makeBuilder.launch
deleted file mode 100644
index 76c5283..0000000
--- a/org.eclipse.photran-dev-docs/.externalToolBuilders/org.eclipse.cdt.make.core.makeBuilder.launch
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
-<mapAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS">
-<mapEntry key="org.eclipse.cdt.make.core.build.arguments" value=""/>
-<mapEntry key="org.eclipse.cdt.core.errorOutputParser" value="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;"/>
-<mapEntry key="org.eclipse.cdt.make.core.enableAutoBuild" value="false"/>
-<mapEntry key="org.eclipse.cdt.make.core.environment" value=""/>
-<mapEntry key="org.eclipse.cdt.make.core.enableFullBuild" value="true"/>
-<mapEntry key="org.eclipse.cdt.make.core.build.target.inc" value="all"/>
-<mapEntry key="org.eclipse.cdt.make.core.enabledIncrementalBuild" value="true"/>
-<mapEntry key="org.eclipse.cdt.make.core.build.target.clean" value="clean"/>
-<mapEntry key="org.eclipse.cdt.make.core.build.command" value="make"/>
-<mapEntry key="org.eclipse.cdt.make.core.enableCleanBuild" value="true"/>
-<mapEntry key="org.eclipse.cdt.make.core.append_environment" value="true"/>
-<mapEntry key="org.eclipse.cdt.make.core.build.target.full" value="clean all"/>
-<mapEntry key="org.eclipse.cdt.make.core.useDefaultBuildCmd" value="true"/>
-<mapEntry key="org.eclipse.cdt.make.core.build.target.auto" value="all"/>
-<mapEntry key="org.eclipse.cdt.make.core.stopOnError" value="false"/>
-</mapAttribute>
-<stringAttribute key="org.eclipse.ui.externaltools.ATTR_DISABLED_BUILDER" value="org.eclipse.cdt.make.core.makeBuilder"/>
-<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
-</launchConfiguration>
diff --git a/org.eclipse.photran-dev-docs/.project b/org.eclipse.photran-dev-docs/.project
deleted file mode 100644
index 163ef2c..0000000
--- a/org.eclipse.photran-dev-docs/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.photran-dev-docs</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<triggers>full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value>&lt;project&gt;/.externalToolBuilders/net.sourceforge.texlipse.builder.TexlipseBuilder (1).launch</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>net.sourceforge.texlipse.builder.TexlipseNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.photran-dev-docs/.settings/org.eclipse.cdt.core.prefs b/org.eclipse.photran-dev-docs/.settings/org.eclipse.cdt.core.prefs
deleted file mode 100644
index 3016190..0000000
--- a/org.eclipse.photran-dev-docs/.settings/org.eclipse.cdt.core.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Thu Jul 13 14:30:36 CDT 2006
-eclipse.preferences.version=1
-indexerId=org.eclipse.cdt.core.nullindexer
diff --git a/org.eclipse.photran-dev-docs/README.txt b/org.eclipse.photran-dev-docs/README.txt
deleted file mode 100644
index 03f5589..0000000
--- a/org.eclipse.photran-dev-docs/README.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-The documentation is built using Ant.
-Right-click build.xml and click on Run As > Ant Build.
-
-Contents:
-
-dev-guide
-	Contains the Photran Developer's Guide.  The CVS
-	instructions in Appendix A are also made into a
-	separate PDF.
-	
-	If you edit this, make sure your name is added
-	to authors.tex!
-	
-	Run Ant on build.xml to build the documentation
-	using pdflateex.
-
-misc-notes
-	Various notes-to-self that aren't import enough to
-	be in the developer's guide.
-
---Jeff Overbey 8/19/05, updated 8/29/08
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/about.html b/org.eclipse.photran-dev-docs/about.html
deleted file mode 100644
index 9c7ba0a..0000000
--- a/org.eclipse.photran-dev-docs/about.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head>
-
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>May 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, "Program" will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
-
-</body></html>
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/debugger/notes-from-feanil-200705.txt b/org.eclipse.photran-dev-docs/debugger/notes-from-feanil-200705.txt
deleted file mode 100644
index 8abf0cc..0000000
--- a/org.eclipse.photran-dev-docs/debugger/notes-from-feanil-200705.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-* All modifications have "SP06" in a comment
-* Clicking on Run As/Debug As > Local Fortran Application sometimes does not work.
-  Workaround: Use the "Run.../Debug..." dialog.
-* Remember there are TWO "Set Breakpoint" commands now (right-click
-  the editor's ruler to see them): one for C/C++ and one for Fortran
diff --git a/org.eclipse.photran-dev-docs/debugger/senior-project-final-report-200705.pdf b/org.eclipse.photran-dev-docs/debugger/senior-project-final-report-200705.pdf
deleted file mode 100644
index 6ef8205..0000000
--- a/org.eclipse.photran-dev-docs/debugger/senior-project-final-report-200705.pdf
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/.cvsignore b/org.eclipse.photran-dev-docs/dev-guide/.cvsignore
deleted file mode 100644
index c4e2276..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.fdb_latexmk
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-cvs.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-cvs.ltx-inc
deleted file mode 100644
index 3d7359e..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-cvs.ltx-inc
+++ /dev/null
@@ -1,89 +0,0 @@
-% Getting the Photran Sources from CVS
-
-\emph{BEFORE YOU BEGIN: Make sure you are running \textbf{Eclipse 3.4} (Ganymede)
-and a \textbf{Java 5} or later JVM. We recommend the 
-\href{http://www.eclipse.org/downloads/packages/eclipse-rcpplug-developers/ganymeder}{Eclipse for RCP/Plug-in Developers Package}.}
-
-\newcounter{running_counter}
-\textbf{Part~I.  Check out the CDT 5.0 sources from CVS}
-
-\begin{enumerate}
-	\item  In Eclipse, switch to the CVS Repository Exploring perspective.
-	\item  Right-click the CVS Repositories view; choose New, Repository Location
-	\item  In the dialog box, enter the following information, then click Finish. \\
-	\begin{tabular}{ll}
-	        Host name:       & dev.eclipse.org \\
-	        Repository path: & /cvsroot/tools \\
-	        Username:        & anonymous \\
-	        Password:        & (no password) \\
-	        Connection type: & pserver \\
-	\end{tabular}
-	\item  In the CVS Repositories view
-	       \begin{itemize}
-	       \item  Expand ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools''
-	       \item  Then expand ``HEAD''
-	       \end{itemize}
-	\item  Right-click on ``org.eclipse.cdt''
-	\item  Select ``Configure Branches and Versions\ldots''
-	\item  Under ``Browse files for tags'', expand ``all'', then expand 	
-	       ``org.eclipse.cdt'', then click on the .project file
-	\item  Under ``New tags found in the selected files'', click on the Deselect 
-	       All button, then check cdt\_5\_0 in the list above it
-  \item	 Click Add Checked Tags
-	\item	 Click OK
-	\item  Now, in the CVS Repositories view
-				 \begin{itemize}
-				 \item  Expand ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools''
-		     \item  Then expand ``Branches''
-				 \item  Then expand ``cdt\_5\_0''
-		     \item  Then expand ``org.eclipse.cdt cdt\_5\_0\_0''
-		     \item  Then expand ``all''
-			  \end{itemize}
-	\item  Click on the first entry under ``all''
-	       (it should be org.eclipse.cdt), then shift-click on the last entry
-	       under ``all'' (it should be org.eclipse.cdt.ui.tests).
-	       All of the intervening plug-ins should now be selected.
-	       Right-click on any of the selected plug-ins, and select
-	       Check Out from the pop-up menu.
-	       (Check out will take several minutes.)
-	\item  You now have the CDT source code.  Make sure it compiles successfully
-	       (lots of warnings, but no errors).
-	\setcounter{running_counter}{\value{enumi}}
-\end{enumerate}
-
-\vspace{1em}
-\textbf{Part~II.  Check out the Photran sources from CVS}
-\begin{enumerate}
-	\setcounter{enumi}{\value{running_counter}}
-	\item Under ``:pserver:anonymous@dev.eclipse.org:/cvsroot/tools,''
-	    expand HEAD, then expand
-	    org.eclipse.ptp, then expand
-	    photran
-	\item  Click on the first entry under ``photran''
-	       (it should be org.eclipse.photran-dev-docs), then shift-click on the last entry
-	       under ``photran'' (it should be org.eclipse.photran.xlf-feature).
-	       All of the intervening plug-ins should now be selected.
-	       Right-click on any of the selected plug-ins, and select
-	       Check Out from the pop-up menu.
-	       (Check out will take several minutes.)
-	\setcounter{running_counter}{\value{enumi}}
-\end{enumerate}
-The sources should all compile (albeit with lots of warnings).
-
-\vspace{1em}
-\noindent\textbf{Part~III.  Running the test cases}
-
-\begin{enumerate}
-	\setcounter{enumi}{\value{running_counter}}
-	\item In Package Explorer view, select the \texttt{org.eclipse.photran.core.vpg.tests} project.
-	\item Right-click on that project and select Run As $>$ Run Configurations\ldots. A dialog will appear.
-	\item In that dialog, create a new \textbf{JUnit Plug-in Test} launch configuration. Call it ``Photran-Tests''.
-	\item For the configuration that you have just created, switch to the ``Environment'' tab and create a new variable called ``TESTING'' with a value of 1.
-	\item Select ``Run'' to run the tests. To run the tests again, just launch the ``Photran-Tests'' configuration from the Eclipse Run menu.
-
-	\vspace{.5em}
-	\noindent\textit{\textbf{Note.} Some JUnit tests for the parser and      
-	refactoring engine require closed-source code that is not available in CVS. 
-	A warning will appear in the JUnit runner if this code is not available.}
-	\setcounter{running_counter}{\value{enumi}}
-\end{enumerate}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-deploy.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-deploy.ltx-inc
deleted file mode 100644
index c9da897..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-deploy.ltx-inc
+++ /dev/null
@@ -1,68 +0,0 @@
-% Release and Deployment Procedure
-
-\textit{Most contributors/committers do not need to read this.  This explains
-our entire release and deployment procedure: setting the Photran version
-number, building the feature, uploading it to the download site, etc.}
-
-\begin{enumerate}
-
-\item Note that, as a policy, Photran's update site URL changes when the
-version of the Platform or CDT that it requires changes.
-
-\item If the VPG database structure (or any of the serialized classes) have
-changed, update the VPG database filename in the PhotranVPGDB class
-constructor.  For example, in Photran 4.0 beta 5, the filename was
-``photran40b5vpg''
-
-\item There are three features: org.eclipse.photran-feature,
-org.eclipse.photran.intel-feature, and org.eclipse.photran.xlf-feature.
-(Ignore the vpg-feature; it is included in the photran-feature.)  For each of
-these three features:
-  \begin{enumerate}
-  \item The feature.xml should open in the Feature Manifest Editor.  In the
-        Overview tab, first update the version number.
-  \item Then click Synchronize, and ``force feature version into plug-in and
-        fragment manifests.''
-  \item Change the update site URL.
-  \item In the Information tab, change the copyright year.
-  \item For the intel-feature and xlf-feature, in the Dependencies tab, change
-        the ``version to match'' to the new photran-feature version number
-  \end{enumerate}
-
-\item In an update site project (create one if necessary), open the site.xml
-file (it should open in the Site Manifest Editor).  Add the three features, and
-Build each of them.  Note that, as long as the
-required versions of the Platform and CDT are the same, \textit{there can be multiple
-version of Photran features in the update site.}  For example, this allowed
-users running 4.0 beta 4 to automatically upgrade to 4.0 beta 5 simply by
-clicking the ``Update'' button in Help > Software Updates > Installed Software.
-
-\item \textit{Delete} the artifacts.xml and content.xml files.  In Eclipse
-3.4, these only seem to confuse/break the update manager.
-
-\item Switch to the ``site.xml'' tab in the Site Manifest Editor, and update
-  \begin{enumerate}
-  \item the ``site mirrorsURL'' to reflect the new update site URL, and
-  \item the ``description url'' to reflect the new update site URL, and
-  \end{enumerate}
-
-\item Assuming your committer username is joverbey and the update site project
-is called eclipse9.9cdt9.9,
-\begin{verbatim}
-cd /wherever/the/update/site/project/is
-rsync -av -e ssh joverbey@dev.eclipse.org:/home/data/users/joverbey/downloads/technology/photran/updates/
-\end{verbatim}
-\textit{Don't forget the trailing slash!}
-
-\item Update the timeline in the next appendix
-(org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc)
-
-\item Tag the org.eclipse.photran module in CVS with something like
-v20090225\_4\_0\_5\_Beta5 where the date and version have been substituted
-appropriately
-
-\item Wait 24 hours for the update site to replicate to the mirrors
-
-\item E-mail photran, photran-announce, and photran-dev
-
-\end{enumerate}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-error-parsers.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-error-parsers.ltx-inc
deleted file mode 100644
index aa9c0a9..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-error-parsers.ltx-inc
+++ /dev/null
@@ -1,56 +0,0 @@
-% Creating an Error Parser
-
-Error parsers scan the output of \texttt{make} for error messages for a
-particular compiler. When they see an error message they can recognize, they
-extract the filename, line number, and error message, and use it to populate the
-Problems view.
-
-For an example, see \texttt{IntelFortranErrorParser}.
-(It's a mere 60 lines.)
-
-To create a new error parser, do the following. 
-
-\begin{itemize} 
-	
-\item We will assume that your error parser class will be in the
-\texttt{errorparsers} folder in the \texttt{org.eclipse.photran.core} plug-in 
-and added to the \\\texttt{org.eclipse.photran.internal.errorparsers} package.
-
-\item Define a class implementing \texttt{IErrorParser}
-
-\item Implement \texttt{public boolean processLine(String line,
-ErrorParserManager eoParser)} which should always return false because
-ErrorParserManager appears not to use the result in a rational way
-
-\item In org.eclipse.photran.core's \texttt{plugin.xml}, find the place where we
-define all of the Fortran error parsers. Basically, copy an existing one. Your
-addition will look something like this:
-
-\pagebreak
-
-\begin{lstlisting}[frame=lines, language=xml]
-<extension
-      id="IntelFortranErrorParser"
-      name="Photran Error Parser for Some New Fortran Compiler"
-      point="org.eclipse.cdt.core.ErrorParser">
-   <errorparser
-         class="org.eclipse.photran.internal.errorparsers.MyErrorParser">
-   </errorparser>
-</extension>
-\end{lstlisting}
-
-\item Your new error parser will appear in the error parser list in the
-Preferences automatically, and it will be automatically added to new projects.
-For existing projects, you will need to open the project properties dialog and
-add the new error parser to the project manually.
-
-\end{itemize}
-
-\textbf{Note.} Error parsers do not have to be implemented in the Photran Core
-plug-in. In fact, they do not have to be implemented as part of Photran at all.
-If you create a brand new plug-in, you can specify \texttt{org.eclipse.cdt.core}
-as a dependency, include the above XML snippet in your plug-in's
-\texttt{plugin.xml}, and include your custom error parser class in that plug-in.
-The plug-in system for Eclipse will recognize your plug-in, detect that it
-extends the \texttt{org.eclipse.cdt.core.ErrorParser} extension point, and add
-it to the list of implemented error parsers automatically.
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc
deleted file mode 100644
index 69d0173..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc
+++ /dev/null
@@ -1,22 +0,0 @@
-% Photran Release History
-
-{\footnotesize
-\begin{tabular}{clccl}
-Photran & Date & Platform & CDT & Notes \\
-\hline
-1.2   & Jan 2005 & 2.1     & 1.2   & First public version; hacked CDT clone \\
-2.1   & Feb 2005 & 3.0     & 2.1   & First version available at eclipse.org \\
-3.0b1 & Aug 2005 &         &       & \\
-3.0b2 & Nov 2005 &         &       & \\
-3.0   & Jan 2006 & 3.1     & 3.0   & CDT extension; required modified CDT \\
-3.1b1 & Jul 2006 &         &       & \\ 
-3.1b2 & Apr 2007 & 3.1     & 3.1.1 & Extension of stock CDT \\
-4.0b1 & Jun 2007 & 3.2.2   & 3.1.2 & \textit{Rename, intro implicit none}\\
-4.0b2 & Oct 2007 & 3.3.1   & 4.0.1 & \\
-4.0b3 & Nov 2007 & 3.3.1.1 & 4.0.1 & \\
-4.0b4 &          & 3.4     & 5.0   & First version release via an update site \\
-4.0b5 & Feb 2009 & 3.4     & 5.0.1 & \textit{Move saved vars to common} \\
-      & Mar 2009 & 3.4     & 5.0.1 & First automated integration build under PTP \\
-%Vers & Mon Year & Platfrm & CDT   & \\
-\end{tabular}
-}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-obfuscate-fortran.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-obfuscate-fortran.ltx-inc
deleted file mode 100644
index 0b712e8..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-obfuscate-fortran.ltx-inc
+++ /dev/null
@@ -1,179 +0,0 @@
-\section{Introduction}
-
-Contributing a new refactoring to Photran is best done by following a working
-example.
-
-This paragraph describes the general approach: First, an action must be added to
-both the editor popup menu \textbf{and} the Refactor menu in the menu bar by
-modifying the plugin.xml file. Then, the action delegate and its accompanying
-refactoring wizard have to be coded; these two classes are responsible for
-populating the user interface of the refactoring wizard dialog. Finally, the
-actual Fortran refactoring itself has to be coded.
-
-The remaining sections go into the details of each of those steps based on a
-simple (but not useful) refactoring example: obfuscating Fortran by removing the
-comments and adding redundant comments to the header. The source code is
-available from
-\url{http://subversion.cs.uiuc.edu/pub/svn/FruitFly/edu.uiuc.nchen.obfuscator/trunk/}
-
-\section{Modifying the plugin.xml}
-
-There are \textbf{four} extensions points (from the Eclipse core) that our plug-in needs to extend:
-
-\begin{description}
-
- \item [\texttt{org.eclipse.ui.commands}] Creates a new command \emph{category}
-to represent our refactoring. This category will be referenced by the other
-extensions in the plugin.xml file.
-
- \item [\texttt{org.eclipse.ui.actionSets}] This extension point is used to add
-menus and menu items to the Fortran perspective.
-
- \item [\texttt{org.eclipse.ui.actionSetPartAssociations}] Allows our
-refactoring to be visible/enabled in the context of the Fortran editor.
-
- \item [\texttt{org.eclipse.ui.popupMenus}] Displays our refactoring in the
-pop-up menu that appears during a right-click.
-
- \item [\texttt{org.eclipse.ui.bindings}] (Optional) Allows our refactoring to
-be invoked via keyboard shortcuts. For instance the Fortran Rename Refactoring
-is bound to the Alt + Shift + R keyboard shortcut, which is the same as the one
-for the Java Rename Refactoring.
-
-\end{description}
-
-Please refer to the documentation and schema description for each extension point; the documentation is available from Help $>$ Help Contents in Eclipse.
-
-Fortran currently does \textbf{not} use the newer \texttt{org.eclipse.ui.menus}
-extension points (introduced in Eclipse 3.3) for adding menus, menu items and
-pop-up menus.
-
-It is possible to use the newer \texttt{org.eclipse.ui.menus} extension point if
-desired, but this chapter uses the older extension points to remain consistent
-with how Photran is doing it.
-
-For more information, see the plugin.xml file of our refactoring example.
-
-\section{Creating an Action Delegate and a Refactoring Wizard}
-
-The \texttt{org.eclipse.ui.actionSets} and \texttt{org.eclipse.ui.popupMenus}
-extension points that were extended in our plugin.xml file require a reference
-to action delegate class that we need to provide.
-
-For a Fortran refactoring, our action delegate should extend the
-\\\texttt{AbstractFortranRefactoringActionDelegate} class \textbf{and} implement
-the \\\texttt{IWorkbenchWindowActionDelegate} and \texttt{IEditorActionDelegate}
-interfaces.
-
-The most important method in our action delegate class is the
-\textbf{constructor}. The constructor has to be done in a particular way so that
-everything is setup correctly. Listing~\ref{lst:obfuscateaction} shows how the constructor needs to be setup.
-
-\begin{code}
-\begin{lstlisting}
-public class ObfuscateAction extends AbstractFortranRefactoringActionDelegate
-	implements IWorkbenchWindowActionDelegate, IEditorActionDelegate {
-
-    public ObfuscateAction() {
-			super(ObfuscateRefactoring.class, ObfuscateRefactoringWizard.class);
-    }
-		
-		...
-}
-\end{lstlisting}
-\caption{\texttt{ObfuscateAction} for our simple refactoring example}
-\label{lst:obfuscateaction}
-\end{code}
-
-Inside our constructor, we need to call the parent constructor that takes
-\textbf{two} parameters: the class of the actual refactoring object (e.g.
-ObfuscateRefactoring) and the class of the actual refactoring wizard (e.g.
-ObfuscateRefactoringWizard). The parent class will dynamically create the
-refactoring object and refactoring wizard using Java reflection.
-
-Our refactoring wizard needs to be a subclass of
-\texttt{AbstractFortranRefactoringWizard}. The only method that we are required
-to implement is the \texttt{doAddUserInputPages} method. This page is
-responsible for creating a page for the wizard. For instance, a refactoring such
-as rename refactoring requires the user to provide a new name. So the
-\texttt{doAddUserInputPages} is responsible for creating the interface for that.
-
-Ideally, if our refactoring does not require the user to provide any input, it
-should just have an empty \texttt{doAddUserInputPages} method. However, because
-of a bug in the Mac OS X version of Eclipse, it is necessary to add a
-\emph{dummy} page. Without this dummy page the refactoring will cause the entire
-Eclipse UI to lock up on Mac OS X. Listing~\ref{lst:dummy_wizard_page} shows how
-to add a dummy input page. \\
-
-\begin{code}
-\begin{lstlisting}
-protected void doAddUserInputPages() {
-    addPage(new UserInputWizardPage(refactoring.getName()) {
-
-	public void createControl(Composite parent) {
-	    Composite top = new Composite(parent, SWT.NONE);
-	    initializeDialogUnits(top);
-	    setControl(top);
-
-	    top.setLayout(new GridLayout(1, false));
-
-	    Label lbl = new Label(top, SWT.NONE);
-	    lbl.setText("Click OK to obfuscate the current Fortran file. 
-			To see what changes will be made, click Preview.");
-
-	}
-    });
-}
-\end{lstlisting}
-\caption{Adding a \texttt{dummy} wizard input page}
-\label{lst:dummy_wizard_page}
-\end{code}
-
-\section{Creating the Actual Refactoring}
-
-Section~\ref{sec:structure_of_a_fortran_refactoring} gives a good overview of
-the \textbf{four} methods that a Fortran refactoring needs to implement. And
-Section~\ref{sec:refactoring_caveats} gives an overview of things to avoid while
-performing a refactoring. Our example refactoring conforms to the lessons in
-both those sections.
-
-Here we briefly describe the four methods in our example:
-
-\begin{description}
-
- \item [getName] This just returns the text ``Obfuscate Fortran Code''
-describing our refactoring. This text will be used as the title of the
-refactoring wizard dialog.
-
- \item [doCheckInitialConditions] Our simple refactoring does not have any
-\emph{real} initial conditions. Our refactoring can proceed as long as the
-current file can be parsed as valid Fortran source code. This is automatically
-checked by the \texttt{FortranRefactoring} parent class.
-
- Instead we use this method as a hook to perform some simple program analysis --
-acquiring the names of all the functions and subroutines in the current file. We
-will print these names later as part of the header comment. 
-
-	\item [doCheckFinalConditions] Since we do not require the user to provide any
-additional input, there are no final conditions to check.
-
-	\item [doCreateChange] The actual refactoring changes are constructed in this
-method. 
-
-We iterate through every token in the current file to check if it has a comment
-string. Comment strings are acquired by calling \texttt{Token\#getWhiteBefore()}
-and \texttt{Token\#getWhiteAfter()}. Following the advice of
-Section~\ref{sec:refactoring_caveats}, we store a list of all the tokens (call
-this list TokensWithComments) that contain comment strings. Once we have
-iterated through all the tokens, we proceed to remove the comments for tokens in
-our TokensWithComments list. Removing comments is done by calling
-\texttt{Token\#setWhiteBefore()} and \texttt{Token\#setWhiteAfter()} with blank
-strings as parameters.
-
-Finally, we create a header comment that just lists all the functions and
-subroutines in the current source file and add that to the preamble of the main
-program.
-
-\end{description}
-
-For more information, please consult the source code for our example.
diff --git a/org.eclipse.photran-dev-docs/dev-guide/app-rename-tests.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-rename-tests.ltx-inc
deleted file mode 100644
index 3581254..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-rename-tests.ltx-inc
+++ /dev/null
@@ -1,122 +0,0 @@
-% Creating a Rename Refactoring Test Case
-
-JUnit tests for the Rename refactoring are located in the
-\texttt{org.eclipse.photran.refactoring.tests} plug-in project. A Rename test
-has two components:
-
-\begin{enumerate}
-
-\item one or more Fortran files, which contain the code to be refactored, and
-
-\item a JUnit test suite class, which creates tests attempting to rename the
-identifiers in that file.
-
-\end{enumerate}
-
-The Fortran files are stored as .f90 files in the \emph{rename-test-code}
-folder. The JUnit tests are similarly-named Java classes in the
-\texttt{org.eclipse.photran.refactoring.tests.rename} package.
-
-A sample JUnit test suite is the following. The more complex tests follow a
-similar structure. Here, the \texttt{vars} array records all of the identifiers
-and the line/column positions on which they occur. The test suite constructor
-attempts to rename each identifier to \texttt{z} and also to
-\texttt{a\_really\_really\_long\_name}.
-
-\shabox{Because our strategy for testing requires the \emph{exact} line and
-column position, using tabs instead of spaces for indenting could interfere with
-the positioning. Therefore, for testing purposes, test cases (the Fortran test
-files) should be indented with \textbf{spaces only}. However, when an actual
-Fortran programmer invokes a refactoring through the Eclipse UI, the indentation
-with tabs or spaces is not a problem because the Eclipse editor is smart enough
-to provide the correct position (based on expanding tabs into spaces
-internally). } \\
-
-\begin{lstlisting}[frame=lines]
-public class Rename2 extends RenameTestSuite
-{
-	/////////////////////////////////////////////////////////////////////////
-	//
-	// RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME2.F90, AND
-	// GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
-	//
-	/////////////////////////////////////////////////////////////////////////
-
-	private String filename = "rename2.f90";
-
-	private Ident[] vars = new Ident[]
-	{
-	    var(filename, "Main", new LineCol[] { lc(2,9), lc(27,13) }),
-	    var(filename, "one", new LineCol[] { lc(4,16), lc(12,14), 
-		                                       lc(16,11), lc(20,11) }),
-	    var(filename, "two", new LineCol[] { lc(5,27), lc(10,13),
-		                                       lc(13,14), lc(17,14) }),
-	    var(filename, "three", new LineCol[] { lc(6,16), lc(14,9), 
-		                                         lc(18,9) }),
-	    var(filename, "four", new LineCol[] { lc(10,21), lc(15,14),
-		                                        lc(19,14) })
-	};
-
-	/////////////////////////////////////////////////////////////////////////
-	//
-	// TEST CASES
-	//
-	/////////////////////////////////////////////////////////////////////////
-
-	public static Test suite() throws Exception
-	{
-	    return new Rename2();
-	}
-
-	public Rename2() throws Exception
-	{
-	    startTests("Renaming program with comments and line continuations");
-	    for (String name : new String[] { "z", "a_really_really_long_name" })
-	        for (Ident var : vars)
-	            addSuccessTests(var, name);
-	    endTests();
-	}
-}
-\end{lstlisting}
-
-The \texttt{addSuccessTests} method adds several test cases to the suite: it
-simulates the user clicking on each occurrence of the identifier and asking to
-rename that instance. (Of course, no matter which occurrence is clicked on, all
-instances should be renamed\ldots but this has occasionally not happened.)
-
-If the rename should not have succeeded--that is, a precondition would not be
-met--\texttt{addPreconditionTests} should have been called rather than
-\texttt{addSuccessTests}. A good testing strategy ensures that a program behaves
-correctly: it should do \textbf{only} what it is supposed to do and nothing
-more. In our case, it should rename only the identifiers that are affected and
-ensure that the other identifiers are left untouched.
-
-\texttt{Rename3} is a slightly more complicated example, which renames
-identifiers spanning multiple files. In this case, a large boolean matrix is
-used to record which identifiers should be renamable to which other identifiers:
-
-\begin{code}
-\begin{lstlisting}
-private boolean[][] expectSuccess = new boolean[][]
-{
-    
-/* vvv can be renamed to >>>    myProgram, aRenamed3, bRenamed3, contained, 
-/* myProgram */ new boolean[] { false,     true,      true,      true,  ...      
-/* aRenamed3 */ new boolean[] { true,      false,     false,     false, ...    
-/* bRenamed3 */ new boolean[] { true,      false,     false,     false, ...    
-/* contained */ new boolean[] { true,      false,     false,     false, ...    
-/* external  */ new boolean[] { false,     false,     false,     false, ...    
-/* moduleA   */ new boolean[] { false,     false,     false,     false, ...    
-/* aSub1of3  */ new boolean[] { true,      false,     false,     false, ...    
-/* aSub2of3  */ new boolean[] { true,      false,     false,     false, ...    
-/* aSub3of3  */ new boolean[] { true,      true,      true,      true,  ...    
-/* moduleB   */ new boolean[] { false,     false,     false,     false, ...    
-/* bSub1of3  */ new boolean[] { true,      true,      true,      true,  ...    
-/* bSub2of3  */ new boolean[] { true,      false,     false,     false, ...    
-/* bSub3of3  */ new boolean[] { true,      true,      true,      true,  ...    
-/* moduleC   */ new boolean[] { false,     false,     false,     false, ...    
-/* cSub      */ new boolean[] { true,      true,      true,      true,  ...    
-};
-\end{lstlisting}
-\caption{Partial representation of the boolean matrix in \texttt{Rename3}}
-\end{code}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/authors.ltx b/org.eclipse.photran-dev-docs/dev-guide/authors.ltx
deleted file mode 100644
index b49bbbf..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/authors.ltx
+++ /dev/null
@@ -1,5 +0,0 @@
-% List of author names for the Photran developer's guide
-
-N. Chen \\
-J. Overbey \\
-%your name here \\
diff --git a/org.eclipse.photran-dev-docs/dev-guide/build.xml b/org.eclipse.photran-dev-docs/dev-guide/build.xml
deleted file mode 100644
index 08b3829..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/build.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<project default="main" basedir=".">
-	<target name="init">
-		<tstamp/>
-	</target>
-
-	<target name="main" description="Generate PDFs using pdflatex">
-		<!-- Run find-pdflatex.sh in the build directory to find pdflatex -->
-		<exec executable="find-pdflatex.sh"
-			resolveexecutable="true"
-			outputproperty="pdflatex"
-			failonerror="true"
-			failifexecutionfails="true"/>
-		
-		<!-- Now run pdflatex -->
-		<exec executable="${pdflatex}"
-			failonerror="true"
-			failifexecutionfails="true">
-			<arg value="dev-guide.ltx" />
-		</exec>
-		<exec executable="${pdflatex}"
-			failonerror="true"
-			failifexecutionfails="true">
-			<arg value="dev-guide.ltx" />
-		</exec>
-		<exec executable="${pdflatex}"
-			failonerror="true"
-			failifexecutionfails="true">
-			<arg value="cvs-instructions.ltx" />
-		</exec>
-	  	<delete><fileset dir="." includes="*.aux *.log *.toc *.dvi *.ps *.out" /></delete>
-	  	<exec executable="bash"><arg value="-c" /><arg value="if [ &quot;$$LOGNAME&quot; == &quot;joverbey&quot; ]; then xpdf -paper letter dev-guide.pdf; fi" /></exec>
-	</target>
-
-	<target name="clean" description="Remove generated PDFs">
-		<delete><fileset dir="." includes="*.pdf" /></delete>
-	  	<delete><fileset dir="." includes="*.aux *.log *.toc *.dvi *.ps *.out" /></delete>
-	</target>
-
-</project>
diff --git a/org.eclipse.photran-dev-docs/dev-guide/cdt.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/cdt.ltx-inc
deleted file mode 100644
index 47fae82..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/cdt.ltx-inc
+++ /dev/null
@@ -1,261 +0,0 @@
-\section{Introduction}
-
-The C/C++ Development Tools (CDT)\footnote{See
-\url{http://www.eclipse.org/cdt/}} enables Eclipse to function as a first-class
-C/C++ IDE. CDT provides features that a programmer expects from an IDE such
-as project management, automated build, integrated debugging, etc. In addition,
-CDT also provides extension points for writing IDEs for other programming
-languages that follow the C/C++ edit-compile-debug-compile cycle closely;
-Fortran is one such language.
-
-Photran builds upon the CDT by leveraging its extension points. As such, it
-needs to follow certain conventions and expectations of the CDT. In this
-chapter, we discuss those conventions and expectations.
-
-\section{CDT Terminology}
-
-The following are CDT terms that will be used extensively when discussing
-Photran.
-
-\begin{itemize}
-
-\item \textbf{Standard Make projects} are ordinary Eclipse projects, except that
-CDT and Photran recognize them as being ``their own'' type of project (as
-opposed to, say, projects for JDT, EMF, or another Eclipse-based tool). Users
-must supply their own Makefile, typically with targets ``clean'' and ``all.''
-CDT/Photran cleans and builds the project by running \texttt{make}.
-
-\item \textbf{Managed Make projects} are similar to standard make projects,
-except that CDT/Photran automatically generates a Makefile and edits the
-Makefile automatically when source files are added to or removed from the
-project. The \textbf{Managed Build System} is the part of CDT and Photran that
-handles all of this.
-
-\item \textbf{Binary parsers} are able to detect whether a file is a legal
-executable for a platform (and extract other information from it). CDT
-provides binary parsers for Windows (PE), Linux (ELF), Mac OS X (Mach), and
-others. Photran does not provide any additional binary parsers.
-
-\item \textbf{Error parsers} are provided for many compilers. CDT provides a gcc
-error parser, for example. Photran provides error parsers for Lahey Fortran, F,
-g95, and others. Essentially, error parsers scan the output of \texttt{make} for
-error messages for their associated compiler. When they see an error message
-that they recognize, they extract the filename, line number, and error message,
-and use it to populate the Problems View. See
-Appendix~\ref{ap:creating_an_error_parser} for an example on how to create an
-error parser.
-
-\item CDT keeps a \textbf{model} of all of the files in a project. The model is
-essentially a tree of \textbf{elements}, which all derive from the (CDT Core)
-class \texttt{ICElement}. It is described in the next section.
-
-\end{itemize}
-
-\section{The Model}
-
-\emph{This section describes the CDT model in detail. Understanding the CDT
-model is useful for contributors who are interested in modifying the UI and how
-Fortran projects are managed in the Fortran perspective. Contributors who are
-interested in creating refactorings and program analysis tools should
-familiarize themselves with the Abstract Syntax Tree (AST) and Virtual Program
-Graph (VPG) described in Chapter~\ref{cha:parsing}.}
-
-The Fortran Projects view in Photran is essentially a visualization of
-the CDT's \textit{model}, a tree data structure describing the contents
-of all Fortran Projects in the workspace as well as the high-level contents
-(functions, aggregate types, etc.) of source files.
-
-Alain Magloire (CDT) describes the model, A.K.A. the \texttt{ICElement}
-hierarchy, in the thread ``Patch to create ICoreModel interface'' on the cdt-dev
-mailing list:
-
-\begin{verbatim}
-So I'll explain a little about the ICElement and what we get out of it for
-C/C++.
-
-The ICElement hierarchy can be separated in two:
-(1) - how the Model views the world/resources (all classes above ITranslationUnit)
-(2) - how the Model views the world/language (all classes below ITranslationUnit).
-
-How we(C/C++) view the resources:
-- ICModel  --> [root of the model]
-  - ICProject --> [IProject with special attributes/natures]
-    - ISourceRoot --> [Folder with a special attribute]
-      - ITranslationUnit --> [IFile with special attributes, e.g. extensions *.c]
-      - IBinary --> [IFile with special attributes, elf signature, coff etc]
-      - IArchive --> [IFile with special attributes, "<ar>" signature]
-      - ICContainer -> [folder]
-
-There are also some special helper classes
-  - ILibraryReference [external files use in linking ex:libsocket.so, libm.a, ...]
-  - IIncludeReference [external paths use in preprocessing i.e. /usr/include, ...]
-  - IBinaryContainer [virtual containers regrouping all the binaries found
-    in the project]
-
-This model of the resources gives advantages:
-- navigation of the binaries,
-- navigation of the include files not part of the workspace (stdio.h, socket.h, etc)
-- adding breakpoints
-- search
-- contribution on the objects
-etc.....
-
-[...]
-
-(2) How we view the language.
-
-Lets be clear this is only a simple/partial/incomplete view of the language. For
-example, we do not drill down in blocks, there are no statements(if/else
-conditions) etc .... For a complete interface/view of the language, clients
-should use the __AST__ interface.
-\end{verbatim}
-
-\pagebreak
-
-From another of Alain's posts in that thread:
-
-\begin{verbatim}
-Lets make sure we are on the same length about the ICElement hierarchy.
-It was created for a few reasons:
-
-- To provide a simpler layer to the AST.  The AST interface is too complex
-  to handle in most UI tasks.
-- To provide objects for UI contributions/actions.
-- The glue for the Working copies in the Editor(CEditor), IWorkingCopy class
-- The interface for changed events.
-- ...
-
-Basically it was created for the UI needs: Outliner, Object action contributions,
-C/C++ Project view and more.
-
-The CoreModel uses information taken from:
-- the Binary Parser(Elf, Coff, ..)
-- the source Parser(AST parser)
-- the IPathEntry classes
-- the workspace resource tree
-- The ResolverModel (*.c, *.cc extensions), ...
-
-to build the hierarchy.
-\end{verbatim}
-
-\shabox{The CDT model should \textbf{not} be confused with the Abstract Syntax
-Tree (AST) model that is discussed in Section~\ref{sec:ast_structure}. They are
-\textbf{not} identical. It is best to think of the CDT model as containing a
-\emph{partial/simplified view} of the AST model to represent the
-\emph{interesting} elements in the source code (program names, function names,
-subroutine names) \textbf{in addition} to a model of the current workspace
-resources (Fortran projects, Fortran source files, binary executables). \emph{In
-other words, the CDT model knows about the language and the resources}. The AST,
-on the other hand, completely models \emph{everything} in the source file (but
-nothing about the resources), including low-level elements that the user is
-unlikely to be interested in knowing about (assignment nodes, variable
-declarations). While low-level, these elements are useful for refactoring and 
-program analysis.}
-
-By conforming to the CDT model, Photran is able to reuse various UI
-elements for \emph{free}. For instance, the Outline View for Photran is managed
-by CDT; Photran just needs to provide a CDT-compatible model to represent its
-project and source files.
-
-The \texttt{FortranLanguage} class is responsible for initializing concrete
-classes that will build up the model that CDT expects. For more
-information, refer to the FortranLanguage.java file in the
-\texttt{org.eclipse.photran.cdtinterface} plug-in project.
-
-There are \textbf{two} options for creating suitable \emph{model builders}:
-\begin{enumerate}
-\item The \texttt{org.eclipse.photran.cdtinterface} plug-in project defines the
-\\ \texttt{org.eclipse.photran.cdtinterface.modelbuilder} extension point that
-other plug-ins can extend. Plug-ins extending that extension point are
-responsible for providing a suitable model builder. Using this option, it is
-possible to have multiple model builders. The model builder to use can be
-selected in the workspace preferences (under Fortran $>$ CDT Interface).
-
-\item If there are no plug-ins that extend the
-\texttt{org.eclipse.photran.cdtinterface.modelbuilder} extension point, then
-Photran falls back on a default implementation. The default implementation is
-provided by the \texttt{SimpleFortranModelBuilder} class. It relies on simple
-lexical analysis to build the model. This simple model builder might not be able
-to accurately handle the more complicated features of the Fortran language.
-\end{enumerate}
-
-The Photran VPG (see Section~\ref{sec:virtual_program_graph}) inside the
-\texttt{org.eclipse.photran.core.vpg} project uses the first option to
-contribute a model builder. The relevant classes are under the
-\texttt{org.eclipse.photran.internal.core.model} package i.e.
-\texttt{FortranModelBuilder}, \texttt{FortranModelBuildingVisitor} and 
-\texttt{FortranParseTreeModelBuildingVisitor}.
-
-As mentioned in the post by Alain, all model elements must implement the
-\texttt{ICElement} interface for CDT to recognize them. In Photran, the
-\texttt{FortranElement} class implements the \texttt{ICElement} interface and
-serves as the base class for all Fortran elements such as subroutines,
-functions, modules, variables, etc. Each subclass of \texttt{FortranElement}
-corresponds to an element that can be displayed in the Outline View.
-
-\section{Reusing UI Elements}
-
-Various UI elements in Photran are also reused from the CDT through subclassing.
-For instance, the \texttt{NewProjectDropDownAction} class shown in
-Listing~\ref{lst:newprojectdropdownaction} is a subclass of
-\texttt{AbstractWizardDropDownAction} declared in CDT.
-\texttt{AbstractWizardDropDownAction} provides most of the implementation and
-our subclass just provides the Photran-specific details such as the actual
-action that will be invoked.
- 
-\begin{code}
-\begin{lstlisting}
-public class NewProjectDropDownAction extends AbstractWizardDropDownAction
-{
-	public NewProjectDropDownAction()
-	{
-		super();
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
-			 ICHelpContextIds.OPEN_PROJECT_WIZARD_ACTION);
-	}
-	
-	protected IAction[] getWizardActions()
-	{
-		return FortranWizardRegistry.getProjectWizardActions();
-	}
-}
-\end{lstlisting}
-\caption{\texttt{NewProjectDropDownAction} class}
-\label{lst:newprojectdropdownaction}
-\end{code}
-
-Our \texttt{NewProjectDropDownAction} is invoked through the right-click menu by
-going to New... $>$ Other $>$ Fortran. It creates a new Fortran project in the
-current workspace.
-
-In addition, we could also customize the icons for each UI element by modifying
-the appropriate attributes in the plugin.xml file in the
-\texttt{org.eclipse.photran.cdtinterface} project.
-
-\section{The CDT Debugger and \texttt{gdb}}
-
-Currently, Photran re-uses the CDT debugger as-is and does not contribute any
-enhancements to it. Here is a brief summary of how the debugger works:
-
-\begin{itemize}
-
-\item The so-called CDT debugger is actually just a graphical interface to
-\texttt{gdb}, or more specifically to \texttt{gdb/mi}. So, if something doesn't
-appear to work, it is advisable to try it in \texttt{gdb} directly or to use
-another \texttt{gdb}-based tool such as DDD.
-
-\item The debugger UI ``contributes'' breakpoint markers and actions to the
-editor. The ``set breakpoint'' action, and the breakpoint markers that appear in
-the ruler of the CDT (and Photran) editors are handled \textbf{entirely} by the
-CDT debug UI; there is no code for this in Photran. The ``set breakpoint''
-action is enabled by calling \lstinline!setRulerContextMenuId("#CEditorRulerContext");! 
-in the \texttt{AbstractFortranEditor} constructor.
-
-\item \texttt{gdb} reads debug symbols from the executable it is debugging.
-That is how it knows what line it's on, what file to open, etc.  Photran
-has \textit{nothing} to do with this: These symbols are written entirely
-by the compiler.  Moreover, the compiler determines what shows up in the
-Variables View.  If the debugger views seem to be a mess, it is the
-compiler's fault, not Photran's.
-
-\end{itemize}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.ltx b/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.ltx
deleted file mode 100644
index 7127561..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.ltx
+++ /dev/null
@@ -1,32 +0,0 @@
-\documentclass[10pt,letterpaper]{article}
-
-%\usepackage{anysize}
-%\marginsize{1.5in}{1.5in}{1.5in}{1.5in}
-\usepackage{fullpage}
-\usepackage[pdftex]{hyperref}
-\hypersetup{
-    colorlinks,%
-    citecolor=black,%
-    filecolor=black,%
-    linkcolor=black,%
-    urlcolor=blue
-}
-
-\hyphenpenalty=5000
-\tolerance=1000
-
-% Skip a line between paragraphs, and don't indent them
-\setlength{\parskip}{10pt}  % 10 pt = space between paragraphs
-\setlength{\parindent}{0pt} % 0 pt  = indentation
-
-\begin{document}
-
-\title{Getting the Photran 4.0 Sources from CVS}
-\author{}
-\date{}
-
-\maketitle
-
-\input{app-cvs.ltx-inc}
-
-\end{document}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.pdf b/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.pdf
deleted file mode 100644
index 9771539..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/cvs-instructions.pdf
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/dev-guide.ltx b/org.eclipse.photran-dev-docs/dev-guide/dev-guide.ltx
deleted file mode 100644
index 3a472dc..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/dev-guide.ltx
+++ /dev/null
@@ -1,112 +0,0 @@
-%\documentclass[10pt,letterpaper,twocolumn]{article}
-\documentclass[12pt,letterpaper]{report}
-
-%\usepackage{anysize}
-%\marginsize{0.5in}{0.5in}{0.5in}{0.5in}
-
-
-% Unnumbered footnotes
-\long\def\symbolfootnote[#1]#2{\begingroup\def\thefootnote{\fnsymbol{footnote}}
-\footnote[#1]{#2}\endgroup}
-
-\usepackage{fullpage}
-\usepackage[pdftex]{graphicx}
-\usepackage{color} 
-\definecolor{LightMagenta}{cmyk}{0.1,0.8,0,0.1} 
-
-\usepackage{listings}
-\lstset{numbers=left, numberstyle=\tiny, tabsize=2, numbersep=5pt, captionpos=b,
-basicstyle=\footnotesize, showstringspaces=false,
-emphstyle=\color{LightMagenta}\bfseries, language=Java}
-
-\usepackage[pdftex]{hyperref}
-\hypersetup{
-    colorlinks,%
-    citecolor=black,%
-    filecolor=black,%
-    linkcolor=black,%
-    urlcolor=blue
-}
-
-\usepackage{float}
-\floatstyle{ruled}
-\newfloat{image}{htp}{lop}[chapter]
-\floatname{image}{Figure}
-
-\newfloat{code}{htp}{lop}[chapter]
-\floatname{code}{Listing}
-
-\usepackage{shadow}
-
-\hyphenpenalty=5000
-\tolerance=1000
-
-% Skip a line between paragraphs, and don't indent them
-\setlength{\parskip}{10pt}  % 10 pt = space between paragraphs
-\setlength{\parindent}{0pt} % 0 pt  = indentation
-
-\begin{document}
-
-\title{Photran 4.0 Developer's Guide}
-\author{
-\input{authors.ltx}
-}
-\date{}
-
-\maketitle
-
-\tableofcontents
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\chapter{Introduction}\symbolfootnote[0]{Last significant update: 05/11/09 (JO), 08/08/08 (NC)}
-\label{cha:introduction}
-\input{intro.ltx-inc}
-
-\chapter{Interactions with CDT}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{cha:cdt}
-\input{cdt.ltx-inc}
-
-\chapter{Plug-in Decomposition}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{cha:plugins}
-\input{plugins.ltx-inc}
-
-\chapter{Parsing and Program Analysis}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{cha:parsing}
-\input{parsing.ltx-inc}
-
-\chapter{Refactoring}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{cha:refactoring}
-\input{refactoring.ltx-inc}
-
-\chapter{Photran Editors}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{cha:editor}
-\input{editor.ltx-inc}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\appendix
-
-\chapter{Getting the Photran 4.0 Sources from CVS}\symbolfootnote[0]{Last significant update: 05/11/09}
-\input{app-cvs.ltx-inc}
-
-\chapter{Creating an Error Parser}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{ap:creating_an_error_parser}
-\input{app-error-parsers.ltx-inc}
-
-\chapter{Simple Fortran Refactoring Example}\symbolfootnote[0]{Last significant update: 08/08/08}
-\label{app:obfuscate_refactoring}
-\input{app-obfuscate-fortran.ltx-inc}
-
-\chapter{Creating Tests for the Rename Refactoring}\symbolfootnote[0]{Last significant update: 08/08/08}
-\input{app-rename-tests.ltx-inc}
-
-\chapter{Release and Deployment Procedure}\symbolfootnote[0]{Last significant update: 02/25/09}
-\input{app-deploy.ltx-inc}
-
-\chapter{Release History}
-\input{app-history.ltx-inc}
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\end{document}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/editor.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/editor.ltx-inc
deleted file mode 100644
index 28d5299..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/editor.ltx-inc
+++ /dev/null
@@ -1,153 +0,0 @@
-\section{Fortran Text Editors}
-
-There are \textbf{two} different text editors in Photran. This is necessary to
-support both the fixed-form Fortran 77 standard and the free-form Fortran 90 \&
-95 standard.
-
-Fortran 77 is known as fixed-form Fortran because it requires certain constructs
-to be \emph{fixed} to particular columns. For instance, Fortran statements can
-only appear between columns 7 - 72; anything beyond column 72 is ignored
-completely. This requirement is an artifact of the days when punched cards were
-used for Fortran programming. However, Fortran 77 compilers still enforce this
-requirement. The fixed-form editor in Photran helps the programmer remember this
-requirement by displaying visual cues to denote the column partitions.
-
-Fortran 90/95 adopted the free-form format that most programmers today are
-accustomed to. Nonetheless, because Fortran 77 is still considered a subset of
-Fortran 90/95, it is possible to write programs following the fixed-form format.
-As such, the free-form editor maintains some visual cues on column numbering
-(although using a more subtle UI).
-
-The UML class diagram in Figure~\ref{fig:images_editor_class_hierarchy} shows
-the hierarchy of the editors in Photran.
-
-\begin{image}
-	\centering
-			\includegraphics[height=3in]{images/editor_hierarchy.png}
-			\caption{Photran editor class hierarchy}
-		\label{fig:images_editor_class_hierarchy}
-\end{image}
-
-Both the \texttt{FixedFormFortranEditor} and \texttt{FreeFormFortranEditor}
-concrete classes inherit from \texttt{AbstractFortranEditor}. Most of the actual
-work is done inside \texttt{AbstractFortranEditor}; its subclasses just specify
-how to decorate the UI.
-
-In general, the implementation of \texttt{AbstractFortranEditor} closely follows
-the standard implementation of text editors in Eclipse. The following section
-highlights some of the Photran-specific mechanisms of the text editor. For more
-information on how text editors work in Eclipse, please consult the Eclipse
-references mentioned in Chapter~\ref{cha:introduction}.
-
-\section{Contributed \texttt{SourceViewerConfiguration}}
-
-Text editors in Eclipse rely on a \texttt{SourceViewerConfiguration} to enhance
-the current editor with features such as auto indenting, syntax highlighting and
-formatting. By default, most of these features are already provided by the
-concrete \texttt{SourceViewerConfiguration} class. However, it is possible to
-provide a custom implementation of a \texttt{SourceViewerConfiguration}. This is
-done by calling the
-\texttt{setSourceViewerConfiguration(SourceViewerConfiguration
-sourceViewerConfiguration)} method in an Eclipse text editor.
-
-Photran provides an additional layer of flexibility by allowing its
-\texttt{SourceViewerConfiguration} to be contributed from other plug-ins. A
-plug-in that is interested in contributing a \texttt{SourceViewerConfiguration}
-to the Photran editors must extend the
-\\\texttt{org.eclipse.photran.ui.sourceViewerConfig} extension point defined in
-the \\\texttt{org.eclipse.photran.ui.vpg} plug-in.
-
-At run-time, Photran \emph{dynamically} instantiates a suitable
-\texttt{SourceViewerConfiguration} by searching through the list of plug-ins
-that extend the \texttt{org.eclipse.photran.ui.sourceViewerConfig} extension.
-
-Currently, there are \textbf{two} \texttt{SourceViewerConfiguration}s in
-Photran: the contributed \texttt{FortranVPGSourceViewerConfigurationFactory} and
-the default (but less feature-full)
-\texttt{FortranModelReconcilingSourceViewerConfiguration}.
-
-\section{Fortran Editor Tasks: VPG \& AST Tasks}
-
-Many actions that a user can invoke actually depend on the current text in the
-text editor. For instance, auto-completion depends on the text that has been
-entered so far to provide feasible completion choices. A good auto-completion
-strategy constantly augments and updates its database of feasible completion
-choices as the user enters or modifies text; it does not have to wait until the
-user saves the current file.
-
-Another important feature of the text editor that requires constant updates is
-syntax highlighting. Syntax highlighting has to work almost instantaneously
-based on what the user has entered. It is not acceptable for the user to
-experience lengthy delays between typing a character and waiting for it to
-syntax highlight correctly.
-
-Eclipse utilizes a \emph{reconciler} to correctly and instantly perform syntax
-highlighting. The reconciler runs in a background thread in Eclipse, constantly
-monitoring the text that the user enters and updating the syntax highlighting as
-necessary. Every text editor in Eclipse -- including Photran's -- has a
-corresponding reconciler.
-
-Photran takes advantage of its existing reconciler
-(\texttt{FortranVPGReconcilingStrategy}) and adds additional Fortran editor
-tasks that should run each time its reconciler runs. The list of tasks to run is
-stored in the singleton \texttt{FortranEditorTasks} object.
-
-Currently, there are two kinds of tasks that can be run: Abstract Syntax Tree
-(AST) editor tasks and Virtual Program Graph(VPG) editor tasks. AST editor tasks
-depend on information from the AST of the current source file; and VPG editor
-tasks depend on information from the VPG of the current source file.
-\texttt{FortranEditorTasks} automatically schedules the VPG editor tasks using
-an instance of \texttt{VPGSchedulingRule} to synchronize access to the
-\texttt{PhotranVPG} singleton object. The AST of the current file is computed
-on-the-fly as the user modifies the source file. The VPG of the current file is
-based off its previous saved version (so it is less up-to-date). For more
-information about the AST and VPG, see Chapter~\ref{cha:parsing}.
-
-AST editor tasks must implement the \texttt{IFortranEditorASTTask} interface and
-VPG editor tasks must implement the \texttt{IFortranEditorVPGTask} interface.
-Additionally, each task has to register itself with the
-\texttt{FortranEditorTasks} object. A task that no longer needs to run should
-also be unregistered. Since these tasks run asynchronously, it is important to
-use proper Java concurrency practices i.e. \textbf{synchronized} methods and statements.
-
-\pagebreak
-
-Below is the API of the \texttt{FortranEditorTasks} class:
-
-\begin{code}
-\begin{lstlisting}
-public class FortranEditorTasks
-{
-	public static FortranEditorTasks instance(AbstractFortranEditor editor)
-
-	public synchronized void addASTTask(IFortranEditorASTTask task)
-
-	public synchronized void addVPGTask(IFortranEditorVPGTask task)
-
-	public synchronized void removeASTTask(IFortranEditorASTTask task)
-
-	public synchronized void removeVPGTask(IFortranEditorVPGTask task)
-
-	public Runner getRunner()
-	
-	...
-} 
-\end{lstlisting}
-\caption{API of \texttt{FortranEditorTasks} (see FortranEditorTasks.java)}  
-\end{code}
-
-It is possible for a class to implement both the \texttt{IFortranEditorASTTask}
-and \texttt{IFortranEditorVPGTask} interfaces. For example, the
-\texttt{DeclarationView} class registers itself for both kinds of editor tasks
-and makes use of the information from both as it attempts to present the
-declaration for the currently selected token of the text editor.
-
-For more information on implementation details, please refer to the following
-classes:
-
-\begin{itemize}
-	\item \texttt{DeclarationView}
-	\item \texttt{FortranCompletionProcessorASTTask}
-	\item \texttt{FortranCompletionProcessorVPGTask}
-	\item \texttt{OpenDeclarationASTTask}
-\end{itemize}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/find-pdflatex.sh b/org.eclipse.photran-dev-docs/dev-guide/find-pdflatex.sh
deleted file mode 100755
index 2b0ea6b..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/find-pdflatex.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-RESULT=`which pdflatex 2>/dev/null | grep -v "no pdflatex in"`
-if [ "$RESULT" == "" ]; then
-  OS=`uname -s`
-  if [ "$OS" == "Darwin" ]; then
-    HARDWARE=`uname -m`
-    if [ "$HARDWARE" == "i386" ]; then
-      RESULT=`find /usr/local/texlive -name pdflatex | grep i386`
-    else
-      RESULT=`find /usr/local/texlive -name pdflatex | grep ower`
-    fi
-  else
-    RESULT=`find /usr/local/tex* -name pdflatex | head -1`
-  fi
-fi
-if [ "$RESULT" == "" ]; then
-  exit 1
-else
-  echo $RESULT
-  exit 0
-fi
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/editor_hierarchy.graffle b/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/editor_hierarchy.graffle
deleted file mode 100644
index 4847a60..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/editor_hierarchy.graffle
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/parser_chain.graffle b/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/parser_chain.graffle
deleted file mode 100644
index 5c40720..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/diagrams/parser_chain.graffle
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/editor_hierarchy.png b/org.eclipse.photran-dev-docs/dev-guide/images/editor_hierarchy.png
deleted file mode 100644
index 22fce3a..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/editor_hierarchy.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/parser_chain.png b/org.eclipse.photran-dev-docs/dev-guide/images/parser_chain.png
deleted file mode 100644
index d70d8aa..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/parser_chain.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/parsetree1.png b/org.eclipse.photran-dev-docs/dev-guide/images/parsetree1.png
deleted file mode 100644
index 3fef6fc..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/parsetree1.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/images/simple_fortran_AST.png b/org.eclipse.photran-dev-docs/dev-guide/images/simple_fortran_AST.png
deleted file mode 100644
index ede9655..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/images/simple_fortran_AST.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/dev-guide/intro.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/intro.ltx-inc
deleted file mode 100644
index 33147db..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/intro.ltx-inc
+++ /dev/null
@@ -1,50 +0,0 @@
-% Introduction
-\vspace{-0.5in}
-
-Photran is an IDE for Fortran 77, 90, 95, and 2003 that is built on top of
-Eclipse. It is structured as an Eclipse feature, in other words, as a set of
-plug-ins that are designed to be used together. Starting with version 3.0, it is
-an extension of C/C++ Development Tools (CDT), the Eclipse IDE for C/C++.
-Previous versions of Photran were created by hacking a copy of CDT to support
-Fortran instead of C/C++, but now we have developed a mechanism for adding new
-languages into CDT, allowing the Fortran support code to be in its own set of
-plug-ins.
-
-Our purpose in writing Photran was to create a refactoring tool for Fortran.
-Thus, Photran has a complete parser and program representation. Photran also
-adds a Fortran editor and several preference pages to the CDT user interface,
-as well as Fortran-specific project wizards and support for several Fortran
-compilers.
-
-Photran is part of the Parallel Tools Platform (PTP) project at the
-Eclipse Foundation, which provides the Web site, CVS repository, and
-Bugzilla repository.  The Web site is 
-\href{http://www.eclipse.org/photran}{http://www.eclipse.org/photran},
-and bugs can be submitted at
-\href{https://bugs.eclipse.org}{https://bugs.eclipse.org}
-under Tools $>$ PTP by selecting one of the ``Photran'' components.
-
-
-\vspace{-0.2in}
-
-\section{How To Read This Guide} 
-
-This document explains the design of Photran so that interested contributors
-could fix a bug or add a refactoring. Contributors should know how to use
-Photran and how CDT works. There is a short
-\href{http://www.eclipse.org/photran/documentation.php}{\emph{Getting Started
-Guide}} on the Photran website.
-
-Contributors also need to understand Eclipse and how to build Eclipse plug-ins
-before they read this document. We recommend reading
-\href{http://www.amazon.com/Eclipse-Building-Commercial-Quality-Plug-Ins/dp/0321228472}{\emph{Building
-Commercial-Quality Plug-ins}} and
-\href{http://www.amazon.com/Java-Developers-Guide-Eclipse-2nd/dp/0321305027/}{\emph{The
-Java Developer's Guide to Eclipse}} for Eclipse newcomers.
-
-This is a \emph{duplex} guide. The main chapters provide general descriptions of
-the various components and how they interact. The appendix describes concrete
-examples from Photran so that contributors can familiarize themselves with
-actual code and implementation details. This guide complements the source code
-in the repository; it is \underline{not a substitute} for reading the actual
-source code.
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/dev-guide/parsing.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/parsing.ltx-inc
deleted file mode 100644
index 583d7d6..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/parsing.ltx-inc
+++ /dev/null
@@ -1,657 +0,0 @@
-% Parsing and Program Analysis
-
-\section{Parsing}
-
-Before any program analysis can be done, the source code of the Fortran program
-has to be parsed. Photran provides support for both fixed-form (Fortran 77) and
-free-form Fortran (Fortran 90 \& 95) source code. The parser in Photran is
-generated using the Ludwig parser/AST generator by Jeff Overbey. It is based on
-the \emph{fortran95.bnf} grammar file.
-
-Figure~\ref{fig:images_parser_chain} shows the lexer \& parser tool chain in
-Photran. Preliminary support for the preprocessor (\texttt{INCLUDE} directives)
-has also been implemented in the current version of the tool chain.
-
-\begin{image}
-	\centering
-			\includegraphics[height=3in]{images/parser_chain.png}
-			\caption{Photran preprocessor/lexer/parser chain}
-		\label{fig:images_parser_chain}
-\end{image}
-
-\section{Virtual Program Graph}
-\label{sec:virtual_program_graph}
-
-% I can't seem to get the cedilla fa\c{c}ade to render in my version of LaTeX
-In Photran, it is \emph{almost} never necessary to call the lexer, parser, or
-analysis components directly. Instead, Photran uses a \textbf{virtual program
-graph} (VPG), which provides the facade of a whole-program abstract syntax tree
-(AST) with embedded analysis information. In general, program analysis should be
-performed through the Photran VPG.
-
-An overview of VPGs is available at the following link:
-\url{http://jeff.over.bz/software/vpg/doc/}. It provides the background
-necessary for the remaining sections of this chapter.
-
-\subsection{Using the Photran VPG}
-
-\subsubsection{Acquiring and Releasing Translation Units}
-% TODO Make sure that this fits nicely into the page
-\texttt{PhotranVPG} is a \emph{singleton} object responsible for constructing
-ASTs for Fortran source code. ASTs are retrieved by invoking either of these
-methods:
-\begin{code}
-\begin{lstlisting}[numbers=none]
-public IFortranAST acquireTransientAST(IFile file)
-
-public IFortranAST acquirePermanentAST(IFile file)
-\end{lstlisting}
-\caption{Acquiring the Fortran AST}
-\end{code}
-
-\vspace{-0.15in}
-
-The returned object is an IFortranAST, an object which has a method for
-returning the root node of the AST as well as methods to quickly locate tokens
-in the AST by offset or line information. A \emph{transient AST} can be garbage
-collected as soon as references to any of its nodes disappear. A \emph{permanent
-AST} will be explicitly kept in memory until a call is made to either of the 
-following methods:
-\begin{code}
-\begin{lstlisting}[numbers=none]
-public void releaseAST(IFile file)
-
-public void releaseAllASTs()
-\end{lstlisting}
-\caption{Releasing the Fortran AST}
-\end{code}
-
-Often, it is better to acquire a transient AST and rely on the garbage collector
-to reclaim the memory once we are done using it. However, there are times when
-acquiring a permanent AST would be more beneficial performance-wise. For
-instance, if we will be using the same AST multiple times during a refactoring,
-it would be better to just acquire a permanent AST. This prevents the garbage
-collector from reclaiming the memory midway through the refactoring once all
-references to the AST have been invalidated. While it is always possible to
-reacquire the same AST, doing so can be an expensive operation since it requires
-\emph{lexing}, \emph{parsing} \textbf{and} finally \emph{reconstructing} the AST
-from scratch.
-
-Only one AST for a particular file is in memory at any particular point in time,
-so successive requests for the same \texttt{IFile} will return the same
-(pointer-identical) AST until the AST is released (permanent) or garbage
-collected (transient).
-
-\subsubsection{Caveat}
-
-It is important to note that, because \texttt{PhotranVPG} is a singleton object,
-one must be careful about accessing it from multiple threads. Most of the time,
-when an AST is required, it will be from an action contributed to the Fortran
-editor; in this case, the action will usually be a descendant of
-\texttt{FortranEditorActionDelegate}, and synchronization will be handled
-automatically. For instance, all refactoring actions in Photran are descendants
-of \texttt{FortranEditorActionDelegate} and their accesses to
-\texttt{PhotranVPG} are being synchronized automatically.
-
-Otherwise, the thread must either be scheduled using a
-\texttt{VPGSchedulingRule} or it must lock the entire workspace . See
-\texttt{EclipseVPG\#queueJobToEnsureVPGIsUpToDate} as an example on how to use
-the \texttt{VPGSchedulingRule} and \texttt{FortranEditorActionDelegate\#run} as
-an example of how to lock the entire workspace.
-
-As a guideline, contributors who are interested in accessing the VPG should
-consider structuring their contributions as descendants of
-\texttt{FortranEditorActionDelegate} since that is the simplest mechanism (all
-synchronization is already taken care of automatically). However, if such an
-approach is not feasible, then they should consider using
-\texttt{VPGSchedulingRule} before resorting to locking the entire workspace.
-
-\subsection{The Program Representation: IFortranAST}
-
-The \texttt{acquireTransientAST} and \texttt{acquirePermanentAST} methods return
-an object implementing \texttt{IFortranAST}. Listing~\ref{lst:ifortranast} shows
-the methods in IFortranAST.
-
-\begin{code}
-\begin{lstlisting}[firstnumber=25]
-public interface IFortranAST extends Iterable<Token>
-{
-	///////////////////////////////////////////////////////////////////////////
-	// Visitor Support
-	///////////////////////////////////////////////////////////////////////////
-	
-	public void accept(IASTVisitor visitor);
-	
-	///////////////////////////////////////////////////////////////////////////
-	// Other Methods
-	///////////////////////////////////////////////////////////////////////////
-	
-	public ASTExecutableProgramNode getRoot();
-	
-	public Iterator<Token> iterator();
-	public Token findTokenByStreamOffsetLength(int offset, int length);
-	public Token findFirstTokenOnLine(int line);
-	public Token findTokenByFileOffsetLength(IFile file, int offset, int length);
-}
-\end{lstlisting}
-\caption{\texttt{IFortranAST} (see IFortranAST.java)}
-\label{lst:ifortranast}
-\end{code}
-
-The \texttt{getRoot} method returns the root of the AST, while the
-\texttt{find...} methods provide efficient means to search for tokens based
-on their lexical positioning in the source code.
-
-The \texttt{accept} method allows an external visitor to traverse the AST. This
-method is usually used when it is necessary to ``collect'' information about
-certain nodes. For more information see Section~\ref{sec:ast_structure} on what
-nodes can be visited.
-
-Because \texttt{IFortranAST} extends the \texttt{Iterable} interface, it is
-possible to use the \emph{foreach} loop to conveniently iterate through all the
-tokens in the AST e.g. \\ \lstinline!for (Token token : new IterableWrapper<Token>(ast))!
-
-\section{AST Structure}
-\label{sec:ast_structure}
-
-Photran's (rewritable) AST is generated along with the parser, so the structure
-of an AST is determined by the structure of the parsing grammar (see the
-\emph{fortran95.bnf} file). The generated classes are located in the
-\texttt{org.eclipse.photran.internal.core.parser} package in the
-\texttt{org.eclipse.photran.core.vpg} project. The easiest way to visualize the
-structure of a particular file's AST is to view it in the Outline view (see
-Section~\ref{sec:how_to_get_acquainted_with_the_program_representation}).
-However determining all possible ASTs for a particular construct requires
-scrutinizing the parsing grammar file.
-
-\subsection{Ordinary AST Nodes}
-\label{sub:ordinary_ast_nodes}
-
-Generally speaking, there is one AST node for each nonterminal in the grammar
-and one accessor method for each symbol on its right-hand side (unless the
-symbol name is prefixed with a hyphen, in which case it is omitted). For
-example, the following specification\footnote{All grammar
-specifications are taken from the \emph{fortran95.bnf} file. The \# RXXX number
-provides a reference to the actual specification in the grammar file.}
-
-{\footnotesize\begin{verbatim}
-# R533
-<DataStmtSet> ::= <DataStmtObjectList> -:T_SLASH <DataStmtValueList> -:T_SLASH
-\end{verbatim}}
-
-generates the AST node class \texttt{ASTDataStmtSetNode} shown in
-Listing~\ref{lst:astdatastmtsetnode_api}. Notice the \emph{presence} of the
-\texttt{getDataStmtObjectList} and \texttt{getDataStmtValueList} getters methods
-and the \emph{absence} of any method for accessing T\_SLASH.
-
-\shabox{The convention is to generate a class with the name
-\texttt{\color{LightMagenta}AST}$<$nonterminal
-name$>$\texttt{\color{LightMagenta}Node} that extends \texttt{ASTNode}. For
-instance \# R533 will generate the
-\texttt{{\color{LightMagenta}AST}DataStmtSet{\color{LightMagenta}Node}} class.}
-
-The following sections describe additional annotations that can be used to
-modify the standard convention when necessary. These annotations are not
-considered part of the standard BNF notation but they are supported by the
-underlying Ludwig parser generator.
-
-\begin{code}
-\begin{lstlisting}
-public class ASTDataStmtSetNode extends ASTNode
-{
-	public IASTListNode<IDataStmtObject> getDataStmtObjectList() {...}
-
-	public void setDataStmtObjectList(IASTListNode<IDataStmtObject> newValue) {...}
-
-	public IASTListNode<ASTDataStmtValueNode> getDataStmtValueList() {...}
-
-	public void setDataStmtValueList(IASTListNode<ASTDataStmtValueNode> newValue) {...}
-
-	... 
-}
-\end{lstlisting}
-\caption{\texttt{ASTDataStmtSetNode} generated from \# R533}
-\label{lst:astdatastmtsetnode_api}
-\end{code}
-
-\subsubsection{Annotation \#1: \texttt{(list)}}
-
-Recursive productions are treated specially, since they are used frequently to
-express lists in the grammar. The recursive member is labeled in the grammar
-with the \texttt{(list)} annotation. For example, the following specification
-
-{\footnotesize\begin{verbatim}
-# R538
-(list):<DataStmtValueList> ::=
-  |                               <DataStmtValue>
-  | <DataStmtValueList> -:T_COMMA <DataStmtValue>
-\end{verbatim}}
-
-means that the AST will contain an object of type
-\texttt{List$<$ASTDataStmtValueNode$>$} whenever a \verb!<DataStmtValueList>!
-appears in the grammar. For instance, \# R533 (just described in the previous
-section) uses the \texttt{DataStmtValueList} construct. Notice in
-Listing~\ref{lst:astdatastmtsetnode_api} that the return type of
-\texttt{getDataStmtValueList} is a \texttt{List}.
-
-Putting an object that implements the \texttt{java.util.List} into the tree
-(rather than having a chain of nodes) makes it easier to iterate through the
-list, determine its size and insert new child nodes.
-
-\subsubsection{Annotation \#2: \texttt{(superclass)}}
-
-The \texttt{(superclass)} annotation is used to create an interface that is
-implemented by all symbols on the right-hand side of the specification will
-implement. For example, the following specifications
-
-{\footnotesize\begin{verbatim}
-# R207
-(superclass):<DeclarationConstruct> ::=
-  | <DerivedTypeDef>
-  | <InterfaceBlock>
-  | <TypeDeclarationStmt>
-  | <SpecificationStmt>
-
-...
-
-# R214
-(superclass):<SpecificationStmt> ::=
-  | <AccessStmt>
-  | <AllocatableStmt>
-  | <CommonStmt>
-  | <DataStmt>
-  | <DimensionStmt>
-  | <EquivalenceStmt>
-  | <ExternalStmt>
-  | <IntentStmt>
-  | <IntrinsicStmt>
-  | <NamelistStmt>
-  | <OptionalStmt>
-  | <PointerStmt>
-  | <SaveStmt>
-  | <TargetStmt>
-  | <UnprocessedIncludeStmt>
-\end{verbatim}}
-
-mean that an \textbf{interface} -- not a class -- named
-\texttt{ISpecificationStmt} will be generated for \# R214, and
-\texttt{ASTAccessStmtNode}, \texttt{ASTAllocatableStmtNode},
-\texttt{ASTCommonStmtNode}, etc will implement that interface. In addition,
-because \verb!<SpecificationStmt>! is used inside \# R207 which also uses the
-\texttt{(superclass):} annotation, \texttt{ISpecificationStmt} also extends the
-\texttt{IDeclarationConstruct} interface from \# R207 i.e.
-
-\begin{lstlisting}[numbers=none]
-	public interface ISpecificationStmt extends IASTNode, IDeclarationConstruct
-\end{lstlisting}
-
-So, it is possible for an AST node to implement multiple interfaces based on the 
-specifications in the grammar.
-
-Using the \texttt{(superclass)} annotation gives those nonterminals in \# R214
-nodes a common type; most notably, a \texttt{Visitor} can override the
-\texttt{visit(ISpecificationStmt)} method to treat all three node types
-uniformly.
-
-\subsubsection{Annotation \#3: \texttt{(bool)}}
-
-The \texttt{(bool)} annotation indicates that an accessor method will return a
-\lstinline!boolean! rather than an actual AST node. For example, the following
-specification
-
-{\footnotesize\begin{verbatim}
-# R511
-<AccessSpec> ::=
-  | isPublic(bool):T_PUBLIC
-  | isPrivate(bool):T_PRIVATE
-\end{verbatim}}
-
-will generate the \texttt{ASTAccessSpecNode} class as shown in Listing~\ref{lst:astaccessspecnode_api}.
-
-\begin{code}
-\begin{lstlisting}
-public class ASTAccessSpecNode extends ASTNode
-{
-	// in ASTAccessSpecNode
-	Token isPrivate;
-	// in ASTAccessSpecNode 
-	Token isPublic; 
-	
-	public boolean isPrivate() {...}
-	
-	public void setIsPrivate(Token newValue) {...}
-	
-	public boolean isPublic() {...}
-	
-	public void setIsPublic(Token newValue) {...}
-	
-	...
-}
-\end{lstlisting}
-\caption{ASTAccessSpecNode generated from \# R511}
-\label{lst:astaccessspecnode_api}
-\end{code}
-Notice on lines 8 \& 12 that the methods return \lstinline!boolean! values
-instead of \texttt{ASTNode}s. The \lstinline!boolean! values are usually used to
-test the presence of that particular \texttt{ASTNode} in the source code.
-
-\subsubsection{Annotation \#4: Labels}
-
-Specification \# R511 also illustrates the use of \emph{labels} in the grammar
-file: \verb!isPublic(bool):T_PUBLIC! results in a method called
-\texttt{isPublic} instead of \verb!getT_PUBLIC!. The use of labels can greatly
-enhance the readability of the program by making its intent clearer.
-
-\subsubsection{Annotation \#5: \texttt{(inline)}}
-
-Consider the following specifications for a main program in Fortran:
-
-{\footnotesize\begin{verbatim}
-# R1101
-<MainProgram> ::=
-  |               <MainRange>
-  | <ProgramStmt> <MainRange>
-
-<MainRange> ::=
-  | <Body>              <EndProgramStmt>
-  | <BodyPlusInternals> <EndProgramStmt>
-  |
-\end{verbatim}}
-
-From the standpoint of a typical Fortran programmer, a main program consists of
-a Program statement, a body (list of statements), perhaps some internal
-subprograms, and an End Program statement. This does not match the definition of
-a \verb!<MainProgram>! in the parsing grammar above: \verb!<Body>! and
-\verb!<EndProgStmt>! are relegated to a separate \verb!<MainRange>! nonterminal.
-
-The solution is to label the MainRange nonterminal with the \texttt{(inline)} annotation, indicating that it is to be in-lined:
-
-{\footnotesize\begin{verbatim}
-# R1101
-(customsuperclass=ScopingNode):<MainProgram> ::=
-  |               (inline):<MainRange>
-  | <ProgramStmt> (inline):<MainRange>
-
-<MainRange> ::=
-  | <Body>                       <EndProgramStmt>
-  | (inline):<BodyPlusInternals> <EndProgramStmt>
-  |
-\end{verbatim}}
-
-This means that accessor methods that would otherwise be in a separate
-\texttt{ASTMainRangeNode} class will be placed in the
-\texttt{ASTMainProgramNode} class instead.
-Listing~\ref{lst:astmainprogramnode_api} shows that the accessors that were
-previously in \texttt{ASTMainRangeNode} have been in-lined to
-\texttt{ASTMainProgramNode}. Now there is no longer any need for a
-\texttt{ASTMainRangeNode} class.
-
-\begin{code}
-\begin{lstlisting}
-public class ASTMainProgramNode extends ScopingNode implements IProgramUnit
-{
-	public ASTProgramStmtNode getProgramStmt()
-	
-	public void setProgramStmt(ASTProgramStmtNode newValue)
-	
-	public IASTListNode<IBodyConstruct> getBody()
-	
-	public void setBody(IASTListNode<IBodyConstruct> newValue)
-	
-	public ASTContainsStmtNode getContainsStmt()
-	
-	public void setContainsStmt(ASTContainsStmtNode newValue)
-	
-	public IASTListNode<IInternalSubprogram> getInternalSubprograms()
-	
-	public void setInternalSubprograms(IASTListNode<IInternalSubprogram> newValue)
-	
-	public ASTEndProgramStmtNode getEndProgramStmt()
-	
-	public void setEndProgramStmt(ASTEndProgramStmtNode newValue)
-	
-	...
-}
-\end{lstlisting}
-\caption{\texttt{ASTMainProgramNode} generated from \# R1101}
-\label{lst:astmainprogramnode_api}
-\end{code}
-
-\subsubsection{Annotation \#6: \texttt{(customsuperclass=*)}}
-
-Specification \# R1101 in the previous section also illustrates the use of the
-\\ \texttt{(customsuperclass=ScopingNode)} annotation. This makes
-\texttt{ScopingNode} the parent of the \texttt{ASTMainProgramNode} class. Note
-that \texttt{ScopingNode} (or whichever custom super class is chosen) has to be
-a descendant of \texttt{ASTNode} because every node in the AST has to be of that
-type (either directly or as a descendant).
-
-The \texttt{(customsuperclass=*)} annotation is a useful technique for
-delegating external methods that cannot be expressed through the grammar BNF
-file into a separate hand-coded class while still having the benefits of an
-auto-generated parser and AST.
-
-\subsection{Tokens}
-\label{sub:tokens}
-
-\texttt{Token}s form the leaves of the AST.  They record, among other things,
-
-\begin{itemize}
-\item The terminal symbol in the grammar that the token is an instance of (\texttt{getTerminal()})
-\item The actual text of the token (\texttt{getText()})
-\item The line, column, offset, and length of the token text in the source file (\texttt{getLine(), getCol(), getFileOffset(), getLength()})
-\end{itemize}
-
-Most of the remaining fields are used internally for refactoring.
-
-\subsection{Fortran Program AST Example}
-
-The previous sections describe the conventions and additional annotations that
-are used to construct the AST nodes. While the conventions and annotations
-themselves are simple, the Fortran grammar is extremely complicated and contains
-hundreds of grammar specifications. Essentially, even the simplest Fortran
-program might contain a very complicated AST. For instance this simple Fortran
-program: \\
-
-\begin{lstlisting}[language=Fortran, frame=lines]
-program main
-  	integer a
-end	
-\end{lstlisting}
-
-generates the AST shown in Figure~\ref{fig:simple_fortran_ast}. As an exercise,
-the reader is encouraged to derive the structure of the AST from the grammar
-specifications in the \emph{fortran.bnf} file beginning with \# R201,
-\verb!<ExecutableProgram>!.
-
-Moreover, modifying our previous program slightly to contain an array as shown
-below, causes the AST structure to become extremely complicated. The reader is
-encouraged to create a file containing this program and view the resulting AST
-in the Outline View in Photran. Notice how the \verb!(5)! expression for
-specifying the dimension of the array requires building up an entire hierarchy
-of \texttt{ASTLevel5ExprNode}, \texttt{ASTLevel4ExprNode},
-\texttt{ASTLevel3ExprNode}, \ldots \\
-
-\begin{lstlisting}[language=Fortran, frame=lines]
-program main
-  	integer a(5) ! This declares an array of 5 integers
-end	
-\end{lstlisting}
-
-
-\begin{image}
-	\centering
-			\includegraphics[height=4in]{images/simple_fortran_AST.png}
-			\caption{AST for simple Fortran program as viewed through the Outline View}
-		\label{fig:simple_fortran_ast}
-\end{image}
-
-Fortunately, it is not necessary to know every specification in the grammar. For
-most refactoring and program analysis tasks, it is sufficient to rely on the
-information that the VPG provides. If that is insufficient, then it is usually
-enough to construct a Visitor to visit \emph{only} the nodes of interest and
-``collect'' the information that is required.
-
-\section{Scope and Binding Analysis}
-
-Currently, the only semantic analysis performed by Photran is binding analysis:
-mapping \emph{identifiers} to their \emph{declarations}. Compilers usually do
-this using symbol tables but Photran uses a more IDE/refactoring-based approach.
-
-Certain nodes in a Fortran AST represent a lexical scope. All of these nodes are
-declared as subclasses of \texttt{ScopingNode}:
-
-\begin{itemize}
-\item ASTBlockDataSubprogramNode
-\item ASTDerivedTypeDefNode
-\item ASTExecutableProgramNode
-\item ASTFunctionSubprogramNode
-\item ASTInterfaceBlockNode\footnote{An interface block defines a nested scope only if it is a named interface.Anonymous (unnamed) interfaces provide signatures for subprograms in their enclosing scope.}
-\item ASTMainProgramNode
-\item ASTModuleNode
-\item ASTSubroutineSubprogramNode
-\end{itemize}
-
-Each of the subclasses of \texttt{ScopingNode} represents a scoping unit in
-Fortran. The \texttt{ScopingNode} class has several public methods that provide
-information about a scope. For example, one can retrieve a list of all of the
-symbols declared in that scope; retrieve information about its
-\texttt{IMPLICIT} specification; find its header statement (e.g. a
-\texttt{FUNCTION} or \texttt{PROGRAM} statement); and so forth.
-
-The enclosing scope of a \texttt{Token} can be retrieved by calling the
-following method on the \texttt{Token} object:
- 
-\begin{lstlisting}[numbers=none]
-public ScopingNode getEnclosingScope()
-\end{lstlisting}
-
-Identifier tokens (\texttt{Token}s for which \texttt{token.getTerminal() ==
-Terminal.T\_IDENT}), which represent functions, variables, etc. in the Fortran
-grammar, are \emph{bound} to a declaration\footnote{The introduction to VPGs
-earlier in this chapter (URL above) provides an example visually.}. Although,
-ideally, every identifier will be bound to exactly one declaration, this is not
-always the case: the programmer may have written incorrect code, or Photran may
-not have enough information to resolve the binding uniquely). So the
-\texttt{resolveBinding} method returns a \emph{list} of \texttt{Definition}
-objects:
-
-\begin{lstlisting}[numbers=none]
-public List<Definition> resolveBinding()
-\end{lstlisting}
-
-A \texttt{Definition} object contains many public methods which provide a wealth
-of information. From a \texttt{Definition} object, it is possible to get a list
-of all the references to a particular declaration (using
-\texttt{findAllReferences}) and where that particular declaration is located in
-the source code (using \texttt{getTokenRef}). Both of these methods return a
-\texttt{PhotranTokenRef} object. See Section~\ref{sub:token_or_tokenref} for a
-comparison between \texttt{Token} and \texttt{TokenRef}.
-
-\subsection{Examples of Binding Analysis} 
-
-\subsubsection{Obtaining the \texttt{Definition} of a variable}
-
-If you have a reference to the \texttt{Token} object of that variable (for
-instance through iterating over all \texttt{Tokens} in the current Fortran AST)
-then use:
-
-\begin{lstlisting}[numbers=none, frame=lines]
-// myToken is the reference to that variable
-List<Definition> bindings = myToken.resolveBinding();
-
-if(bindings.size() == 0)
-	throw new Exception(myToken.getText() + " is not declared");
-else if (bindings.size() > 1)
-	throw new Exception(myToken.getText() + " is an ambiguous reference");
-
-Definition definition = bindings.get(0);
-\end{lstlisting}
-
-If you do \textbf{not} have a reference to a \texttt{Token} but you know the
-name of the identifier, you can first construct a \emph{hypothetical}
-\texttt{Token} representing an identifier and search for that in a
-\emph{particular} \texttt{ScopingNode} (possibly obtained by calling the static
-method \texttt{ScopingNode.getEnclosingScope(IASTNode node)}).
-\\
-
-\begin{lstlisting}[numbers=none, frame=lines]
-Token myToken = new Token(Terminal.T_IDENT, "myNameOfIdentifier");
-List<PhotranTokenRef> definitions = myScopingNode.manuallyResolve(myToken);
-\end{lstlisting}
-
-If you want to search for the identifier in \textbf{all} \texttt{ScopingNodes}
-for the current source file, then retrieve all the \texttt{ScopingNodes} and
-manually iterate through each one. Remember that the root of the AST is a
-\texttt{ScopingNode} and you may obtain the root of the AST through the
-\texttt{getRoot} method declared in \texttt{IFortranAST}.
-\\
-
-\begin{lstlisting}[numbers=none, frame=lines]
-List<ScopingNode> scopes = myRoot.getAllContainedScopes();
-
-for (ScopingNode scopingNode : scopes)
-{
-	// search through each ScopingNode
-}
-\end{lstlisting}
-
-\subsubsection{Examples in \texttt{FortranEditorASTActionDelegate} subclasses}
-
-The following subclasses of \texttt{FortranEditorASTActionDelegate} all contain short working examples of how to use the binding analysis API in Photran:
-\begin{itemize}
-	\item DisplaySymbolTable
-	\item FindAllDeclarationsInScope
-	\item OpenDeclaration
-	\item SelectEnclosingScope
-\end{itemize}
-
-\section{How to Get Acquainted with the Program Representation}
-\label{sec:how_to_get_acquainted_with_the_program_representation}
-
-\emph{All these features work on \textbf{Fortran projects}. A new Fortran
-project can be created via File $>$ New $>$ Fortran $>$ Fortran Project. These
-features do not work on individual Fortran source files.}
-
-\subsection{Visualizing ASTs}
-
-Photran can display ASTs in place of the ordinary Outline view.
-This behavior can be enabled from the Fortran workspace preferences:
-
-\begin{itemize}
-	\item Click on Window $>$ Preferences in Windows/Linux, orEclipse $>$ Preferences in Mac OS X.
-	\item Select ``Fortran'' on the left hand side of the preference dialog (do not expand it).
-	\item Select ``(Debugging) Show entire parse tree rather than Outline view''
-\end{itemize}
-  
-Clicking on an AST \texttt{node}Token in the Outline view will move the cursor
-to that construct's position in the source file.
-
-\subsection{Visually Resolving Bindings}
-
-This feature is disabled by default since it requires performing an update on
-the VPG database each time the file is saved -- an operation that could be
-expensive for larger files. To enable this feature, right-click on the current
-Fortran project folder (\textbf{not} the individual Fortran source file) in the
-Fortran Projects View and select ``Properties''. In the dialog that pops-up,
-navigate to Fortran General $>$ Analysis/Refactoring. Select the ``Enable
-Fortran Declaration view'' checkbox.
-
-Then, in a Fortran editor, click on an identifier (position the cursor over
-it), and press F3 (or click Navigate $>$ Open Declaration, or right-click and
-choose Open Declaration.) The binding will be resolved and the declaration
-highlighted. If there are multiple bindings, a pop-up window will open and one
-can be selected. If the identifier is bound to a declaration in a module defined
-in a different file, an editor will be opened on that file.
-
-\subsection{Visualizing Enclosing Scopes}
-
-Click on any token in the Fortran editor, and click Refactor $>$ (Debugging) $>$
-Select Enclosing Scope. The entire range of source text for that token's
-enclosing \texttt{ScopingNode} will be highlighted.
-
-\subsection{Visualizing Definitions}
-
-Open a file in the Fortran editor, and click Refactor $>$ (Debugging) $>$
-Display Symbol Table for Current File. Indentation shows scope nesting, and each
-line summarizes the information in a \texttt{Definition} object.
diff --git a/org.eclipse.photran-dev-docs/dev-guide/plugins.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/plugins.ltx-inc
deleted file mode 100644
index ff6fff3..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/plugins.ltx-inc
+++ /dev/null
@@ -1,155 +0,0 @@
-% Plug-in Decomposition
-\section{Introduction}
-
-This chapter presents a high-level overview of the different projects and
-plug-ins in Photran. It serves as a guide for developers reverse-engineering
-Photran to \emph{guess-and-locate} where certain components are. It also serves
-as a guide for contributers on \emph{where} to put their contributions.
-
-The following sections are grouped by feature. A feature is a collection of
-related Eclipse plug-ins that the user can install as a whole.
-
-\section{Base Photran Feature: \\org.eclipse.photran-feature}
-
-The following projects comprise the ``base'' of Photran. All sources in these projects are Java 4.
-
-\begin{itemize}
-
-\item \textbf{org.eclipse.photran.cdtinterface}
-
-This contains all of the components (core and user interface) related
-to integration with the CDT.  It includes:
-\begin{itemize}
-\item FortranLanguage for Fortran (i.e., the means of adding Fortran to the list
-of languages recognized by the CDT)
-\item Fortran model elements, and icons for the Outline and Projects Views
-\item \emph{Simple} lexical analyzer-based model builder and an extension
-point for contributing more sophisticated model builders
-\item Fortran perspective, Fortran Projects view, and new project wizards
-\end{itemize}
-
-For more information about CDT, see Chapter~\ref{cha:cdt}.
-
-\item \textbf{org.eclipse.photran.core}
-
-This is the Photran Core plug-in. It contains much of the Fortran-specific
-``behind the scenes'' functionality:
-
-\begin{itemize}
-\item Utility classes
-\item Error parsers for Fortran compilers
-\item Fortran 95 lexical analyzer
-\item Workspace preferences
-\end{itemize}
-
-\item \textbf{org.eclipse.photran.managedbuilder.core}, \\
-      \textbf{org.eclipse.photran.managedbuilder.gnu.ui}, \\
-      \textbf{org.eclipse.photran.managedbuilder.ui}
-
-Support for Managed Build projects using the GNU toolchain. Managed by Craig Rasmussen at LANL.
-
-\item \textbf{org.eclipse.photran.ui}
-
-This contains the Fortran-specific components of the user interface:
-
-\begin{itemize}
-\item Fortran Editors
-\item Preference pages
-\end{itemize}
-
-\end{itemize}
-
-\section{Virtual Program Graph (VPG) feature: \\org.eclipse.photran.vpg-feature}
-
-The following projects support parsing, analysis, and refactoring of Fortran
-sources. They are written in Java 5. The Virtual Program Graph is described in
-more detail in Chapter~\ref{cha:parsing}.
-
-\begin{itemize}
-
-\item \textbf{org.eclipse.photran.vpg.core}
-
-This contains the parsing, analysis, and refactoring infrastructure.
-\begin{itemize}
-\item Fortran parser and abstract syntax tree (AST)
-\item Fortran preprocessor (to handle INCLUDE lines)
-\item Parser-based model builder
-\item Virtual Program Graph library (vpg-eclipse.jar)
-\item Photran's Virtual Program Graph (VPG)
-\item Utility classes (e.g., \texttt{SemanticError}, \texttt{LineCol})
-\item Project property pages
-\item Binding analysis (equivalent to symbol tables)
-\item Refactoring/program transformation engine
-\item Refactorings
-\end{itemize}
-
-\item \textbf{org.eclipse.photran.core.vpg.tests}, \\
-      \textbf{org.eclipse.photran.core.vpg.tests.failing}
-
-JUnit Plug-in tests for the VPG core plug-in.
-
-All tests in org.eclipse.photran.core.vpg.tests should pass. Test suites and
-test cases are placed in the ``failing'' plug-in project until all of their
-tests pass.
-
-These plug-ins \textit{must} be run as a ``JUnit Plug-in Test'' (\textbf{not} a
-``JUnit Test''). In the launch configuration, the environment variable TESTING
-must be set to some non-empty value. (This ensures that the VPG will not try to
-run in the background and interfere with testing.)
-
-\item \textbf{org.eclipse.photran.ui.vpg}
-
-UI contributions that depend on the \texttt{org.eclipse.photran.core.vpg}
-plug-in. Currently, this includes (1) the Open Declaration action, a project
-property page where the user can customize the search path for Fortran modules
-and include files, and (2) all of the actions in the Refactoring menu. Search
-and other VPG-dependent features will be placed here in the future.
-
-\end{itemize}
-
-\section{XL Fortran Compiler Feature: \\org.eclipse.photran.xlf-feature}
-
-The following are plug-ins to support the
-\href{http://www-306.ibm.com/software/awdtools/fortran/}{XL Fortran compiler}.
-
-\begin{itemize}
-\item \textbf{org.eclipse.photran.core.errorparsers.xlf}, \\
-      \textbf{org.eclipse.photran.managedbuilder.xlf.ui}
-
-Support for Managed Build projects using XL toolchains. Managed by Craig
-Rasmussen at LANL.
-
-\end{itemize}
-
-\section{Intel Fortran Compiler Feature: \\org.eclipse.photran.intel-feature}
-
-The following are plug-ins to support the \href{http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284132.htm}{Intel Fortran Compiler}.
-
-\begin{itemize}
-\item \textbf{org.eclipse.photran.core.intel}, \\
-      \textbf{org.eclipse.photran.managedbuilder.intel.ui}
-
-Support for Managed Build projects using Intel toolchains. Maintained by Bill
-Hilliard at Intel.
-
-\end{itemize}
-
-\section{Non-plug-in projects}
-
-The following projects are in CVS but are not distributed to users:
-
-\begin{itemize}
-
-\item \textbf{org.eclipse.photran-dev-docs}
-
-Developer documentation, including this document (\texttt{dev-guide/*}), CVS
-instructions (\texttt{dev-guide/cvs-instructions.pdf}), the materials from our
-presentation at EclipseCon 2006 on adding a new language to the CDT, and a
-spreadsheet mapping features in the Fortran language to JUnit tests
-(\texttt{language-coverage/*}).
-
-\item \textbf{org.eclipse.photran-samples}
-
-A Photran project containing an assortment of Fortran code.
-
-\end{itemize}
diff --git a/org.eclipse.photran-dev-docs/dev-guide/refactoring.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/refactoring.ltx-inc
deleted file mode 100644
index 7425547..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/refactoring.ltx-inc
+++ /dev/null
@@ -1,333 +0,0 @@
-% Refactoring
-
-\section{Introduction}
-
-A refactoring is a program transformation to improve the quality of the source
-code by making it easier to understand and modify. A refactoring is a special
-kind of transformation because it preserves the \emph{observable behavior} of
-your program -- it neither removes nor adds any functionality.\footnote{For more
-information see
-\href{http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672}{Refactoring:
-Improving the Design of Existing Code}}.
-
-As mentioned in Chapter~\ref{cha:introduction}, the purpose in writing
-Photran was to create a refactoring tool for Fortran. Because Photran is
-structured as a plug-in for Eclipse, we can take advantage and reuse many of the
-language-neutral support that Eclipse provides for refactoring. This makes it
-possible to create refactoring tools that \emph{resemble} the Java Development
-Tools that most Eclipse programmers are already familiar with.
-
-However, implementing first-class support for Fortran refactoring is not an easy
-task. It requires having an accurate representation of the underlying Fortran
-source files so that our tools can perform proper program analysis to construct
-our automated refactoring. The VPG (see Chapter~\ref{cha:parsing}) is our
-initial step in providing such a representation; the VPG will be improved in
-future versions of Photran to provide support for many different types of
-refactoring and program analysis.
-
-In this chapter, we describe how to add automated refactorings for Fortran using
-the underlying infrastructure provided by Eclipse (and Photran) as well as the
-analysis tools provided by the VPG.
-
-\section{Structure of a Fortran Refactoring}
-\label{sec:structure_of_a_fortran_refactoring}
-
-Refactorings in Photran are subclassed from \texttt{FortranRefactoring}, which
-is in turn a subclass of the \texttt{Refactoring} class provided by the Eclipse
-Language ToolKit (LTK)\footnote{See
-\href{http://www.eclipse.org/articles/Article-LTK/ltk.html}{The Language
-Toolkit: An API for Automated Refactorings in Eclipse-based IDEs} for an
-introduction to the LTK.}.
-
-The LTK is a language-neutral API for supporting refactorings in the Eclipse
-environment. It provides a generic framework to support the following
-functionalities:
-\begin{enumerate}
-	\item Invoking the refactoring from the user interface (UI).
-	\item Presenting the user with a wizard to step through the refactoring.
-	\item Presenting the user with a preview of the changes to be made.
-\end{enumerate}
-
-In other words, the LTK provides a common UI for refactorings: This allows
-refactorings for Java, C/C++, and Fortran to all have the same look and feel.
-
-A concrete Fortran refactoring must implement the following \emph{four} methods:
-\\
-\begin{code}
-\begin{lstlisting}[numbers=none]
-public abstract String getName();
-
-protected abstract void doCheckInitialConditions(RefactoringStatus status,
-	IProgressMonitor pm) throws PreconditionFailure;
-
-protected abstract void doCheckFinalConditions(RefactoringStatus status,
-	IProgressMonitor pm) throws PreconditionFailure;
-
-protected abstract void doCreateChange(IProgressMonitor pm) throws
-	CoreException, OperationCanceledException;
-\end{lstlisting}
-\caption{Abstract methods of \texttt{FortranRefactoring} class}
-\label{lst:FortranRefactoring_API}
-\end{code}
-
-\texttt{getName} simply returns the name of the refactoring: ``Rename,''
-``Extract Subroutine,'' ``Introduce Implicit None,'' or something similar. This
-name will be used in the title of the wizard that is displayed to the user.
-
-Initial conditions are checked before any wizard is displayed to the user. An
-example would be making sure that the user has selected an identifier to rename.
-If the check fails, a \texttt{PreconditionFailure} should be thrown with a
-message describing the problem for the user.
-
-Final conditions are checked after the user has provided any input. An example
-would be making sure that the new name that that user has provided is a legal
-identifier.
-
-The actual transformation is done in the \texttt{doCreateChange} method, which
-will be called only after the final preconditions are checked. For more information, see Section~\ref{sec:ast_rewriting}.
-
-The \texttt{FortranRefactoring} class provides a large number of
-\texttt{protected} utility methods common among refactorings, such as a method
-to determine if a token is a uniquely-bound identifier, a method to parse
-fragments of code that are not complete programs, and a \texttt{fail} method
-which is simply shorthand for throwing a \texttt{PreconditionFailure}. It is
-worth reading through the source code for \texttt{FortranRefactoring} before
-writing your own utility methods.
-
-\section{Creating Changes: AST Rewriting}
-\label{sec:ast_rewriting}
-
-After determining the files that are affected and the actual changes that are
-required for a particular refactoring, manipulating the source code in the
-\texttt{doCreateChange} method is conceptually straightforward.
-
-Instead of manipulating the text in the files directly (by doing a textual find
-\& replace) we use a more scalable approach: manipulating the Abstract Syntax
-Tree (AST) of the source code. This allows us to make changes based on the
-program's semantics and its syntactic structure. This section assumes some
-familiarity with the AST used in Photran. For more information about the AST,
-refer to Section~\ref{sec:virtual_program_graph}.
-
-\subsection{Common Methods for Manipulating the AST}
-
-In the following paragraphs, we describe some of the approaches that are
-currently being used in Photran for manipulating the AST.
-
-\subsubsection{Changing the Text of \texttt{Token}s}
-
-To change the text of a single token, simply call its \texttt{setText} method.
-This is used in \texttt{RenameRefactoring} to rename tokens while preserving the
-``shape'' of the AST.
-\\
-\begin{code}
-\begin{lstlisting}[firstnumber=273, emph={setText}]
-private void makeChangesTo(IFile file, IProgressMonitor pm) throws Error
-{
-	try
-	{
-    vpg.acquirePermanentAST(file);
-   
-    if (definitionToRename.getTokenRef().getFile().equals(file))
-        definitionToRename.getTokenRef().findToken().setText(newName);
-   
-    for (PhotranTokenRef ref : allReferences)
-        if (ref.getFile().equals(file))
-            ref.findToken().setText(newName);
-   
-    addChangeFromModifiedAST(file, pm);
-   
-    vpg.releaseAST(file);
-	}
-	catch (Exception e)
-	{
-		throw new Error(e);
-	}
-}	
-\end{lstlisting}
-\caption{Use of \texttt{setText} in \texttt{RenamingRefactoring} (see
-RenameRefactoring.java)}
-\end{code}
-
-\subsubsection{Removing/replacing AST Nodes}
-\label{ssub:removing_replacing_AST}
-
-To remove or replace part of an AST, call \texttt{replaceChild},
-\texttt{removeFromTree} or \texttt{replaceWith} on the node itself. These 
-methods are defined in the \texttt{IASTNode} interface that all nodes implement. 
-Line 107 of Listing~\ref{lst:introimplicitnone_doChange} shows an example of the
-\texttt{removeFromTree} method.
-\\
-
-\begin{code}
-\begin{lstlisting}[firstnumber=7236]
-public static interface IASTNode
-{
-	void replaceChild(IASTNode node, IASTNode withNode);
-	void removeFromTree();
-	void replaceWith(IASTNode newNode);
-	...
-}
-\end{lstlisting}
-\caption{AST manipulation methods in \texttt{IASTNode} (see Parser.java) that
-all AST nodes implement}
-\end{code}
-
-In addition, if the \emph{specific} type of the AST is known, then it is
-possible to just call its \emph{setter} method to directly replace particular
-nodes. For more information on the available setters for each node type, see
-Section~\ref{sub:ordinary_ast_nodes}.
-
-\subsubsection{Inserting new AST Nodes} 
-
-Some refactorings require inserting new AST nodes into the current program. For
-instance, the ``Intro Implicit None Refactoring'' inserts new declaration
-statements to make the type of each variable more explicit.
-
-There are \emph{three} steps involved in inserting a new AST node:
-\begin{enumerate}
-	\item Constructing the new AST node.
-	\item Inserting the new AST node into the correct place.
-	\item Re-indenting the new AST node to fit within the current file.
-\end{enumerate}
-
-\paragraph{Constructing the new AST node} The \texttt{FortranRefactoring} class
-provides convenience methods for constructing new AST nodes. These methods
-should be treated as part of the API for Fortran refactorings . For instance,
-the \texttt{parseLiteralStatement} methods constructs a list of AST nodes for 
-use in the ``Intro Implicit None'' refactoring.
-
-\paragraph{Inserting the new AST node} Inserting the new AST node can be
-accomplished using the approach discussed previously in \emph{Removing/replacing AST Nodes}.
-
-\paragraph{Re-indenting the new AST node} It might be necessary to re-indent the
-newly inserted AST node so that it conforms with the indentation at its
-insertion point. The \texttt{Reindenter} utility class provides the static
-method \texttt{reindent} to perform this task. Refer to line 111 of
-Listing~\ref{lst:introimplicitnone_doChange}.
-\\
-
-\begin{code}
-\begin{lstlisting}[firstnumber=95,
-emph={removeFromTree, addChangeFromModifiedAST, Reindenter}]
-protected void doCreateChange(IProgressMonitor progressMonitor) throws 
-CoreException, OperationCanceledException
-{
-	assert this.selectedScope != null;
-	
-	for (ScopingNode scope : selectedScope.getAllContainedScopes())
-	{
-		if (!scope.isImplicitNone() 
-			&& !(scope instanceof ASTExecutableProgramNode) 
-			&& !(scope instanceof ASTDerivedTypeDefNode))
-		{
-			ASTImplicitStmtNode implicitStmt = findExistingImplicitStatement(scope);
-			if (implicitStmt != null) implicitStmt.removeFromTree();
-	        
-			IASTListNode<IBodyConstruct> newDeclarations = constructDeclarations(scope);
-			scope.getBody().addAll(0, newDeclarations);
-			Reindenter.reindent(newDeclarations, astOfFileInEditor);
-		}
-	}
-			
-	this.addChangeFromModifiedAST(this.fileInEditor, progressMonitor);
-	vpg.releaseAllASTs();
-}	
-\end{lstlisting}
-\caption{Inserting new declarations into an existing scope
-(see \texttt{IntroImplicitNoneRefactoring.java})}
-\label{lst:introimplicitnone_doChange}
-\end{code}
-
-\subsection{Committing Changes}
-
-After all of the changes have been made to a file's AST,
-\texttt{addChangeFromModifiedAST} has to be invoked to actually
-commit the changes. This convenience function creates a new
-\texttt{TextFileChange} for the \emph{entire} content of the file. The
-underlying Eclipse infrastructure performs a \texttt{diff} internally to
-determine what parts have actually changed and present those changes to the user
-in the preview dialog.
-
-\section{Caveats}
-\label{sec:refactoring_caveats}
-
-\textbf{CAUTION:} Internally, the AST is changed only enough to reproduce
-correct source code. After making changes to an AST, most of the accessor
-methods on \texttt{Token}s (\texttt{getLine(), getOffset(),} etc.) will return
-\textit{incorrect} or \emph{null} values.
-
-Therefore, \textit{all program analysis should be done first}; pointers to all
-relevant \textbf{tokens} should be obtained (usually as \texttt{TokenRef}s)
-\textit{prior} to making any modifications to the AST. In general, ensure that
-all analysis (and storing of important information from \texttt{Token}s) should
-be done in the \texttt{doCheckInitialConditions} and
-\texttt{doCheckFinalConditions} methods of your refactoring before the
-\texttt{doCreateChange} method.
-
-\vspace{-0.2in}
-\subsection{\texttt{Token} or \texttt{TokenRef}?}
-\label{sub:token_or_tokenref}
-
-\texttt{Token}s form the leaves of the AST -- therefore they exist as part of
-the Fortran AST. Essentially this means that holding on to a reference to a
-\texttt{Token} object requires the entire AST to be present in memory.
-
-\texttt{TokenRef}s are lightweight descriptions of tokens in an AST. They
-contain only three fields: filename, offset and length. These three fields
-uniquely identify a particular token in a file. Because they are not part of the
-AST, storing a \texttt{TokenRef} does not require the entire AST to be present
-in memory.
-
-For most refactorings, using either \texttt{Token}s or \texttt{TokenRef}s does
-not make much of a difference. However, in a refactoring like ``Rename
-Refactoring'' that could potentially modify hundreds of files, it is impractical
-to store all ASTs in memory at once. Because of the complexity of the Fortran
-language itself, its ASTs can be rather large and complex. Therefore storing
-references to \texttt{TokenRef}s would minimize the number of ASTs that must be
-in memory.
-
-To retrieve an actual \texttt{Token} from a \texttt{TokenRef}, call the
-\texttt{findToken()} method in \texttt{PhotranTokenRef}, a subclass
-of \texttt{TokenRef}.
-
-To create a \texttt{TokenRef} from an actual \texttt{Token}, call the \texttt{getTokenRef} method in \texttt{Token}.
-
-\vspace{-0.2in}
-\section{Examples}
-
-The ``Rename'', ``Introduce Implicit None'' and ``Move COMMON To Module''
-refactorings found in the \texttt{org.eclipse.photran.internal.core.refactoring}
-package inside the \texttt{org.eclipse.photran.core.vpg} project are
-non-trivial but readable and should serve as a model for building future Fortran
-refactorings.
-
-An example of a simpler but rather \emph{useless} refactoring is presented in
-Appendix~\ref{app:obfuscate_refactoring}. It should be taken as a guide on the
-actual steps that are involved in registering a new refactoring with the UI and
-also how to actually construct a working Fortran refactoring.
-
-\section{Common Tasks}
-
-In this section, we briefly summarize some of the common tasks involved in
-writing a new Fortran refactoring.
-
-\noindent \textbf{In an AST, how do I find an ancestor node that is of a
-particular type?}
-\\ Sometimes it might be necessary to traverse the AST \emph{upwards} to look
-for an ancestor node of a particular type. Instead of traversing the AST
-manually, you should call the \texttt{findNearestAncestor(TargetASTNode.class)}
-method on a \texttt{Token} and pass it the \textbf{class} of the ASTNode that
-you are looking for.
-
-\noindent \textbf{How would I create a new AST node from a string?} 
-\\ Call the \texttt{parseLiteralStatement(String string)} or
-\texttt{parseLiteralStatementSequence(String string)} method in
-\texttt{FortranRefactoring}. The former takes a \texttt{String} that represents
-a single statement while the latter takes a \texttt{String} that represents a
-sequence of statements.
-
-\noindent \textbf{How do I print the text of an AST node and all its children
-nodes?}
-\\ Call the \texttt{SourcePrinter.getSourceCodeFromASTNode(IASTNode node)}
-method. This method returns a \texttt{String} representing the source code of
-its parameter; it includes the user's comments, capitalization and whitespace.
diff --git a/org.eclipse.photran-dev-docs/eclipse-config/photran-code-formatter-settings.xml b/org.eclipse.photran-dev-docs/eclipse-config/photran-code-formatter-settings.xml
deleted file mode 100755
index c98606f..0000000
--- a/org.eclipse.photran-dev-docs/eclipse-config/photran-code-formatter-settings.xml
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<profiles version="8">
-<profile name="Jeff" version="8">
-<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="20"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="18"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="20"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="20"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="20"/>
-<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/>
-<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
-<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
-<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
-<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
-<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
-<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
-</profile>
-</profiles>
diff --git a/org.eclipse.photran-dev-docs/eclipse-config/photran-ibm-codetemplates.xml b/org.eclipse.photran-dev-docs/eclipse-config/photran-ibm-codetemplates.xml
deleted file mode 100644
index 4d6c3b4..0000000
--- a/org.eclipse.photran-dev-docs/eclipse-config/photran-ibm-codetemplates.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><templates><template autoinsert="true" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
- * @return the ${bare_field_name}
- */</template><template autoinsert="true" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment">/**
- * @param ${param} the ${bare_field_name} to set
- */</template><template autoinsert="true" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
- * ${tags}
- */</template><template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/*******************************************************************************
- * Copyright (c) ${year} IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    IBM Research - Initial API and implementation
- *******************************************************************************/</template><template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
- * 
- * @author ${user}
- */</template><template autoinsert="true" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
- * 
- */</template><template autoinsert="true" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
- * ${tags}
- */</template><template autoinsert="true" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment">/* (non-Javadoc)
- * ${see_to_overridden}
- */</template><template autoinsert="true" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
- * ${tags}
- * ${see_to_target}
- */</template><template autoinsert="true" context="newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">${filecomment}
-${package_declaration}
-
-${typecomment}
-${type_declaration}</template><template autoinsert="true" context="classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.classbody" name="classbody">
-</template><template autoinsert="true" context="interfacebody_context" deleted="false" description="Code in new interface type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name="interfacebody">
-</template><template autoinsert="true" context="enumbody_context" deleted="false" description="Code in new enum type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.enumbody" name="enumbody">
-</template><template autoinsert="true" context="annotationbody_context" deleted="false" description="Code in new annotation type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name="annotationbody">
-</template><template autoinsert="true" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
-${exception_var}.printStackTrace();</template><template autoinsert="true" context="methodbody_context" deleted="false" description="Code in created method stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody">// ${todo} Auto-generated method stub
-${body_statement}</template><template autoinsert="true" context="constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
-// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template></templates>
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/eclipse-config/photran-uiuc-codetemplates.xml b/org.eclipse.photran-dev-docs/eclipse-config/photran-uiuc-codetemplates.xml
deleted file mode 100644
index 03a2384..0000000
--- a/org.eclipse.photran-dev-docs/eclipse-config/photran-uiuc-codetemplates.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><templates><template autoinsert="true" context="gettercomment_context" deleted="true" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
- * @return the ${bare_field_name}
- */</template><template autoinsert="true" context="settercomment_context" deleted="true" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment">/**
- * @param ${param} the ${bare_field_name} to set
- */</template><template autoinsert="true" context="constructorcomment_context" deleted="true" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
- * ${tags}
- */</template><template autoinsert="false" context="filecomment_context" deleted="true" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/*******************************************************************************
- * Copyright (c) ${year} University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/</template><template autoinsert="false" context="typecomment_context" deleted="true" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
- * 
- * @author ${user}
- */</template><template autoinsert="true" context="fieldcomment_context" deleted="true" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
- * 
- */</template><template autoinsert="true" context="methodcomment_context" deleted="true" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
- * ${tags}
- */</template><template autoinsert="true" context="overridecomment_context" deleted="true" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment">/* (non-Javadoc)
- * ${see_to_overridden}
- */</template><template autoinsert="true" context="delegatecomment_context" deleted="true" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
- * ${tags}
- * ${see_to_target}
- */</template><template autoinsert="true" context="newtype_context" deleted="true" description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">${filecomment}
-${package_declaration}
-
-${typecomment}
-${type_declaration}</template><template autoinsert="true" context="classbody_context" deleted="true" description="Code in new class type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.classbody" name="classbody">
-</template><template autoinsert="true" context="interfacebody_context" deleted="true" description="Code in new interface type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name="interfacebody">
-</template><template autoinsert="true" context="enumbody_context" deleted="true" description="Code in new enum type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.enumbody" name="enumbody">
-</template><template autoinsert="true" context="annotationbody_context" deleted="true" description="Code in new annotation type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name="annotationbody">
-</template><template autoinsert="true" context="catchblock_context" deleted="true" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
-${exception_var}.printStackTrace();</template><template autoinsert="true" context="methodbody_context" deleted="true" description="Code in created method stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody">// ${todo} Auto-generated method stub
-${body_statement}</template><template autoinsert="true" context="constructorbody_context" deleted="true" description="Code in created constructor stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
-// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="getterbody_context" deleted="true" description="Code in created getters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="true" description="Code in created setters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template></templates>
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/fortran-nature/Bugzilla-info.txt b/org.eclipse.photran-dev-docs/fortran-nature/Bugzilla-info.txt
deleted file mode 100644
index a283e06..0000000
--- a/org.eclipse.photran-dev-docs/fortran-nature/Bugzilla-info.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Submitted by Matt Scarpino - mattscar@yahoo.com or matt.scarpino@eclipseengineer.com
-2009-07-18
-https://bugs.eclipse.org/bugs/show_bug.cgi?id=277879
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/fortran-nature/README.txt b/org.eclipse.photran-dev-docs/fortran-nature/README.txt
deleted file mode 100644
index 4eeb6cb..0000000
--- a/org.eclipse.photran-dev-docs/fortran-nature/README.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-The submitted patch serves two purposes: it assigns an 'F' icon to all Fortran source files (*.f, *.f77, etc.) and assigns a project nature image for Fortran projects. This is shown in the attached screenshot.
-
-The first part is easy to understand. The Fortran file navigator (represented by org.eclipse.photran.cdtinterface.ui.FortranView), uses a label provider to assign text/images to resources in the workspace. The CDT view uses a CViewLabelProvider for this, and I created a subclass called FViewLabelProvider. This checks the suffix of source files in the Fortran navigator and assigns f_file_obj.gif to any Fortran files.
-
-The second part is more involved. To ensure that Fortran projects can be distinguished from other projects, I took the following steps:
-
-1. Created a class called org.eclipse.photran.core.FProjectNature, which is essentially a copy of the CDT's CProjectNature. Defined an extension for the nature (org.eclipse.core.resources.natures) in plugin.xml.
-
-2. Defined an extension for org.eclipse.ui.ide.projectNatureImages in org.eclipse.photran.ui. This tells Eclipse to display the Fortran project icon (f_ovr.gif) whenever a project's *first* nature is org.eclipse.photran.core.fnature.
-
-3. Added code to FortranProjectWizard so that all Photran created projects have Fortran nature in addition to C nature. Added a lot of code so that this nature is the project's *first* nature. This doesn't affect any of the other natures, but it ensures that the Fortran icon will be displayed whenever the project is shown.
-
-Two last notes. The FViewLabelProvider only works if f_file_obj.gif is placed in the icons folder in the org.eclipse.photran.cdtinterface plug-in. I created my own icon for the project nature (f_ovr.gif), and it must be placed in the icons/full/obj16 folder in the org.eclipse.photran.ui plug-in.
-
-If you have any questions or comments, please e-mail me at matt.scarpino@eclipseengineer.com.
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/fortran-nature/screenshot.gif b/org.eclipse.photran-dev-docs/fortran-nature/screenshot.gif
deleted file mode 100644
index 3713050..0000000
--- a/org.eclipse.photran-dev-docs/fortran-nature/screenshot.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/language-coverage/Fortran 95 Feature Coverage.xls b/org.eclipse.photran-dev-docs/language-coverage/Fortran 95 Feature Coverage.xls
deleted file mode 100644
index 2ed49b2..0000000
--- a/org.eclipse.photran-dev-docs/language-coverage/Fortran 95 Feature Coverage.xls
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/misc-notes/cdt-outline-view-icons.txt b/org.eclipse.photran-dev-docs/misc-notes/cdt-outline-view-icons.txt
deleted file mode 100644
index 74a6013..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/cdt-outline-view-icons.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-How do icons make their way into the CDT Outline view?
-
-The Outline view basically displays one translation unit's (file's) part
-of the CModel (ICElement hierarchy).  The icons displayed are based on
-the types of the individual ICElements in the hierarchy (see
-ICElement.getElementType()).
-
-CContentOutlinePage creates a DecoratingCLabelProvider around a
-StandardCElementLabelProvider, which inherits from an
-AppearanceAwareLabelProvider, which inherits from CUILabelProvider,
-which uses a CElementImageProvider to load icons from the resource bundle
-for the UI plugin by creating URLs to the individual icons.
-
-See CElementImageProvider#getImageLabel, which calls
-getCImageDescriptor, which calls getBaseImageDescriptor, which is where
-there lies a giant case statement lies, which returns the ImageDescriptor.
-
---JO 6/28/05
diff --git a/org.eclipse.photran-dev-docs/misc-notes/cs427fa08-mp5-summary.pdf b/org.eclipse.photran-dev-docs/misc-notes/cs427fa08-mp5-summary.pdf
deleted file mode 100644
index 0c95543..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/cs427fa08-mp5-summary.pdf
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-dev-docs/misc-notes/fixed-form-note-from-dirk.txt b/org.eclipse.photran-dev-docs/misc-notes/fixed-form-note-from-dirk.txt
deleted file mode 100644
index 8a12358..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/fixed-form-note-from-dirk.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-From: Dirk Rossow <rossow@foni.net>
-Date: 04/19/2005 01:00 PM
-
-Subject: FixedFormParser
-
-
-Hi Jeff,
-
-i have worked on the fixed form lexer and sending you my first results. It
-looks very promising that far. The details:
-
-FixedFormLexerPrepass preprocesses the input stream. It discards all
-whitespaces and comment lines and concatenates continuation lines.
-Additional it holds a mapping to the character-positions in the file (for
-correct start/end line/col in the Token objects).
-
-The modified InputStream is feed to FixedFormLexerPhase1, which is a
-modified copy of your FreeFormLexerPhase1. The mods are:
-
-Handling of hollerith constants (This is missing in your
-FreeFormLexerPhase1)
-A new state which is active at the start of line. Needed this for
-hollerith-handling
-A new state for IDENT-matching. It only gets active if no keyword matches. I
-added this because there are no whitespaces delimiting the tokens and for
-example callsubname needs to get matched as T_CALL T_IDENT. So the lexer
-tries first to match a token ignoring IDENTs. If there is no match, an IDENT
-is matched and returned.
-
-
-FixedFormLexerPhase1 feeds FixedFormLexerPhase2, which uses your
-FreeFormLexerPhase2.
-After your phase2lexer has processed the tokens, it checks if IDENT-Tokens
-need to get concatenated. This can happen if for example:
-callsubname=0
-T_CALL T_IDENT T_EQUAL T_ICON
-gets converted by your phase2lexer to
-T_IDENT T_IDENT T_EQUAL T_ICON
-
-Finally i modified your FreeFormLexerPhase2 and the generated Parser to
-support different Lexers. I simply added an Interface Ilexer.
-
-I did not commit anything to the repository, i thought you first want to
-have a look.
-There are still some bugs in the FreeFormLexerPhase2. You can find examples
-for them in the fixedTestFiles/regressionTestFiles folder. They are
-slashesInFormat.f, statusEqAfterIf.f, typeSpecAsIdent.f and impliedLoop.f.
-
-I added some of our fortran-code for testing my work, please dont add it to
-the repository.
-
-I hope my explanations are understandable and you like what i did :-) Dont
-hesitate to contact me if you have questions.
-
-Have a nice day
-  Dirk
diff --git a/org.eclipse.photran-dev-docs/misc-notes/links.txt b/org.eclipse.photran-dev-docs/misc-notes/links.txt
deleted file mode 100644
index 193aa56..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/links.txt
+++ /dev/null
@@ -1 +0,0 @@
-http://wiki.eclipse.org/Development_Conventions_and_Guidelines
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/deployment.txt b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/deployment.txt
deleted file mode 100644
index e72669a..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/deployment.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-% removed from app-cvs.ltx-inc
-
-\vspace{1em}
-\noindent\textbf{Part~IV. Deploying Photran Feature}
-\begin{enumerate}
-	\setcounter{enumi}{\value{running_counter}}
-	\item If you are interested in creating a \emph{deployable feature} for
-        Photran, you also need to check out these \textbf{additional} four 
-        projects from CVS:
-				\begin{itemize}
-					\item org.eclipse.photran-feature
-          \item org.eclipse.photran.intel-feature
-					\item org.eclipse.photran.vpg-feature
-					\item org.eclipse.photran.xlf-feature
-				\end{itemize}
-	\item In Eclipse, select File $>$ Export\ldots
-	\item In the dialog that pops-up, select Plug-in Development $>$ Deployable features.
-	\item Click next.
-	\item In the list, select
-		\begin{itemize}
-			\item org.eclipse.photran\_feature (4.0.4)
-			\item org.eclipse.photran.intel (4.0.4)
-			\item org.eclipse.photran.vpg\_feature (4.0.4)
-			\item org.eclipse.photran.xlf\_feature (4.0.4)
-		\end{itemize}		
-	\item Specify a destination folder to export those features. Click Finish.
-	\item The Photran features are ready for deployment.
-\end{enumerate}
\ No newline at end of file
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-03-cdt.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-03-cdt.tex
deleted file mode 100644
index d9a7cf5..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-03-cdt.tex
+++ /dev/null
@@ -1,191 +0,0 @@
-% CDT Integration
-
-Previous versions of Photran were developed by hacking the CDT: essentially,
-we made the user interface say ``Fortran'' instead of ``C/C++,'' we replaced the
-model builder (which creates the Outline view, among other things) with one
-that ran a Fortran parser, we changed the list of file extensions, and we
-modified the syntax highlighting code to recognize Fortran comments and
-keywords.
-
-Starting with Photran 3.0, we are taking a fundamentally different approach:
-\begin{itemize}
-\item We rename the C/C++ Perspective to the Make Perspective.  We replace
-the four project types (C Standard Make Project, C++ Standard Make Project,
-C Managed Make Project, and C++ Managed Make Project) with two generic
-project types (Standard Make Project and Managed Make Project).  We also
-change the launcher's menu item to read ``Run Local Application'' rather
-than ``Run Local C Application.''  These are all superficial changes
-(i.e., changes to labels and icons, not to the underlying code).  The
-Make project types use the natures formerly used for C projects.
-\item We add an extension point to the CDT which allows it to recognize
-other languages besides C and C++.
-\end{itemize}
-
-\section{Integrating with the CDT: The \texttt{AdditionalLanguages}
-            Extension Point}
-
-The org.eclipse.photran.xyzsamplelang project is a simple example of how
-to integrate a new language into the CDT.  Its README is included in an
-appendix.
-
-Essentially, the process of integrating a new language into the CDT works
-as follows:
-\begin{itemize}
-
-\item Create a new plug-in with an editor.  (Obviously, you will eventually
-want to customize the editor for your language.)
-
-\item For each filename extension supported by your editor (i.e., each
-filename extension for files in your language), declare a (text) content type.
-\begin{verbatim}
-   <extension point="org.eclipse.core.runtime.contentTypes">
-      <content-type id="xyzSource" name="XYZ Language Source File"
-            base-type="org.eclipse.core.runtime.text"
-            priority="high"/>
-      <file-association
-            content-type="xyzSource"
-            file-extensions="xyz"/>
-   </extension>
-\end{verbatim}
-
-\item Specify org.eclipse.cdt.core as a dependency of your plug-in, and
-declare in your \texttt{plugin.xml} that you are extending the
-org.eclipse.cdt.core.AdditionalLanguages extension point.
-\begin{verbatim}
-   <extension point="org.eclipse.cdt.core.AdditionalLanguages">
-      <language class="addl_langs.XYZLanguage"/>
-   </extension>
-\end{verbatim}
-You must provide the fully-qualified name of a class
-(\texttt{addl\_langs.XYZLanguage}, in this case which implements the
-\texttt{org.eclipse.cdt.core.addl\_langs.IAdditionalLanguage} interface.
-
-\item Fill in the definition of that class.  See the JavaDoc in
-\texttt{IAdditionalLanguage} for more information.
-\begin{itemize}
-\item \texttt{getName} just returns the name of the language
-(Fortran, XYZ Sample Language, etc.)
-\item \texttt{getRegisteredContentTypeIds} returns a list of all of
-the content types you declared above.  The content type names must
-be fully qualified, i.e., the name of the plug-in followed by the name
-of the content type, e.g., \texttt{XyzLanguagePlugIn.xyzSource}
-or \texttt{org.eclipse.photran.core.fortranSource}.
-\item \texttt{createModelBuilder} returns a model builder for your
-language.  Look at the \texttt{ToyModelBuilder} in the XYZ Sample Language
-project for a (trivial) example of how a model builder works, and
-see the JavaDoc for \texttt{IModelBuilder} for a more complete description.
-In essence,
-\begin{itemize}
-\item It must implement \texttt{IModelBuilder}.
-\item Its constructor takes a \texttt{TranslationUnit}, i.e., the file
-for which a model needs to be created.
-\item The \texttt{parse} method return a Map taking
-\texttt{ICElement}s to \texttt{CElementInfo}s, which contains all of the
-elements that should appear in the Outline for the translation unit
-specified in the constructor.  Use can either reuse the various implementations
-of \texttt{ICElement} in the CDT (\texttt{Macro, Namespace,
-FunctionDeclaration,} etc.), or you can create your own (with their own
-icons) by implementing \texttt{IAdditionalLanguageElement}.
-\end{itemize}
-\end{itemize}
-
-\item In the constructor for your editor, use the CDT UI plug-in's document
-provider rather than your own, i.e.,
-\begin{verbatim}
-setDocumentProvider(CUIPlugin.getDefault().getDocumentProvider());
-\end{verbatim}
-
-\item Since you don't have your own document provider anymore, set up
-your partitioner by overriding
-\begin{verbatim}
-protected void doSetInput(IEditorInput input)
-\end{verbatim}
-and setting it up there.
-
-\item Reuse the Outline page provided by CDT by copying the following
-field and methods from \texttt{FortranEditor} into
-your editor (notice that we are passing \texttt{null} into the
-constructor for \texttt{CEditorOutlinePage}; this doesn't seem to hurt
-anything):
-\begin{verbatim}
-    protected CContentOutlinePage fOutlinePage;
-
-    public Object getAdapter(Class required) { ... }
-
-    public CContentOutlinePage getOutlinePage() { ... }
-
-    public static void setOutlinePageInput(CContentOutlinePage page,
-            IEditorInput input) { ... }
-\end{verbatim}
-
-\item If you want your editor to jump to the correct location when something
-is selected in the Outline view, it needs to implement
-\texttt{ISelectionChangedListener}.  (If you don't require this, remove
-the line ``\texttt{fOutlinePage.addSelectionChangedListener(this);}''
-from the code copied above.)  We implemented \texttt{ISelectionChangedListener}
-by copying the following methods verbatim from \texttt{CEditor}:
-\begin{verbatim}
-    public void selectionChanged(SelectionChangedEvent event) { ... }
-
-    private boolean isActivePart() { ... }
-
-    public void setSelection(ISourceRange element, boolean moveCursor) { ... }
-\end{verbatim}
-
-\item If you want to be able to set breakpoints in your editor, add this
-line to the constructor for your editor class:
-\begin{verbatim}
-    // JO: This gives you a "Toggle Breakpoint" action (and others)
-    // when you right-click the Fortran editor's ruler
-    setRulerContextMenuId("#CEditorRulerContext"); //$NON-NLS-1$
-\end{verbatim}
-
-\item If you want the CDT's Refactor menu to appear in your editor, add this
-line to the constructor for your editor class:
-\begin{verbatim}
-    // JO: This will put the Refactor menu in the editor's
-    // context menu, among other things
-    setEditorContextMenuId("#CEditorContext"); //$NON-NLS-1$
-\end{verbatim}
-
-\end{itemize}
-
-\section{Photran-CDT Integration}
-
-Photran is integrated into the CDT in the same way described above.
-\begin{itemize}
-
-\item The Photran Core plug-in
-defines a class \texttt{FortranLanguage}, which implements
-\texttt{IAdditionalLanguage}, and hooks it into the (new)
-\texttt{AdditionalLanguages} extension point in the CDT core.
-
-\item Photran's Core plugin.xml defines a content type
-\texttt{org.eclipse.photran.core.fortranSource}; \texttt{FortranLanguage}
-notifies the CDT that we want it to treat this content type as a valid
-source language.
-
-\item We provide a \texttt{FortranModelBuilder}, which
-runs our Fortran parser over a source file to create a CDT-compatible
-model.
-
-\begin{itemize}
-
-\item Rather than using the CDT's model elements, we provide our own
-model elements, which are all subclasses of \texttt{FortranElement}.
-(\texttt{FortranElement} implements \texttt{IAdditionalLanguageElement}.)
-
-\item The icons corresponding to \texttt{FortranElement}s
-are stored in the org.eclipse.photran.cdtinterface plug-in.\footnote{
-The Photran UI plug-in would be the logical place to store these icons.
-However, the UI already has the Core as a dependency.  The icon requests
-come from the \texttt{FortranElement}s in the Core, so if they had to be
-retrieved from the UI, we would introduce a circular dependency.  So we put
-them in their own plug-in.}
-
-\end{itemize}
-
-\item The Core plug-in also contributes several error parsers,
-which are described in the next section.
-
-\end{itemize}
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-06-parser.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-06-parser.tex
deleted file mode 100644
index 8a0cf42..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-06-parser.tex
+++ /dev/null
@@ -1,185 +0,0 @@
-% The Photran Lexers and Parser
-
-The Fortran 95 lexers and parser are stored in the org.eclipse.photran.parser
-project.  Because this project takes several minutes and a lot of memory
-(600-800 MB) to compile, it is exported as a (non-sealed) JAR archive,
-\texttt{f95parser.jar}, which is stored in the Core plug-in.  The Core,
-Managed Builder, and UI use classes from this JAR file, not from the
-org.eclipse.photran.parser project.  So you do \textit{not} need the
-org.eclipse.photran.parser project in your workspace unless you will be
-regenerating this JAR file.
-
-\section{Accessing the Lexers and Parser from Photran: The
-         \texttt{FortranProcessor}}
-
-(The following does \textit{not} apply to JUnit tests.)
-
-To scan or parse a file, or to build a symbol table from a parse tree,
-create a \texttt{FortranProcessor} and use it.  It knows how to distinguish
-between fixed and free form file extensions based on the user's workspace
-preferences and can determine whether or not parser debugging has been
-enabled (also in the workspace preferences).
-
-Examples:
-\begin{itemize}
-\item Parsing a file: See \texttt{FortranModelBuilder\#parse}
-\item Lexing a file without parsing:
-      See \texttt{FortranPartitionScanner\#documentChanged}
-\item Creating a symbol table after a file has been parsed:
-      (TODO-Jeff: No good examples yet)
-\end{itemize}
-
-\section{Structure of the Lexers and Parser}
-
-Unfortunately, Fortran is not an easy language to process.  It has two
-\textit{source forms,} and keywords are not reserved (so it's fine to call a
-variable ``if'').  This greatly complicates lexical analysis.  To make
-things as simple as possible, we have separated the lexical analysis into
-several phases, depending on whether the input is in free form or fixed
-form.
-
-When a free form source file is being parsed...
-\begin{itemize}
-
-\item \texttt{FreeFormLexerPhase1}, which is generated from
-\texttt{FreeFormLexerPhase1.flex} by JFlex, splits the input into tokens.
-Tokens such as ``if,'' ``do,'' ``len=,'' etc. are labeled as keywords,
-even if they are being used as identifiers (it doesn't know any better).
-
-\item \texttt{FreeFormLexerPhase2} reads the token stream from
-\texttt{FreeFormLexerPhase1} and buffers an entire statement worth of
-tokens.  It then uses Sale's algorithm and an elaborate set of rules
-(specified in the method \texttt{buildAdditionalRules}) to determine which
-keyword tokens should be kept as keywords and which ones should actually
-be identifiers.  In the case of ``keywords'' with an equal sign on the end
-(such as ``len=''), if that token should really be an identifier, it is
-split into two tokens: the identifier ``len'' and the = token T\_EQUALS.
-
-\item The \texttt{Parser}, which is generated from \texttt{Fortran95.bnf}
-by my parser generator, reads the tokens from \texttt{FreeFormLexerPhase2}
-and parses the token stream, returning a parse tree.  The parse tree is
-described in more detail later.
-
-\end{itemize}
-
-When a fixed form source file is being parsed...
-\begin{itemize}
-
-\item \texttt{FixedFormLexerPrepass} discards whitespace and comments
-and concatenates continuation lines.
-
-\item \texttt{FixedFormLexerPhase1}, which is generated from
-\texttt{FreeFormLexerPhase1.flex} by JFlex, splits the input into tokens.
-Essentially, it is identical to \texttt{FreeFormLexerPhase1}, except that
-there are no rules for whitespace, comments, or line continuations.
-
-\item \texttt{FreeFormLexerPhase2} reads the token stream from
-\texttt{FixedFormLexerPhase1}, resolving identifiers as it does for free form
-input.
-
-\item \texttt{FixedFormLexerPhase2} reads the token stream from
-\texttt{FreeFormLexerPhase2} and concatenates consecutive identifiers.
-
-\item The \texttt{Parser} reads the tokens from \texttt{FixedFormLexerPhase2}.
-
-\end{itemize}
-
-\section{Parse Trees}
-
-\subsection{Overview}
-\textit{
-\textbf{NOTE.}
-We expect that you already know what a parse tree is and what the difference
-is between abstract and concrete syntax.  Terms like ``terminal,''
-``nonterminal,'' and ``token'' should be familiar.  If they are not,
-you will need to spend some time with the Dragon book\footnote{Aho, Sethi,
-and Ullman, \textit{Compilers: Principles, Techniques, and Tools}} before
-tackling this section.}
-
-When you call one of the \texttt{parse} methods on a \texttt{FortranProcessor},
-either an exception will be thrown (if the lexer or parser encounters an
-error), or the method will return a (non-null) parse tree.
-
-A parse tree is just a tree of \texttt{ParseTreeNode}s with \texttt{Token}s
-as leaves.  The \texttt{ParseTreeNode} returned by the \texttt{parse} method
-is the root of the parse tree.
-
-The parse tree for a program \textit{exactly} follows the derivation of the
-program from the grammar in \texttt{Fortran95.bnf}.  It is literally a
-parse tree, also known as a concrete syntax tree; it is \textit{not} an
-abstract syntax tree (AST).\footnote{If you want to know why we didn't use an
-abstract syntax tree, see the appendix on Miscellaneous Parser and Language
-Processing Notes.} 
-
-It is important to remember that the grammar in
-\texttt{Fortran95.bnf} is different than the one in the Fortran standard.
-The grammar in the Fortran standard is \textit{not} LALR(1)---not even
-close---and so it had to be modified (quite heavily) to successfully
-generate a parser from it.  So the parse trees you get from our parser are
-\textit{not} always going to match what the Fortran standard grammar would
-lead you to expect.  For example, there is no SFExpr in the Fortran standard
-grammar, but you will find them popping up in your parse trees.
-
-\textbf{TIP.}
-When running Photran, go into your workspace preferences; in the Fortran Parser
-section, there is an (very useful) option to ``display parse tree rather
-than normal Outline view.''
-
-\subsection{An Example}
-
-\begin{figure}[h]
-\centering
-\includegraphics[width=5in]{images/parsetree1.png}
-\caption{Sample program and its parse tree}
-\label{parsetree}
-\end{figure}
-
-Figure \ref{parsetree} shows a trivial program and its parse tree.
-
-\begin{itemize}
-
-\item The node labels in angle brackets, such as $<$xExecutableProgram$>$ and
-$<$xProgramStmt$>$, are nonterminals in the grammar and correspond to
-\texttt{ParseTreeNodes} in the parse tree.\footnote{Note that $<$Free Form
-Source$>$ (at the top of the Outline view) is just a label and not part of
-the parse tree.}
-
-\item Terminals in the grammar have names starting with T\_: for example,
-T\_PROGRAM is the ``program'' keyword and T\_IDENT is an identifier.
-Notice that the carriage return is also a token: end-of-statement (T\_EOS).
-In the figure, these identify \texttt{Token}s in the parse
-tree.\footnote{The distinction between terminals and tokens is somewhat
-subtle.  Terminals are things like ``identifier,'' ``plus sign,'' and
-``float'' that appear in a grammar.  Tokens are the actual chunks of text
-from your input file, such as ``hello,'' ``+,'' and ``3.14.''  Every token
-\textit{corresponds} to a terminal, e.g., ``hello'' is an identifier,
-``+'' is (the only representation of) a plus sign, and ``3.14'' is a
-float.}
-
-\end{itemize}
-
-Recall that each parse tree node corresponds to a nonterminal (on the
-left-hand side of a production in the grammar) and each token corresponds
-to a terminal.  
-
-You can determine the nonterminal corresponding to a \texttt{ParseTreeNode}
-by invoking \texttt{ParseTreeNode\#getRootNonterminal}.  (This method name
-will soon be changed to \texttt{getCorrespondingNonterminal} or something
-more intuitive like that.)  This will return a \texttt{Nonterminal}.  The
-only valid \texttt{Nonterminal}s are all constants in the \texttt{Nonterminal}
-class, so you can do identity comparisons like this:
-\begin{verbatim}
-if (parseTreeNode.getRootNonterminal() == Nonterminal.XEXECUTABLEPROGRAM) ...
-\end{verbatim}
-
-Similarly, you can determine the terminal corresponding to a token by
-calling \texttt{Token\#getTerminal} and doing an identity comparison, as in
-\begin{verbatim}
-if (token.getTerminal() == Terminal.T_IDENT) ...
-\end{verbatim}
-You can get the text of the token (``Hello'' for the only T\_IDENT in
-Figure \ref{parsetree}) by calling \texttt{Token\#getText}.
-
-\texttt{Terminal}s and \texttt{Nonterminal}s both have a
-\texttt{getDescription} method which returns a (String) description of that
-terminal or nonterminal, e.g., ``T\_IDENT'' or ``$<$xExecutableProgram$>$.''
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-07-analysis.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-07-analysis.tex
deleted file mode 100644
index 114ab68..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-07-analysis.tex
+++ /dev/null
@@ -1,194 +0,0 @@
-% Parse Tree Analysis
-
-\textit{NOTE.  This section assumes that you are familiar with the Visitor
-pattern\footnote{See Gamma, Helm, Johnson, and Vlissides, \textit{Design
-Patterns}} and are familiar with symbol tables\footnote{See Aho, Sethi, and
-Ullman, \textit{Compilers: Principles, Techniques, and Tools}}.}
-
-\section{Visitors}
-
-When you want to retrieve structural information about a program, typically
-it will be done using a Visitor on the parse tree.
-
-There are two types of Visitors available in Photran.
-\begin{itemize}
-
-\item A \texttt{ParseTreeVisitor} has a ``callback'' method for each nonterminal
-in the grammar.  The tree is traversed in preorder, and as each node is visited,
-a call is made to the Visitor method corresponding to the nonterminal for that node.
-This is usually the preferred Visitor to use.
-
-\item A \texttt{GenericParseTreeVisitor} only distinguishes between
-\texttt{ParseTreeNode}s and \texttt{Token}s.  This Visitor should only be used
-when all internal nodes are treated similarly.  If you need to distinguish between
-the types of internal nodes, use a \texttt{ParseTreeVisitor} instead.
-
-\end{itemize}
-
-(\texttt{ParseTreeVisitor} is generated by the parser generator and should not
-be modified.)
-
-In addition to the visit methods, both types of Visitors have a
-\texttt{preparingToVisitChildrenOf} method, which is called after a node has
-been visited but before its children have, and a \texttt{doneVisitingChildrenOf}
-method, which is called immediately after its children have been visited but
-before any sibling nodes have.
-
-\subsection{Creating and Using a Visitor}
-
-Create a visitor by subclassing \texttt{ParseTreeVisitor} or
-\texttt{GenericParseTreeVisitor}.  By default, all of the visit methods do
-nothing, so you only have to override the methods that are useful to you.
-
-Given the root of the parse tree (i.e., the \texttt{ParseTreeNode} returned
-by \texttt{FortranProcessor\#parse}), use the \texttt{visitUsing} method
-to traverse the parse tree; pass your visitor as the only argument.
-
-\subsection{Sample Traversals}
-
-As an example, consider again the ``do nothing'' program from Figure \ref{parsetree}.
-
-When it is visited using a \texttt{GenericParseTreeVisitor}, the Visitor
-methods are called in this order (methods called between \texttt{preparingToVisitChildrenOf}
-and \texttt{doneVisitingChildrenOf} are indented to illustrate that child nodes
-are being visited):
-
-\begin{verbatim}
-visitParseTreeNode(<xExecutableProgram>)
-preparingToVisitChildrenOf(<xExecutableProgram>)
-  visitParseTreeNode(<xProgramUnit>)
-  preparingToVisitChildrenOf(<xProgramUnit>)
-    visitParseTreeNode(<xMainProgram>)
-    preparingToVisitChildrenOf(<xMainProgram>)
-      visitParseTreeNode(<xProgramStmt>)
-      preparingToVisitChildrenOf(<xProgramStmt>)
-        visitToken(T_PROGRAM: "program")
-        visitParseTreeNode(<xProgramName>)
-        preparingToVisitChildrenOf(<xProgramName>)
-          visitToken(T_IDENT: "Hello")
-        doneVisitingChildrenOf(<xProgramName>)
-        visitToken(T_EOS: (end of line))
-      doneVisitingChildrenOf(<xProgramStmt>)
-      visitParseTreeNode(<xMainRange>)
-      preparingToVisitChildrenOf(<xMainRange>)
-        visitParseTreeNode(<xEndProgramStmt>)
-        preparingToVisitChildrenOf(<xEndProgramStmt>)
-          visitToken(T_END: "end")
-          visitToken(T_PROGRAM: "program")
-          visitToken(T_EOS: (end of line))
-        doneVisitingChildrenOf(<xEndProgramStmt>)
-      doneVisitingChildrenOf(<xMainRange>)
-    doneVisitingChildrenOf(<xMainProgram>)
-  doneVisitingChildrenOf(<xProgramUnit>)
-doneVisitingChildrenOf(<xExecutableProgram>)
-\end{verbatim}
-
-When it is visited using a \texttt{ParseTreeVisitor}, the Visitor
-methods are called in this order:
-
-\begin{verbatim}
-visitXexecutableprogram(<xExecutableProgram>)
-preparingToVisitChildrenOf(<xExecutableProgram>)
-  visitXprogramunit(<xProgramUnit>)
-  preparingToVisitChildrenOf(<xProgramUnit>)
-    visitXmainprogram(<xMainProgram>)
-    preparingToVisitChildrenOf(<xMainProgram>)
-      visitXprogramstmt(<xProgramStmt>)
-      preparingToVisitChildrenOf(<xProgramStmt>)
-        visitXprogramname(<xProgramName>)
-        preparingToVisitChildrenOf(<xProgramName>)
-        doneVisitingChildrenOf(<xProgramName>)
-      doneVisitingChildrenOf(<xProgramStmt>)
-      visitXmainrange(<xMainRange>)
-      preparingToVisitChildrenOf(<xMainRange>)
-        visitXendprogramstmt(<xEndProgramStmt>)
-        preparingToVisitChildrenOf(<xEndProgramStmt>)
-        doneVisitingChildrenOf(<xEndProgramStmt>)
-      doneVisitingChildrenOf(<xMainRange>)
-    doneVisitingChildrenOf(<xMainProgram>)
-  doneVisitingChildrenOf(<xProgramUnit>)
-doneVisitingChildrenOf(<xExecutableProgram>)
-\end{verbatim}
-
-(The Visitors used to generate the output above are stored in
-a JUnit test class called \texttt{ExampleVisitor}.)
-
-\section{The \texttt{ParseTreeSearcher}}
-
-Inside Visitor methods, typically you will want to look for particular tokens
-or syntactic structures.
-
-\subsection{An Example}
-
-Consider the following (randomly selected) method from \texttt{DeclarationCollector},
-one of the classes used for building symbol tables.
-This class scans a program's parse tree, looking for declarations of programs, functions,
-block data, namelists, etc., and inserts declarations for them into a symbol table.
-
-\begin{verbatim}
-    public void visitXmainprogram(ParseTreeNode node)
-    {
-        // # R1101 desn"t ensure ordering as the standard requires;
-        // <xMainProgram> ::=
-        //   <xMainRange> |
-        //   <xProgramStmt> <xMainRange> ;
-        // # R1102
-        // <xProgramStmt> ::=
-        //   <xLblDef> T_PROGRAM <xProgramName> T_EOS ;
-        ParseTreeNode programStmt = ParseTreeSearcher.findFirstNodeIn(node, Nonterminal.XPROGRAMSTMT);
-        Token name;
-        if (programStmt != null)
-	        name = ParseTreeSearcher.findFirstIdentifierIn(node);
-        else
-        {
-	        name = new Token();
-	        name.setText("(Anonymous Main Program)");
-        }
-        ...
-\end{verbatim}
-
-(The comment lines are copied from the parser generation grammar, \texttt{Fortran95.bnf}.)
-
-In Fortran, a main program can either start with a program statement, or it
-can not.  So both of these are valid programs:
-\begin{verbatim}
-program SayHi
-  print *, 'Hello!'                             print *, 'Hello!'
-end program SayHi                             end program SayHi
-\end{verbatim}
-
-In this Visitor method, \texttt{node} is guaranteed to be a $<$xMainProgram$>$,
-due to the name of the method.  As shown, by looking at the grammar, we can
-determine that it will either have one child (a \texttt{ParseTreeNode} corresponding
-to an $<$xMainRange$>$) or two children (both \texttt{ParseTreeNode}s, the
-first corresponding to an $<$xProgramStmt$>$ and the second corresponding to
-an $<$xMainRange$>$.
-
-If it \textit{does} have an $<$xProgramStmt$>$, then, a quick look at the rules for
-$<$xLblDef$>$ (an optional integer label that can appear at the beginning of any
-Fortran statement) and $<$xProgramName$>$ will make it evident that the first
-identifier token (T\_IDENT) under the $<$xProgramStmt$>$ is the name of the program.
-
-So now we can understand what this method does.
-\begin{itemize}
-
-\item It checks to see if the main program has a $<$xProgramStmt$>$.  This is done
-by calling \texttt{ParseTreeSearcher\#findFirstNodeIn}, and telling it we want to
-find the first $<$xProgramStmt$>$ that is a child of \texttt{node}.  It will either
-return a \texttt{ParseTreeNode} corresponding to an $<$xProgramStmt$>$, or if it
-can't find one, it will return \texttt{null}.
-
-\item If there is an $<$xProgramStmt$>$, it grabs the first T\_IDENT token, which
-tells the name the user gave to the program.
-
-\item If there was no $<$xProgramStmt$>$, the program does not have a name, so we
-``fake'' a token and name the program ``(Anonymous Main Program).''
-\end{itemize}
-
-\subsection{For More Information}
-
-So, essentially, anytime you have a parse tree (or a subtree of the parse tree)
-and you want to find a particular node or token, use one of the methods in
-\texttt{ParseTreeSearcher}.  If there isn't one, you may have to write one yourself.
-Be sure to look at the JavaDoc for the methods in that class; unless you are
-doing something bizarre, one of the existing methods should work.
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-08-symtbls.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-08-symtbls.tex
deleted file mode 100644
index 90b3835..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-08-symtbls.tex
+++ /dev/null
@@ -1,103 +0,0 @@
-% Symbol Tables
-
-All of the symbol table routines are stored in the ``parser'' folder under the
-Core plug-in.
-
-After you have parsed a file, you can create a symbol table for it by calling
-\texttt{FortranProcessor\#createSymbolTableFromParseTree}.  This, in turn calls
-the static method \texttt{SymbolTable\#createSymbolTableFor}, which is intended
-to be the sole entrypoint for symbol table building.
-
-\section{Contents of a Symbol Table}
-
-The classes representing symbol table entries are stored in the
-\texttt{org.eclipse.photran.internal.core.f95parser.symboltable.entries}
-package.  Currently, the following are allowed.
-\begin{itemize}
-\item Main Programs
-\item Modules
-\item Functions
-\item Subroutines
-\item Derived Types
-\item Block Data
-\item Namelists
-\item Common Blocks
-\item Interfaces
-\item Externals
-\item Intrinsics
-\item Variables
-\end{itemize}
-
-\texttt{FortranProcessor\#createSymbolTableFromParseTree} returns a
-\texttt{SymbolTable}, which represents the global symbol table for
-the program that was parsed.
-
-A \texttt{SymbolTable} is essentially just a collection of
-\texttt{SymbolTableEntry} objects.  Each \texttt{SymbolTableEntry} has
-a child symbol table.  For \texttt{FunctionEntry} objects, this child
-table contains all of the parameters, the return variable, and any
-local variables declared inside the function.  For \texttt{VariableEntry}
-objects, which represent local variables, the child table will always
-be empty (it is there only for uniformity).
-
-Symbol tables also keep track of whether an ``implicit'' rule applies,
-what external modules are being used (via USE statements), etc.
-
-To see what's in a symbol table, just use the \texttt{toString} method.
-Child tables will be indented in the output.
-
-The symbol table-related classes are JavaDoc'd, so additional information
-is available there.
-
-\section{\texttt{SymbolTableVisitor}s}
-
-You can also create a Visitor for a program's symbol table hierarchy
-by subclassing \texttt{SymbolTableVisitor}, which has a visit method
-for each type of \texttt{SymbolTableEntry}.
-
-\section{The Module Database}
-
-Similar to \textit{import} statements in Java, Fortran programs can USE a
-module defined in a different Fortran file.  Unfortunately, there is no
-easy way to tell where this module might be defined.  The user simply specifies
-a list of ``module paths'' which are searched for Fortran source files.
-Each Fortran source file must be checked to see if it contains a module
-with the given name.
-
-In Photran, the list of modules paths is stored in a workspace preference,
-although we plan to convert this to a project property.
-
-The class \texttt{ModuleLoader} is responsible for locating modules in this
-way.  The \texttt{ModuleDB} caches the symbol tables for files on the module
-path so they don't all have to be reparsed every time a module is searched for.
-Neither of these is complete yet, but they will be soon.
-
-\section{How Symbol Tables are Built}
-
-A quick look at \texttt{FortranProcessor\#createSymbolTableFromParseTree}
-explains how symbol tables are built:
-\begin{verbatim}
-    public static SymbolTable createSymbolTableFor(ParseTreeNode parseTree) throws Exception
-    {
-        SymbolTable tbl = (new DeclarationCollector(parseTree)).getSymbolTable();
-        Intrinsics.fill(tbl);
-        return (new ReferenceCollector(tbl, parseTree)).getSymbolTable();
-    }
-\end{verbatim}
-
-\begin{itemize}
-
-\item A Visitor is run over the parse tree to collect declarations of
-programs, modules, functions, subroutines, block data, derived types,
-namelists, etc.---anything that can be stored in the symbol table.
-
-\item The names of all Fortran 95 intrinsic functions and subroutines
-are inserted into the table.
-
-\item Now that declarations have been inserted, the parse tree is scanned
-for references (i.e., uses of a function, variable, namelist, etc.).
-If implicit variables have been allowed, the \texttt{ReferenceCollector} will
-detect those (since they are used but not declared) and insert them into the
-symbol table.
-
-\end{itemize}
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-09-refac-suppt.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-09-refac-suppt.tex
deleted file mode 100644
index f49a4f0..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-09-refac-suppt.tex
+++ /dev/null
@@ -1,123 +0,0 @@
-% Refactoring Support: Source Printing and Program Editing
-
-Aside from the usual front end components (parser and symbol tables), a
-refactoring tool requires
-\begin{itemize}
-\item a means of manipulating the parse tree, i.e., moving nodes around,
-deleting them, and inserting new ones; and
-\item a means of outputting ``revised'' source code after a parse tree has
-been manipulated.
-\end{itemize}
-
-We will look at the means of outputting source code first, discussing
-the \texttt{Presentation} and \texttt{SourcePrinter} classes.
-We will then discuss the \texttt{ProgramEditor}, which allows you to
-manipulate the parse tree and \texttt{Presentation}.
-
-\section{The \texttt{Presentation} and the \texttt{Program}}
-
-While the parse tree for a program stores all of the ``important'' tokens
-(identifiers, parentheses, etc.), other things---comments, line continuations,
-and C preprocessor directives---are not in the Fortran grammar.  However,
-when the source printer produces source code from a parse tree, it needs to
-include these as well.
-
-We refer to these things (comments, line continuations, C preprocessor
-directives, Fortran INCLUDE statements, and anything else that does not
-end up in a parse tree) as \textit{non-tree tokens}, and we represent them
-by the class \texttt{NonTreeToken}.  A \texttt{Presentation} is essentially
-a list of all the non-tree tokens that appeared in a parse.
-
-A \texttt{Presentation} can be created from a parse by calling the
-\texttt{getNonTreeTokens} method on the lexer and passing the resulting
-\texttt{List<NonTreeToken>} to the \texttt{Presentation} constructor.
-
-A \texttt{Program} is just parse tree paired with a symbol table and a
-\texttt{Presentation}.
-
-\section{Presentation Blocks}
-
-Since \texttt{Token}s in the parse tree and \texttt{NonTreeToken}s in
-a program's \texttt{Presentation} have a lot in common, we will refer to
-them collectively as ``presentation blocks.''  Not surprisingly, they
-share a common superclass (interface, rather): \texttt{IPresentationBlock}.
-JavaDoc removed, it looks like this:
-
-\begin{verbatim}
-public interface IPresentationBlock
-{
-    public abstract String getFilename();
-    public abstract void setFilename(String value);
-
-    public abstract int getStartLine();
-    public abstract void setStartLine(int value);
-
-    public abstract int getStartCol();
-    public abstract void setStartCol(int value);
-
-    public abstract int getEndLine();
-    public abstract void setEndLine(int value);
-
-    public abstract int getEndCol();
-    public abstract void setEndCol(int value);
-
-    public abstract int getOffset();
-    public abstract void setOffset(int value);
-
-    public abstract int getLength();
-    public abstract void setLength(int value);
-
-    public abstract String getText();
-    public abstract void setText(String value);
-}
-\end{verbatim}
-
-Intuitively, then, all presentation blocks know what file they originated from,
-where they were in the file (both in terms of line/column and offset/length),
-and exactly what their text looked like.  (This is important since capitalization
-does not matter in Fortran.)
-
-Most importantly, this means that reproduce the source code of a program verbatim
-from a parse tree and a \texttt{Presentation}.  (The only difference will be the
-use of spaces vs. tabs to make sure tokens appear in the correct column on a line.)
-All comments and formatting will be retained.
-
-\section{The \texttt{SourcePrinter}}
-
-The job of the source printer (class \texttt{SourcePrinter}) is to take a
-a parse tree and corresponding \texttt{Presentation}
-and produce source code from it.
-
-Since every \texttt{Token} in the parse tree and every \texttt{NonTreeToken}
-in the \texttt{Presentation} knows what line and column it should appear on,
-this is easy.
-
-\section{The \texttt{ProgramEditor}}
-
-Essentially, a refactoring needs to change the parse tree for a program.  It
-may change existing nodes, move them around, remove them altogether, or insert
-new nodes.
-
-As described above, though, source code is produced by looking at the line/column
-offsets of the \texttt{Token}s in the parse tree and interleaving comments and
-other non-tree tokens from a program's \texttt{Presentation}.
-
-When we add, move, change, or delete a subtree of the parse tree, then,
-we must do three things:
-\begin{itemize}
-\item adjust the positions of the \texttt{Token}s in that subtree,
-\item adjust the positions of the related \texttt{NonTreeToken}s
-(e.g., the comments describing a method and C preprocessor directives in its
-definition)
-\item adjust the positions of all of the presentation blocks that appear after
-the modified subtree.  For example, if you change an token's text from
-``Hello'' to ``Goodbye,'' every presentation block after that one will have
-its offset incremented by 2, and every presentation block to the right of
-that token on the same line will also have its starting column number incremented
-by 2.
-\end{itemize}
-
-The (static) methods in \texttt{ProgramEditor} are used to add, move, modify,
-and delete subtrees.
-
-This class will be described more as it stabilizes.
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-10-refactoring.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-10-refactoring.tex
deleted file mode 100644
index b3b147c..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-10-refactoring.tex
+++ /dev/null
@@ -1,153 +0,0 @@
-% Refactoring: Preconditions and Implementation
-
-From an implementation standpoint, a refactoring consists of
-\begin{itemize}
-\item a set of \textit{initial preconditions},
-\item input from the user,
-\item a set of \textit{final preconditions}, and
-\item a program manipulation.
-\end{itemize}
-
-As an example, consider the easiest of all refactorings: Rename.
-\begin{itemize}
-\item \textbf{Initial preconditions:}
-    \begin{itemize}
-    \item The token to rename should be an identifier.
-    \item The identifier must correspond to an entry in the symbol table.
-    \item If Rename is limited to certain entities, say, variables and subprograms,
-          the symbol table entry should indicate that the identifier corresponds
-          to a variable or subprogram.
-    \end{itemize}
-\item \textbf{User input:}
-    \begin{itemize}
-    \item New name for the variable or subprogram
-    \end{itemize}
-\item \textbf{Final preconditions:}
-    \begin{itemize}
-    \item The new name must be a valid identifier.
-    \item The new name must be different from the old name.
-    \item The new name must not already exist in its namespace.
-    \item For every reference to the old name, a change to the new name should uniquely
-          identify the same variable or function.  For example, if you are renaming a
-          global variable from \texttt{a} to \texttt{b}, but a local variable \texttt{b}
-          will end up shadowing the global variable and cause one of its references to
-          ``go wrong,'' then the rename cannot continue.
-    \end{itemize}
-\item \textbf{Program manipulation:}
-    \begin{itemize}
-    \item Locate the declaration of the entity being renamed, and locate all
-          references in all files in the workspace, and change the token text
-          to the new name.
-    \end{itemize}
-\end{itemize}
-
-The distinction between initial and final preconditions, then, is that
-initial preconditions must be satisfied before the user is asked for input,
-while final preconditions depend on the user's input.  If a refactoring does
-not require user input, it will have no final preconditions.
-
-\section{Running a Refactoring}
-
-Running a refactoring looks something like this.\footnote{The
-\texttt{if (!...) throw ...} is an obvious code smell that makes it look like
-the various methods in \texttt{RenameRefactoring} should be throwing exceptions
-rather than returning booleans.  The current structure makes more sense in
-``real'' code, where the user is being assaulted with dialog boxes and other
-things happen between each of the steps.}
-
-\begin{verbatim}
-        RenameRefactoring r = new RenameRefactoring(getProgram(), targetToken);
-        if (!r.checkInitialPreconditions()) throw new Error(r.getErrorMessage());
-        r.setNewName("Whatever");
-        if (!r.checkFinalPreconditions()) throw new Error(r.getErrorMessage());
-        if (!r.perform()) throw new Error(r.getErrorMessage());
-\end{verbatim}
-
-In other words, you
-\begin{itemize}
-\item check the initial preconditions,
-\item get input from the user,
-\item check the final preconditions, and
-\item finally perform the refactoring.
-\end{itemize}
-At any point, if a step has failed, you can call \texttt{r.getErrorMessage()}
-to get an explanation suitable for displaying to the user.
-
-\section{The \texttt{FortranRefactoring} Class}
-
-All Fortran refactorings must be subclasses of \texttt{FortranRefactoring}.
-\texttt{FortranRefactoring} (or its superclass) provides
-\begin{itemize}
-\item an instance variable \texttt{error}, the contents of which will be
-      returned
-      when the user calls \texttt{getErrorMessage()}.  If the refactoring fails,
-      before returning false, be sure to set this so the user knows why.
-\item Two \texttt{List}s of \texttt{Precondition}s:
-      \texttt{initialPreconditions}
-      and \texttt{finalPreconditions}.  Add preconditions to the former in the
-      constructor and the latter after input has been received from the user.
-\item Two fields, \texttt{initialPreconditionsCheckedAndPassed} and
-      \texttt{finalPreconditionsCheckedAndPassed}.  For example, you will want
-      to assert that the initial preconditions have been checked and passed
-      before checking the final preconditions.
-\end{itemize}
-
-\section{Preconditions}
-
-Refactoring preconditions are stored in the package
-\texttt{org.eclipse.photran.internal.core.refactoring.preconditions}.
-They are all derived from the class \texttt{AbstractPrecondition}.
-
-A precondition (i.e., a class derived from \texttt{AbstractPrecondition})
-has:
-\begin{itemize}
-\item a \texttt{List} of prerequisite preconditions, and
-\item a method for checking this precondition.
-\end{itemize}
-
-To check a precondition, call its \texttt{check} method.  After this method
-has been called once, it ``remembers'' whether it succeeded or failed, so
-future calls to \texttt{check} will just return the stored result rather than
-performing the entire check again.\footnote{It is very possible that a
-precondition will be checked manually, and then it will be checked again
-because it is a prerequisite for another precondition.  This resolves any
-inefficiences that might result because of this.}
-
-To implement how a precondition is checked, override the abstract method
-\texttt{checkThisPrecondition} method.  If any other preconditions need
-to be checked before this one, add them to the \texttt{prereqPreconditions}
-list in the constructor.  If the code in \texttt{checkThisPrecondition} is
-called, they have all been satisfied.
-
-The fields \texttt{parseTree}, \texttt{presentation}, and \texttt{symbolTable}
-will be populated when the constructor is called.  You will almost definitely
-need to use these in your implementation of \texttt{checkThisPrecondition}.
-
-\section{Implementing a Refactoring}
-
-\begin{itemize}
-
-\item If you need any preconditions that don't exist yet, implement them
-      as described above.
-
-\item Create a subclass of \texttt{FortranRefactoring}.
-
-\item In the constructor, call \texttt{super} and add preconditions
-      to the \texttt{initialPreconditions} field.
-
-\item Implement any methods to store input from the user.  At the beginning
-      of these methods, you will probably want to assert
-      \texttt{initialPreconditionsCheckedAndPassed}.
-
-\item Implement \texttt{perform}.  You will want to assert that all user
-      input is in place as well as asserting
-      \texttt{finalPreconditionsCheckedAndPassed}.  Use the
-      \texttt{ProgramEditor} to modify the parse tree and presentation.
-      If your changes might possibly affect the program's symbol table,
-      call the (inherited) \texttt{rebuildSymbolTable} method after all
-      transformations have been completed.
-
-\end{itemize}
-
-TODO-Jeff: Figure out and document how to integrate a refactoring into the
-(CDT) UI.
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a2-xyz.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a2-xyz.tex
deleted file mode 100644
index 766084f..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a2-xyz.tex
+++ /dev/null
@@ -1,156 +0,0 @@
-% XYZ Language Plug-in README
-
-The org.eclipse.photran.xyzsamplelang project demonstrates
-how to use the \texttt{AdditionalLanguages} extension point.
-It is just the sample XML editor plug-in that gets created when you choose
-to create a new plug-in project and select the ``plug-in with an editor''
-template.  However, it has been modified to integrate with the CDT.
-Here is the README from that project, which is a cursory description of
-how the CDT was modified and how the XYZ language was integrated.  The
-specific changes to the editor are documented in its code, so be sure
-to read that too!
-
-\begin{verbatim}
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-
-   HOW TO TIE A NEW SOURCE FILE TYPE, PARSER, AND MODEL BUILDER INTO THE CDT
-                     (AND HOW TO MAKE THE CDT ALLOW IT)
-
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-If you create your own editor, model builder, and ICElement-derived elements,
-some simple changes to the CDT source code will make the CDT
-integrate your parser and the elements it produces into its model.
-
-We add an AdditionalLanguages extension point to the CDT Core and change a
-couple of methods to make use of it.
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-NOTE ON INCLUDED SOURCE CODE:
-
-All files in the CDT Integration Proof-of-Concept - Phase 1 source folder were
-generated by the New Plug-In wizard EXCEPT:
-
-- Several changes were made to the editor's main class (XyzLanguageEditor) and
-  are commented there
-- I added FortranContentOutlinePage
-- I added the ToyElement and ToyModelBuilder classes (based on Photran's
-  FortranElement hierarchy and its (hidden) ToyModelBuilder)
-- I added XyzLanguagePerspective, which gives us our own perspective and adds
-  a shortcut for our new file wizard to the New File menu
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-This is NOT well-written, and it is NOT a tutorial.  It assumes you have some
-idea of how the CDT works (e.g., what the Model is), and it assumes that you
-will look at my code to see all the details.
-
-The XYZ Sample Language code is documented, so that should be read in addition
-to this README.
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-First, I checked out the CDT source (most of it, anyway) from CVS.
-
-I created a basic editor and a New wizard to complement it
-using the New Plugin wizard.  I just called it XyzLanguageEditor
-rather than XMLEditor or whatever the default is.  The filename extension
-is .xyz.
-
-I added the CDT Core and UI plugins as dependencies of my new plugin.
-
-After the wizard finished, I declared an xyzSource content type (text) to
-match the .xyz filename extension that the editor uses.
-
-(I also created an XYZ Language perspective by subclassing CPerspective, although
-that has only cosmetic value and isn't necessary for what I describe below.)
-
------
-
-Before we can add additional languages to the CDT, we must make the following
-changes to the CDT itself:
-
-Add an AdditionalLanguages extension point to the Core's plugin.xml
-Add AdditionalLanguages.exsd to the Core's schema folder
-Add org.eclipse.cdt.core.addl_langs package to the Core's src folder, containing:
-	IAdditionalLanguage -- Each extension language must implement this
-	AdditionalLanguagesExtension.java -- Provides access to extension point; iterable
-	AdditionalLanguagesIterator.java -- Iterates through contributed IAdditionalLanguages
-	IAdditionalLanguageCallback -- For performing an action on each contributed language
-	IModelBuilder -- Extension languages provide their model builder this way
-	IAdditionalLanguageElement -- ICElement extensions must implement this
-
-Now we need to make the CDT recognize our additional content types as 
-valid TranslationUnits in its model.
-
-These changes make sure CoreModel#getRegistedContentTypeId works for
-additional content types.  This function is called by CContainer
-and, if it returns a valid (registerd-with-the-CDT) content type,
-makes a TranslationUnit out of the file being processed.
-
-Essentially, we just add a line or two to each of the following which asks the
-AdditionalLanguagesExtension to check whether some extension plug-in (like our
-XYZ Language Plug-in) supports a given content type.
-
-	1.	CoreModel#getRegistedContentTypeIds
-	2.	CCorePlugin#getContentType
-	3.	TranslationUnit#isSourceUnit
-	4.	CoreModel#isValidSourceUnitName
-	5.	CoreModel#isValidTranslationUnitName
-
-	NOTE:
-	The following are places where the CCorePlugin.CONTENT_TYPE_CSOURCE
-	content type is checked for but I elected not to check for
-	extension content types:
-		TranslationUnit#isCLanguage
-		CoreModel#isValidCSourceUnitName
-		AbstractIndexerRunner#shouldIndex
-			...the following two methods are identical...
-		DOMSearchUtil#getLanguage
-		InternalASTServiceProvider#getLanguage
-
-Next, we want to allow additional languages to be parsed by their own parser,
-and they should be able to build their own models for the Outline and Make
-Projects views.
-
-The CModelBuilder is called by TranslationUnit#parse.  We will make
-TranslationUnit#parse call our own model builder (ToyModelBuilder), which
-will use some special ICElements (base class ToyElement) to extend the C Model.
-Again, this is done through the extension point, so it can apply to any language.
-
-- CModelBuilder changed to implement IModelBuilder
-- Added extension point checking to TranslationUnit#parse
-- Made CElementInfo public (rather than default)
-- Made CElementInfo#setIsStructureKnown public (rather than protected)
-- Added extension point checking to CElementImageProvider#getBaseImageDescriptor
-
-The last point is important.  Additional languages can reuse the CDT's model elements
-(for functions, classes, etc. -- all the things that show up in the Outline), or
-they can create their own (e.g., Fortran has Modules and Block Data, neither of
-which have direct analogs in C/C++).  These new elements can be created by implementing
-IAdditionalLanguageElement.  IAdditionalLanguageElements must implement a
-method getBaseImageDescriptor() which provides an Outline icon for that element.
-
------
-
-To integrate our XYZ language into the CDT...
-
-First, we add the following to our plugin.xml:
-
-   <extension point="org.eclipse.cdt.core.AdditionalLanguages">
-      <language class="addl_langs.XYZLanguage"/>
-   </extension>
-
-We provide a class addl_langs.XYZLanguage which implements IAdditionalLanguage.
-See the JavaDoc for IAdditionalLanguage.  Essentially, we claim to support
-the XyzLanguagePlugIn.xyzSource content type, and we provide a ToyModelBuilder
-which will provide a (static, and very boring) Outline of XYZ Language source files.
-
-Next, I added Outline support to the editor by making a tiny subclass of
-CContentOutlinePage.  See several relevant notes in XyzLanguageEditor.java.
-See also FortranContentOutlinePage.  We are telling CContentOutlinePage
-its editor is null, since it doesn't do anything useful with it.
-\end{verbatim}
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a3-cdt-ext-pt.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a3-cdt-ext-pt.tex
deleted file mode 100644
index 0641a9c..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a3-cdt-ext-pt.tex
+++ /dev/null
@@ -1,85 +0,0 @@
-% Overview of Implementation of the CDT AdditionalLanguages Extension Point
-
-The following, from an e-mail to the CDT copied to photran-dev, is an
-alternative description of how we modified the CDT to include this
-extension point.
-
-\begin{verbatim}
-1. Add an AdditionalLanguages extension point to the Core's plugin.xml and AdditionalLanguages.exsd to the Core's schema folder
-
-   Extend via <language class="my.plugin.XyzLanguage">
-   where XyzLanguage implements IAdditionalLanguage (see below)
-
-2. Add a package org.eclipse.cdt.core.addl_langs containing:
-
-   IAdditionalLanguage
-        public interface IAdditionalLanguage {
-          public String getName();
-          public boolean matchesSourceContentType(String contentTypeID);
-          public Collection/*<String>*/ getRegistedContentTypeIds();
-          public IModelBuilder createModelBuilder(TranslationUnit tu,
-              Map newElements);
-        }
-
-   AdditionalLanguagesExtension.java
-        Singleton; provides access to the extension point
-        Methods:
-            public Iterator/*<IAdditionalLanguage>*/ iterator()
-            public void processAdditionalLanguages(
-                IAdditionalLanguageCallback callback)
-            public boolean someAdditionalLanguageMatchesContentType(
-                String contentTypeID)
-            public IAdditionalLanguage getLanguageForContentType(
-                String contentTypeID)
-
-   AdditionalLanguagesIterator.java -- see iterator() above
-        Implements Iterable/*<IAdditionalLanguage>*/
-
-   IAdditionalLanguageCallback -- see processAdditionalLanguages() above
-        Allows you to perform some arbitrary action on each contributed
-            IAdditionalLanguage
-
-   IModelBuilder
-        Each extension language provides a model builder this way
-        Single method:
-            public abstract Map parse(boolean quickParseMode)
-                throws Exception;
-
-   IAdditionalLanguageElement (extends ICElement)
-        Allows you to extend the ICElement hierarchy
-        Methods:
-            public abstract Object getBaseImageDescriptor();
-            - The return type should really be ImageDescriptor,
-              but I don't want to make the Core depend on JFace
-
-3. Change content type checking to use extension point...
-   i.   CoreModel#getRegistedContentTypeIds
-   ii.  CCorePlugin#getContentType
-   iii. TranslationUnit#isSourceUnit
-   iv.  CoreModel#isValidSourceUnitName
-   v.   CoreModel#isValidTranslationUnitName
-
-   The change each of these is just a line or two -- usually a call to
-   AdditionalLanguagesExtension#someAdditionalLanguageMatchesContentType
-
-4. Make CModelBuilder implement IModelBuilder (no substantive change)
-
-5. Change the beginning of TranslationUnit#parse(Map):
-        IModelBuilder modelBuilder;
-        IAdditionalLanguage lang = AdditionalLanguagesExtension
-            .getInstance()
-            .getLanguageForSourceContentType(fContentTypeID);
-        if (lang != null)
-            modelBuilder = lang.createModelBuilder(this, newElements);
-        else
-            modelBuilder = new CModelBuilder(this, newElements);
-
-6. Make CElementInfo public (rather than default)
-
-7. Make CElementInfo#setIsStructureKnown public (rather than protected)
-
-8. Add this to the top of CElementImageProvider#getBaseImageDescriptor:
-   if (celement instanceof IAdditionalLanguageElement)
-     return (ImageDescriptor)
-       ((IAdditionalLanguageElement)celement).getBaseImageDescriptor();
-\end{verbatim}
diff --git a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a4-misc-notes.tex b/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a4-misc-notes.tex
deleted file mode 100644
index 2c9d93c..0000000
--- a/org.eclipse.photran-dev-docs/misc-notes/old-dev-guide-chapters/inc-a4-misc-notes.tex
+++ /dev/null
@@ -1,57 +0,0 @@
-% Miscellaneous Parser and Language Processing Notes
-
-\section{Notes on the (almost-)LALR(1) Grammar}
-
-The current grammar is based on an Eli grammar that has been worked on
-for several years.  All of the lexer work is totally original, and we fixed
-several bugs in the Eli grammar, but for the most part the grammar in
-\texttt{Fortran95.bnf} is the work of other people.  We have invested
-several months of work in it---but that does not compare to the years of
-work invested by the previous authors of that grammar.
-
-More information on the Eli grammar is available at
-http://members.aol.com/wclodius/eli\_f95\_parser.html
-
-\section{Why not an abstract syntax tree?}
-
-We started by building an AST for Fortran by hand.  For a compiler, this
-wouldn't be a big deal.  The purpose of an AST is provide a tree that only
-contains ``useful'' information from the parse, so superfluous tokens like
-parentheses never end up in an AST.  For a refactoring tool, though,
-it is important to remember every token in the parse, because you need to
-reproduce code that looks similar to the user's original code.  Fortran
-has a number of cases where there are several different ways to specify the
-same thing.  For example, you can end a program with ``end,'' ``end program,''
-or ``end program'' followed by the name of the program.  Other cases, with
-several optional tokens in the middle of statements, are trickier.  So,
-long story short, after a couple of months, we had about 600 AST classes and
-were nowhere near finished.
-
-So we needed a different alternative.
-
-One would be to have the parser generator generate the AST stuff for us.
-However, aside from the fact that it would require lots of tedious annotations
-in the grammar, we would still be in a place of having several hundred AST
-classes and a Visitor with several hundred methods.
-
-Instead, we\footnote{Actually, ``I'' is more correct... Spiros was leaving
-for Google, Brian was indifferent, and I think Dr. Johnson still would
-have preferred an AST... so now you know where to put the blame...} decided
-to use a good old-fashioned parse tree.
-
-Here's why.
-
-First, it made the ``superfluous token'' problem go away.
-Since each node just had a \texttt{List} of child nodes (either tokens or
-other parse tree nodes), we did not have to do anything extra to accommodate
-all of the variations of a statement.  All the tokens were there when we
-needed them (e.g., for prettyprinting), and they could be ignored when we
-didn't need them.
-
-Second, it gave us two possible Visitors, as described above.  More
-importantly, unlike visiting an AST, these Visitors could just do a ``dumb''
-recursive traversal of the tree, totally ignorant of the underlying grammar.
-This also made parse tree searches and grammar modifications easier.
-
-There are probably other reasons as well which I can try to remember if
-someone is still not convinced that this was a good idea.
diff --git a/org.eclipse.photran-dev-docs/patches/patch-20051101.txt b/org.eclipse.photran-dev-docs/patches/patch-20051101.txt
deleted file mode 100644
index 8aabdce..0000000
--- a/org.eclipse.photran-dev-docs/patches/patch-20051101.txt
+++ /dev/null
@@ -1,1266 +0,0 @@
-Index: src/org/eclipse/photran/internal/ui/editor/AdaptedSourceViewer.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/AdaptedSourceViewer.java,v
-retrieving revision 1.1
-diff -u -r1.1 AdaptedSourceViewer.java
---- src/org/eclipse/photran/internal/ui/editor/AdaptedSourceViewer.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/AdaptedSourceViewer.java	16 Oct 2005 07:51:09 -0000
-@@ -9,9 +9,6 @@
- 
- import org.eclipse.jface.text.DocumentCommand;
- import org.eclipse.jface.text.source.IOverviewRuler;
--import org.eclipse.jface.text.source.ISourceViewer;
--import org.eclipse.jface.text.source.ISourceViewerExtension;
--import org.eclipse.jface.text.source.ISourceViewerExtension2;
- import org.eclipse.jface.text.source.IVerticalRuler;
- import org.eclipse.jface.text.source.SourceViewer;
- import org.eclipse.jface.text.source.SourceViewerConfiguration;
-Index: src/org/eclipse/photran/internal/ui/editor/FortranFixedFormEditor.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/FortranFixedFormEditor.java,v
-retrieving revision 1.1
-diff -u -r1.1 FortranFixedFormEditor.java
---- src/org/eclipse/photran/internal/ui/editor/FortranFixedFormEditor.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/FortranFixedFormEditor.java	16 Oct 2005 07:51:09 -0000
-@@ -46,7 +46,7 @@
- 
- 	// This is '6' because of the way Eclipse handles spaces and tabs.
- 	// If this were '7', the tab would insert 7 spaces and you would start at column 8
--	private static final int COLUMM_6_WIDTH = 6;
-+	public static final int COLUMM_6_WIDTH = 6;
- 	private static final int COLUMN_5_WIDTH = 5;
- 	private static final int COLUMN_72_WIDTH = 72;
- 
-Index: src/org/eclipse/photran/internal/ui/editor/FortranFreeFormHorizontalRuler.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/FortranFreeFormHorizontalRuler.java,v
-retrieving revision 1.1
-diff -u -r1.1 FortranFreeFormHorizontalRuler.java
---- src/org/eclipse/photran/internal/ui/editor/FortranFreeFormHorizontalRuler.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/FortranFreeFormHorizontalRuler.java	16 Oct 2005 07:51:09 -0000
-@@ -7,7 +7,7 @@
- import org.eclipse.swt.widgets.Composite;
- 
- /**
-- * @ author nchen
-+ * @author nchen
-  * @author cheah
-  * 
-  * Basic ruler that extends as wide as the editor
-Index: src/org/eclipse/photran/internal/ui/editor/FortranPartitionScanner.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/FortranPartitionScanner.java,v
-retrieving revision 1.1
-diff -u -r1.1 FortranPartitionScanner.java
---- src/org/eclipse/photran/internal/ui/editor/FortranPartitionScanner.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/FortranPartitionScanner.java	16 Oct 2005 07:51:10 -0000
-@@ -24,6 +24,7 @@
- import org.eclipse.photran.ui.FortranUIPlugin;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.graphics.Color;
-+import org.eclipse.swt.graphics.RGB;
- 
- /**
-  * Defines a lexer-based partition scanner for Fortran files.
-@@ -35,404 +36,399 @@
-  * @author nchen
-  * @author cheahcf
-  */
--public final class FortranPartitionScanner implements IDocumentPartitioner
--{
-+public final class FortranPartitionScanner implements IDocumentPartitioner {
- 
--    // ----- SET UP THE DIFFERENT TYPES OF PARTITIONS --------------------------
-+	// ----- SET UP THE DIFFERENT TYPES OF PARTITIONS --------------------------
- 
--    static final String F90_STRING_CONSTANTS_PARTITION = "__fortran_string_constants";
-+	static final String F90_STRING_CONSTANTS_PARTITION = "__fortran_string_constants";
- 
--    static final String F90_IDENTIFIER_PARTITION = "__fortran_identifier";
-+	static final String F90_IDENTIFIER_PARTITION = "__fortran_identifier";
- 
--    static final String F90_KEYWORD_PARTITION = "__fortran_keyword";
--
--    static final String F90_CODE_PARTITION = "__fortran_code";
--
--    private IDocument doc;
--
--    private String filename;
--
--    private ArrayList partitions = null;
--    
--    private boolean isFixedForm;
--
--    public static class Partition
--    {
--        protected String contentType;
--
--        protected ITokenScanner tokenScanner;
--
--        protected org.eclipse.jface.text.rules.Token token;
--
--        public Partition(String aContentType, TextAttribute color)
--        {
--            this.contentType = aContentType;
--
--            // Default token scanner: return the entire partition
--            // (there are no tokens within partitions)
--
--            RuleBasedScanner rbs = new RuleBasedScanner();
--            token = new org.eclipse.jface.text.rules.Token(color);
--            rbs.setDefaultReturnToken(token);
--            this.tokenScanner = rbs;
--        }
--
--        /**
--         * Each partition type has a unique name for its content type
--         * 
--         * @return the content type for this partition (a String)
--         */
--        public final String getContentType()
--        {
--            return contentType;
--        }
--
--        /**
--         * @return a scanner that detects tokens within this type of partition.
--         */
--        public final ITokenScanner getTokenScanner()
--        {
--            return tokenScanner;
--        }
--
--        /**
--         * This token is used to change the color
--         * 
--         * @return the token used for the current RuleBasedScanner
--         */
--        public org.eclipse.jface.text.rules.Token getToken()
--        {
--            return token;
--        }
--    }
--
--    // TODO-Nick: Refactor to be cleaner if there is a need for more types
--    private static IPreferenceStore store = FortranUIPlugin.getDefault().getPreferenceStore();
--
--    private static Partition[] partitionTypes = new Partition[] {
--             new Partition(
--                 F90_STRING_CONSTANTS_PARTITION,
--                 new TextAttribute(
--                     new Color(
--                         null,
--                         PreferenceConverter
--                             .getColor(
--                                 store,
--                                 ColorPreferencePage.F90_STRING_CONSTANTS_COLOR_PREF)))),
--             new Partition(
--                 F90_IDENTIFIER_PARTITION,
--                 new TextAttribute(
--                     new Color(
--                         null,
--                         PreferenceConverter
--                             .getColor(
--                                 store,
--                                 ColorPreferencePage.F90_IDENTIFIER_COLOR_PREF)))),
--             new Partition(
--                 F90_CODE_PARTITION,
--                 new TextAttribute(
--                     new Color(
--                         null,
--                         PreferenceConverter
--                             .getColor(
--                                 store,
--                                 ColorPreferencePage.F90_COMMENT_COLOR_PREF)))),
--             new Partition(
--                 F90_KEYWORD_PARTITION,
--                 new TextAttribute(
--                     new Color(
--                         null,
--                         PreferenceConverter
--                             .getColor(
--                                 store,
--                                 ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
--                     null, SWT.BOLD)) };
--
--    IPropertyChangeListener colorPreferenceListener = new IPropertyChangeListener()
--    {
--        /*
--         * @see IPropertyChangeListener.propertyChange()
--         */
--        public void propertyChange(PropertyChangeEvent event)
--        {
--            if (ColorPreferencePage.respondToPreferenceChange(event))
--            {
--                updateColorPreferences();
--                documentChanged(null);
--            }
--        }
--    };
--
--    private void updateColorPreferences()
--    {
--        partitionTypes[0].getToken().setData(
--            new TextAttribute(new Color(null, PreferenceConverter.getColor(store,
--                ColorPreferencePage.F90_STRING_CONSTANTS_COLOR_PREF))));
--        partitionTypes[1].getToken().setData(
--            new TextAttribute(new Color(null, PreferenceConverter.getColor(store,
--                ColorPreferencePage.F90_IDENTIFIER_COLOR_PREF))));
--        partitionTypes[2].getToken().setData(
--            new TextAttribute(new Color(null, PreferenceConverter.getColor(store,
--                ColorPreferencePage.F90_COMMENT_COLOR_PREF))));
--        partitionTypes[3].getToken().setData(
--            new TextAttribute(new Color(null, PreferenceConverter.getColor(store,
--                ColorPreferencePage.F90_KEYWORD_COLOR_PREF)), null, SWT.BOLD));
--    }
--
--    /**
--     * Get a new FortranPartitionScanner Retains the doc if there is one
--     */
--    public FortranPartitionScanner(String filename, boolean isFixedForm)
--    {
--        // JO: Take the document filename as a parameter so that we can
--        // guess whether or not it's fixed form source
--
--        this.filename = filename;
--        this.isFixedForm = isFixedForm;
--        
--        FortranUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(
--            colorPreferenceListener);
--    }
--
--    /**
--     * @return an array of FortranPartitionScanner.Partitions, each of which contains a name for its
--     *         content type, a predicate for detecting that type of partition, and a rule for
--     *         scanning tokens within that type of partition.
--     */
--    static final Partition[] getPartitionTypes()
--    {
--        return partitionTypes;
--    }
--
--    /**
--     * @return an array of Strings which identify the content types of the various types of
--     *         partition for a photran file
--     */
--    static final String[] getContentTypes()
--    {
--        String[] contentTypes = new String[partitionTypes.length];
--        for (int i = 0; i < partitionTypes.length; i++)
--            contentTypes[i] = partitionTypes[i].getContentType();
--        return contentTypes;
--    }
--
--    /**
--     * @param terminal a terminal ID, from the Terminal class
--     * @return the name of the partition (one of the String constants above) corresponding to that
--     *         terminal
--     */
--    private String mapTerminalToPartitionType(Terminal terminal)
--    {
--        if (terminal == Terminal.T_SCON) return F90_STRING_CONSTANTS_PARTITION;
--        if (terminal == Terminal.T_IDENT) return F90_IDENTIFIER_PARTITION;
--
--        return F90_KEYWORD_PARTITION;
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#connect(org.eclipse.jface.text.IDocument)
--     */
--    public void connect(IDocument document)
--    {
--        doc = document;
--        documentChanged(null);
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#disconnect()
--     */
--    public void disconnect()
--    {
--        doc = null;
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
--     */
--    public void documentAboutToBeChanged(DocumentEvent event)
--    {
--
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#documentChanged(org.eclipse.jface.text.DocumentEvent)
--     */
--    public boolean documentChanged(DocumentEvent event)
--    {
--        // System.out.println("documentChanged");
--        int endOfLastPartition = -1;
--        // Get the text of the current document
--        String documentText = doc.get();
--
--        ArrayList newPartitions = new ArrayList();
--
--        try
--        {
--            // Run it through the lexer
--            ILexer lexer = Lexer.createLexer(new ByteArrayInputStream(doc.get()
--                .getBytes()), this.filename, isFixedForm);
--
--            // Create a partition for each token in the document, as well as
--            // a partition for the space between tokens
--            Token token;
--            Terminal terminal;
--            for (token = null, terminal = null; (terminal = (token = lexer.yylex()).getTerminal()) != Terminal.END_OF_INPUT;)
--            {
--                // JO: The fixed form lexer puts these in the stream
--                // out of order, and they don't really matter to us
--                // anyway since they're just whitespace
--                if (terminal == Terminal.T_EOS) continue;
--
--                int offset = token.getOffset();
--                int length = token.getLength();
--                String type = mapTerminalToPartitionType(terminal);
--                // we know that the parser is initialized and is scanning!
--                // but is it not returning the right offsets or the right types
--                // System.err.println("offset: " + offset + " length: " + length
--                // + " type: " + type + " text: " + token.getText());
--
--                // Is there space between the last partition and this one?
--                // Fill it!
--                if (endOfLastPartition < offset)
--                {
--                    int beginningOfGap = endOfLastPartition + 1;
--                    int lengthOfGap = offset - endOfLastPartition - 1;
--                    newPartitions.add(new TypedRegion(beginningOfGap, lengthOfGap,
--                        F90_CODE_PARTITION));
--                }
--
--                // And make a new partition
--                newPartitions.add(new TypedRegion(offset, length, type));
--
--                endOfLastPartition = offset + length - 1;
--            }
--        }
--        catch (FileNotFoundException e)
--        {
--            e.printStackTrace();
--        }
--        catch (Exception e1)
--        {
--            // Ignore lexer exceptions (e.g., unterminated string constant)
--        }
--
--        // Is there a gap between the last token and the end of the document?
--        // Assume it's code...
--        if (endOfLastPartition < documentText.length() - 1)
--        {
--            int beginningOfGap = endOfLastPartition + 1;
--            int lengthOfGap = documentText.length() - endOfLastPartition - 1;
--            newPartitions.add(new TypedRegion(beginningOfGap, lengthOfGap, F90_CODE_PARTITION));
--        }
--
--        // case for empty document
--
--        if (newPartitions.size() == 0)
--            newPartitions.add(new TypedRegion(0, 0, F90_CODE_PARTITION));
--
--        // We should return true iff the partitioning has changed
--        if (newPartitions.equals(partitions))
--            return false;
--        else
--        {
--            partitions = newPartitions;
--
--            return true;
--        }
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#getLegalContentTypes()
--     */
--    public String[] getLegalContentTypes()
--    {
--        return getContentTypes();
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#getContentType(int)
--     */
--    public String getContentType(int offset)
--    {
--        int partitionNum = findRegionContainingOffset(offset);
--        if (partitionNum >= 0)
--            return ((ITypedRegion)partitions.get(partitionNum)).getType();
--        else
--            // Assume it's part of some code...
--            return F90_CODE_PARTITION;
--
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#computePartitioning(int, int)
--     */
--    public ITypedRegion[] computePartitioning(int offset, int length)
--    {
--
--        int firstRegion = findRegionContainingOffset(offset);
--        int lastRegion = findRegionContainingOffset(offset + length - 1);
--
--        if (firstRegion < 0) throw new Error("No region contains start offset " + offset + "!");
--        if (lastRegion < 0) lastRegion = partitions.size() - 1;
--
--        ITypedRegion[] ret = new ITypedRegion[lastRegion - firstRegion + 1];
--        partitions.subList(firstRegion, lastRegion + 1).toArray(ret);
--        return ret;
--    }
--
--    /*
--     * (non-Javadoc)
--     * 
--     * @see org.eclipse.jface.text.IDocumentPartitioner#getPartition(int)
--     */
--    public ITypedRegion getPartition(int offset)
--    {
--        int partitionNum = findRegionContainingOffset(offset);
--
--        ITypedRegion lastPartition = (ITypedRegion)partitions.get(partitions.size() - 1);
--        int lastOffsetOfLastPartition = lastPartition.getOffset() + lastPartition.getLength() - 1;
--        if (partitionNum < 0)
--        {
--            if (offset > lastOffsetOfLastPartition)
--            {
--                // Add a new partition to the end
--                int newPartitionStart = lastOffsetOfLastPartition + 1;
--                int newPartitionLength = offset - newPartitionStart + 1;
--                partitions.add(new TypedRegion(newPartitionStart, newPartitionLength,
--                    F90_CODE_PARTITION));
--                partitionNum = partitions.size() - 1;
--            }
--            else
--                throw new Error("No region contains offset " + offset + "!");
--        }
--
--        return (ITypedRegion)partitions.get(partitionNum);
--
--    }
--
--    private int findRegionContainingOffset(int offset)
--    {
--        for (int i = 0; i < partitions.size(); i++)
--        {
--            ITypedRegion region = (ITypedRegion)partitions.get(i);
--            int firstCharOffset = region.getOffset();
--            int lastCharOffset = firstCharOffset + region.getLength() - 1;
--            if (firstCharOffset <= offset && lastCharOffset >= offset) return i;
--        }
--        return -1;
--    }
-+	static final String F90_KEYWORD_PARTITION = "__fortran_keyword";
-+
-+	static final String F90_CODE_PARTITION = "__fortran_code";
-+
-+	static final String F90_KEYWORD_PARTITION_WITH_INDENTATION_RIGHT = "__fortran_keyword_indentation_right";
-+
-+	static final String F90_KEYWORD_PARTITION_WITH_INDENTATION_LEFT = "__fortran_keyword_indentation_left";
-+
-+	private IDocument doc;
-+
-+	private String filename;
-+
-+	private ArrayList partitions = null;
-+
-+	private boolean isFixedForm;
-+
-+	public static class Partition {
-+		protected String contentType;
-+
-+		protected ITokenScanner tokenScanner;
-+
-+		protected org.eclipse.jface.text.rules.Token token;
-+
-+		public Partition(String aContentType, TextAttribute color) {
-+			this.contentType = aContentType;
-+
-+			// Default token scanner: return the entire partition
-+			// (there are no tokens within partitions)
-+
-+			RuleBasedScanner rbs = new RuleBasedScanner();
-+			token = new org.eclipse.jface.text.rules.Token(color);
-+			rbs.setDefaultReturnToken(token);
-+			this.tokenScanner = rbs;
-+		}
-+
-+		/**
-+		 * Each partition type has a unique name for its content type
-+		 * 
-+		 * @return the content type for this partition (a String)
-+		 */
-+		public final String getContentType() {
-+			return contentType;
-+		}
-+
-+		/**
-+		 * @return a scanner that detects tokens within this type of partition.
-+		 */
-+		public final ITokenScanner getTokenScanner() {
-+			return tokenScanner;
-+		}
-+
-+		/**
-+		 * This token is used to change the color
-+		 * 
-+		 * @return the token used for the current RuleBasedScanner
-+		 */
-+		public org.eclipse.jface.text.rules.Token getToken() {
-+			return token;
-+		}
-+	}
-+
-+	// TODO-Nick: Refactor to be cleaner if there is a need for more types
-+	private static IPreferenceStore store = FortranUIPlugin.getDefault()
-+			.getPreferenceStore();
-+
-+	private static Partition[] partitionTypes = new Partition[] {
-+		new Partition(
-+				F90_STRING_CONSTANTS_PARTITION,
-+				new TextAttribute(
-+						new Color(
-+								null,
-+								PreferenceConverter
-+								.getColor(
-+										store,
-+										ColorPreferencePage.F90_STRING_CONSTANTS_COLOR_PREF)))),
-+			new Partition(F90_IDENTIFIER_PARTITION, new TextAttribute(
-+					new Color(null, PreferenceConverter.getColor(store,
-+							ColorPreferencePage.F90_IDENTIFIER_COLOR_PREF)))),
-+			new Partition(F90_CODE_PARTITION, new TextAttribute(new Color(null,
-+					PreferenceConverter.getColor(store,
-+							ColorPreferencePage.F90_COMMENT_COLOR_PREF)))),
-+			new Partition(F90_KEYWORD_PARTITION, new TextAttribute(new Color(
-+					null, PreferenceConverter.getColor(store,
-+							ColorPreferencePage.F90_KEYWORD_COLOR_PREF)), null,
-+					SWT.BOLD)),
-+			new Partition(
-+					F90_KEYWORD_PARTITION_WITH_INDENTATION_RIGHT,
-+					new TextAttribute(
-+							new Color(null, PreferenceConverter.getColor(store,
-+									ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
-+							null, SWT.BOLD)),
-+			new Partition(
-+					F90_KEYWORD_PARTITION_WITH_INDENTATION_LEFT,
-+					new TextAttribute(
-+							new Color(null, PreferenceConverter.getColor(store,
-+									ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
-+							null, SWT.BOLD)) };
-+
-+	IPropertyChangeListener colorPreferenceListener = new IPropertyChangeListener() {
-+		/*
-+		 * @see IPropertyChangeListener.propertyChange()
-+		 */
-+		public void propertyChange(PropertyChangeEvent event) {
-+			if (ColorPreferencePage.respondToPreferenceChange(event)) {
-+				updateColorPreferences();
-+				documentChanged(null);
-+			}
-+		}
-+	};
-+
-+	private void updateColorPreferences() {
-+		partitionTypes[0].getToken().setData(
-+				new TextAttribute(new Color(null, PreferenceConverter.getColor(
-+						store,
-+						ColorPreferencePage.F90_STRING_CONSTANTS_COLOR_PREF))));
-+		partitionTypes[1]
-+				.getToken()
-+				.setData(
-+						new TextAttribute(
-+								new Color(
-+										null,
-+										PreferenceConverter
-+												.getColor(
-+														store,
-+														ColorPreferencePage.F90_IDENTIFIER_COLOR_PREF))));
-+		partitionTypes[2].getToken().setData(
-+				new TextAttribute(new Color(null, PreferenceConverter.getColor(
-+						store, ColorPreferencePage.F90_COMMENT_COLOR_PREF))));
-+		partitionTypes[3].getToken().setData(
-+				new TextAttribute(new Color(null, PreferenceConverter.getColor(
-+						store, ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
-+						null, SWT.BOLD));
-+		partitionTypes[4].getToken().setData(
-+				new TextAttribute(new Color(null, PreferenceConverter.getColor(
-+						store, ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
-+						null, SWT.BOLD));
-+		partitionTypes[5].getToken().setData(
-+				new TextAttribute(new Color(null, PreferenceConverter.getColor(
-+						store, ColorPreferencePage.F90_KEYWORD_COLOR_PREF)),
-+						null, SWT.BOLD));
-+		
-+	}
-+
-+	/**
-+	 * Get a new FortranPartitionScanner Retains the doc if there is one
-+	 */
-+	public FortranPartitionScanner(String filename, boolean isFixedForm) {
-+		// JO: Take the document filename as a parameter so that we can
-+		// guess whether or not it's fixed form source
-+
-+		this.filename = filename;
-+		this.isFixedForm = isFixedForm;
-+
-+		FortranUIPlugin.getDefault().getPreferenceStore()
-+				.addPropertyChangeListener(colorPreferenceListener);
-+	}
-+
-+	/**
-+	 * @return an array of FortranPartitionScanner.Partitions, each of which contains a name for its
-+	 *         content type, a predicate for detecting that type of partition, and a rule for
-+	 *         scanning tokens within that type of partition.
-+	 */
-+	static final Partition[] getPartitionTypes() {
-+		return partitionTypes;
-+	}
-+
-+	/**
-+	 * @return an array of Strings which identify the content types of the various types of
-+	 *         partition for a photran file
-+	 */
-+	static final String[] getContentTypes() {
-+		String[] contentTypes = new String[partitionTypes.length];
-+		for (int i = 0; i < partitionTypes.length; i++)
-+			contentTypes[i] = partitionTypes[i].getContentType();
-+		return contentTypes;
-+	}
-+
-+	/**
-+	 * @param terminal a terminal ID, from the Terminal class
-+	 * @return the name of the partition (one of the String constants above) corresponding to that
-+	 *         terminal
-+	 */
-+	private String mapTerminalToPartitionType(Terminal terminal) {
-+		if (terminal == Terminal.T_SCON)
-+			return F90_STRING_CONSTANTS_PARTITION;
-+		if (terminal == Terminal.T_IDENT)
-+			return F90_IDENTIFIER_PARTITION;
-+		if (ListOfWordsToIndent.checkIfKeywordNeedsRightIndentation(terminal))
-+			return F90_KEYWORD_PARTITION_WITH_INDENTATION_RIGHT;
-+		if (ListOfWordsToIndent.checkIfKeywordNeedsLeftIndentation(terminal))
-+			return F90_KEYWORD_PARTITION_WITH_INDENTATION_LEFT;
-+		return F90_KEYWORD_PARTITION;
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#connect(org.eclipse.jface.text.IDocument)
-+	 */
-+	public void connect(IDocument document) {
-+		doc = document;
-+		documentChanged(null);
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#disconnect()
-+	 */
-+	public void disconnect() {
-+		doc = null;
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
-+	 */
-+	public void documentAboutToBeChanged(DocumentEvent event) {
-+
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#documentChanged(org.eclipse.jface.text.DocumentEvent)
-+	 */
-+	public boolean documentChanged(DocumentEvent event) {
-+		// System.out.println("documentChanged");
-+		int endOfLastPartition = -1;
-+		// Get the text of the current document
-+		String documentText = doc.get();
-+
-+		ArrayList newPartitions = new ArrayList();
-+
-+		try {
-+			// Run it through the lexer
-+			ILexer lexer = Lexer.createLexer(new ByteArrayInputStream(doc.get()
-+					.getBytes()), this.filename, isFixedForm);
-+
-+			// Create a partition for each token in the document, as well as
-+			// a partition for the space between tokens
-+			Token token;
-+			Terminal terminal;
-+			for (token = null, terminal = null; (terminal = (token = lexer
-+					.yylex()).getTerminal()) != Terminal.END_OF_INPUT;) {
-+				// JO: The fixed form lexer puts these in the stream
-+				// out of order, and they don't really matter to us
-+				// anyway since they're just whitespace
-+				if (terminal == Terminal.T_EOS)
-+					continue;
-+
-+				int offset = token.getOffset();
-+				int length = token.getLength();
-+				String type = mapTerminalToPartitionType(terminal);
-+				// we know that the parser is initialized and is scanning!
-+				// but is it not returning the right offsets or the right types
-+				// System.err.println("offset: " + offset + " length: " + length
-+				// + " type: " + type + " text: " + token.getText());
-+
-+				// Is there space between the last partition and this one?
-+				// Fill it!
-+				if (endOfLastPartition < offset) {
-+					int beginningOfGap = endOfLastPartition + 1;
-+					int lengthOfGap = offset - endOfLastPartition - 1;
-+					newPartitions.add(new TypedRegion(beginningOfGap,
-+							lengthOfGap, F90_CODE_PARTITION));
-+				}
-+
-+				// And make a new partition
-+				newPartitions.add(new TypedRegion(offset, length, type));
-+
-+				endOfLastPartition = offset + length - 1;
-+			}
-+		} catch (FileNotFoundException e) {
-+			e.printStackTrace();
-+		} catch (Exception e1) {
-+			// Ignore lexer exceptions (e.g., unterminated string constant)
-+			e1.printStackTrace();
-+		}
-+
-+		// Is there a gap between the last token and the end of the document?
-+		// Assume it's code...
-+		if (endOfLastPartition < documentText.length() - 1) {
-+			int beginningOfGap = endOfLastPartition + 1;
-+			int lengthOfGap = documentText.length() - endOfLastPartition - 1;
-+			newPartitions.add(new TypedRegion(beginningOfGap, lengthOfGap,
-+					F90_CODE_PARTITION));
-+		}
-+
-+		// case for empty document
-+
-+		if (newPartitions.size() == 0)
-+			newPartitions.add(new TypedRegion(0, 0, F90_CODE_PARTITION));
-+
-+		// We should return true iff the partitioning has changed
-+		if (newPartitions.equals(partitions))
-+			return false;
-+		else {
-+			partitions = newPartitions;
-+
-+			return true;
-+		}
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#getLegalContentTypes()
-+	 */
-+	public String[] getLegalContentTypes() {
-+		return getContentTypes();
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#getContentType(int)
-+	 */
-+	public String getContentType(int offset) {
-+		int partitionNum = findRegionContainingOffset(offset);
-+		if (partitionNum >= 0)
-+			return ((ITypedRegion) partitions.get(partitionNum)).getType();
-+		else
-+			// Assume it's part of some code...
-+			return F90_CODE_PARTITION;
-+
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#computePartitioning(int, int)
-+	 */
-+	public ITypedRegion[] computePartitioning(int offset, int length) {
-+
-+		int firstRegion = findRegionContainingOffset(offset);
-+		int lastRegion = findRegionContainingOffset(offset + length - 1);
-+
-+		if (firstRegion < 0)
-+			throw new Error("No region contains start offset " + offset + "!");
-+		if (lastRegion < 0)
-+			lastRegion = partitions.size() - 1;
-+
-+		ITypedRegion[] ret = new ITypedRegion[lastRegion - firstRegion + 1];
-+		partitions.subList(firstRegion, lastRegion + 1).toArray(ret);
-+		return ret;
-+	}
-+
-+	/*
-+	 * (non-Javadoc)
-+	 * 
-+	 * @see org.eclipse.jface.text.IDocumentPartitioner#getPartition(int)
-+	 */
-+	public ITypedRegion getPartition(int offset) {
-+		int partitionNum = findRegionContainingOffset(offset);
-+
-+		ITypedRegion lastPartition = (ITypedRegion) partitions.get(partitions
-+				.size() - 1);
-+		int lastOffsetOfLastPartition = lastPartition.getOffset()
-+				+ lastPartition.getLength() - 1;
-+		if (partitionNum < 0) {
-+			if (offset > lastOffsetOfLastPartition) {
-+				// Add a new partition to the end
-+				int newPartitionStart = lastOffsetOfLastPartition + 1;
-+				int newPartitionLength = offset - newPartitionStart + 1;
-+				partitions.add(new TypedRegion(newPartitionStart,
-+						newPartitionLength, F90_CODE_PARTITION));
-+				partitionNum = partitions.size() - 1;
-+			} else
-+				throw new Error("No region contains offset " + offset + "!");
-+		}
-+
-+		return (ITypedRegion) partitions.get(partitionNum);
-+
-+	}
-+
-+	private int findRegionContainingOffset(int offset) {
-+		for (int i = 0; i < partitions.size(); i++) {
-+			ITypedRegion region = (ITypedRegion) partitions.get(i);
-+			int firstCharOffset = region.getOffset();
-+			int lastCharOffset = firstCharOffset + region.getLength() - 1;
-+			if (firstCharOffset <= offset && lastCharOffset >= offset)
-+				return i;
-+		}
-+		return -1;
-+	}
- }
-Index: src/org/eclipse/photran/internal/ui/editor/FortranSourceViewerConfiguration.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/FortranSourceViewerConfiguration.java,v
-retrieving revision 1.1
-diff -u -r1.1 FortranSourceViewerConfiguration.java
---- src/org/eclipse/photran/internal/ui/editor/FortranSourceViewerConfiguration.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/FortranSourceViewerConfiguration.java	16 Oct 2005 07:51:10 -0000
-@@ -3,7 +3,11 @@
- import java.util.ArrayList;
- import java.util.List;
- 
-+import org.eclipse.cdt.internal.ui.text.CAutoIndentStrategy;
-+import org.eclipse.cdt.internal.ui.text.CCommentAutoIndentStrategy;
-+import org.eclipse.cdt.internal.ui.text.ICPartitions;
- import org.eclipse.jface.preference.IPreferenceStore;
-+import org.eclipse.jface.text.IAutoEditStrategy;
- import org.eclipse.jface.text.IDocument;
- import org.eclipse.jface.text.ITextDoubleClickStrategy;
- import org.eclipse.jface.text.TextAttribute;
-@@ -104,6 +108,16 @@
- 			ISourceViewer sourceViewer, String contentType) {
- 		return doubleClickStrategy;
- 	}
-+	
-+	// ----- AUTO-INDENTING STRATEGY ------------------------------------------
-+	/* (non-Javadoc)
-+	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
-+	 */
-+	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
-+
-+		
-+		return new IAutoEditStrategy[] {new FortranAutoIndentStrategy(editor instanceof FortranFreeFormEditor)};
-+	}
- 
- 	// ----- SYNTAX HIGHLIGHTING -----------------------------------------------
- 
-Index: src/org/eclipse/photran/internal/ui/editor/TabConverter.java
-===================================================================
-RCS file: /cvsroot/technology/org.eclipse.photran/org.eclipse.photran.ui/src/org/eclipse/photran/internal/ui/editor/TabConverter.java,v
-retrieving revision 1.1
-diff -u -r1.1 TabConverter.java
---- src/org/eclipse/photran/internal/ui/editor/TabConverter.java	29 Sep 2005 19:08:24 -0000	1.1
-+++ src/org/eclipse/photran/internal/ui/editor/TabConverter.java	16 Oct 2005 07:51:10 -0000
-@@ -8,6 +8,8 @@
- import org.eclipse.jface.text.IDocument;
- import org.eclipse.jface.text.ILineTracker;
- import org.eclipse.jface.text.IRegion;
-+import org.eclipse.jface.text.ITextSelection;
-+import org.eclipse.jface.viewers.ISelection;
- 
- /**
-  * @author nchen
-@@ -20,6 +22,7 @@
- 
- 	private ILineTracker fLineTracker;
- 
-+
- 	public TabConverter() {
- 	}
- 
-@@ -49,11 +52,10 @@
- 		if (text == null)
- 			return;
- 
--		int index = text.indexOf('\t');
-+		int index = text.indexOf('\t');// + text.indexOf('\n');
- 		if (index > -1) {
- 
- 			StringBuffer buffer = new StringBuffer();
--
- 			fLineTracker.set(command.text);
- 			int lines = fLineTracker.getNumberOfLines();
- 
-@@ -75,7 +77,7 @@
- 					int length = line.length();
- 					for (int j = 0; j < length; j++) {
- 						char c = line.charAt(j);
--						if (c == '\t') {
-+						if (c == '\t') { // a tab has been inserted
- 							position += insertTabString(buffer, position);
- 						} else {
- 							buffer.append(c);
-@@ -88,6 +90,7 @@
- 				command.text = buffer.toString();
- 
- 			} catch (BadLocationException x) {
-+				x.printStackTrace();
- 			}
- 		}
- 	}
-Index: src/org/eclipse/photran/internal/ui/editor/FortranAutoIndentStrategy.java
-===================================================================
-RCS file: src/org/eclipse/photran/internal/ui/editor/FortranAutoIndentStrategy.java
-diff -N src/org/eclipse/photran/internal/ui/editor/FortranAutoIndentStrategy.java
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ src/org/eclipse/photran/internal/ui/editor/FortranAutoIndentStrategy.java	1 Jan 1970 00:00:00 -0000
-@@ -0,0 +1,189 @@
-+/*******************************************************************************
-+ * Copyright (c) 2000 2005 IBM Corporation and others.
-+ * All rights reserved. This program and the accompanying materials
-+ * are made available under the terms of the Eclipse Public License v1.0
-+ * which accompanies this distribution, and is available at
-+ * http://www.eclipse.org/legal/epl-v10.html
-+ *
-+ * Contributors:
-+ *     IBM Corporation - initial API and implementation
-+ *     QNX Software System
-+ *******************************************************************************/
-+package org.eclipse.photran.internal.ui.editor;
-+
-+import org.eclipse.jface.text.BadLocationException;
-+import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy;
-+import org.eclipse.jface.text.DocumentCommand;
-+import org.eclipse.jface.text.IDocument;
-+import org.eclipse.jface.text.IDocumentPartitioner;
-+import org.eclipse.jface.text.ITypedRegion;
-+import org.eclipse.photran.internal.core.f95parser.Terminal;
-+import org.eclipse.photran.internal.ui.preferences.FortranFreeFormSpacePreferencePage;
-+
-+import org.eclipse.cdt.ui.CUIPlugin;
-+
-+/**
-+ * Auto indent strategy sensitive to brackets.
-+ */
-+public class FortranAutoIndentStrategy extends
-+		DefaultIndentLineAutoEditStrategy {
-+
-+	private boolean isFreeForm;
-+
-+	public FortranAutoIndentStrategy(boolean isFreeForm) {
-+		this.isFreeForm = isFreeForm;
-+	}
-+
-+	protected void smartIndentAfterNewLine(IDocument d, DocumentCommand c) {
-+		int docLength = d.getLength();
-+		if (c.offset == -1 || docLength == 0)
-+			return;
-+
-+		try {
-+			int p = (c.offset == docLength ? c.offset - 1 : c.offset);
-+			int line = d.getLineOfOffset(p); // our current line
-+
-+			StringBuffer buf = new StringBuffer(c.text);
-+			int start = d.getLineOffset(line);
-+			int whiteend = findEndOfWhiteSpace(d, start, c.offset);
-+			buf.append(d.get(start, whiteend - start));
-+			if (isIndentRightWord(d, whiteend)) {
-+				buf.append('\t');
-+			}
-+			c.text = buf.toString();
-+
-+		} catch (BadLocationException excp) {
-+			excp.printStackTrace();
-+		}
-+	}
-+
-+	private boolean isIndentRightWord(IDocument doc, int firstChar) {
-+		// ITypedRegion = doc.getDocumentPartitioner().getPartition(firstChar);
-+		String partitionType = doc.getDocumentPartitioner().getPartition(
-+				firstChar).getType();
-+		if (partitionType
-+				.equals(FortranPartitionScanner.F90_KEYWORD_PARTITION_WITH_INDENTATION_RIGHT)) {
-+			return true;
-+		}
-+		return false;
-+	}
-+
-+	/**
-+	 * Returns whether the text ends with one of the given search strings.
-+	 */
-+	private boolean endsWithDelimiter(IDocument d, String txt) {
-+		String[] delimiters = d.getLegalLineDelimiters();
-+
-+		for (int i = 0; i < delimiters.length; i++) {
-+			if (txt.endsWith(delimiters[i]))
-+				return true;
-+		}
-+		return false;
-+	}
-+
-+	/**
-+	 * @see IAutoIndentStrategy#customizeDocumentCommand
-+	 */
-+	public void customizeDocumentCommand(IDocument d, DocumentCommand c) {
-+		if (c.length == 0 && c.text != null && endsWithDelimiter(d, c.text))
-+			smartIndentAfterNewLine(d, c);
-+		else if (soonToContainsEnd(d, c)) {
-+			smartUnindentAfterEnd(d, c);
-+		}
-+	}
-+
-+	/**
-+	 * Unindents the line by the number indicated in the preference pane
-+	 * 
-+	 * @param doc
-+	 * @param command
-+	 */
-+	private void smartUnindentAfterEnd(IDocument doc, DocumentCommand command) {
-+		if (command.offset == -1 || doc.getLength() == 0)
-+			return;
-+
-+		try {
-+			int p = (command.offset == doc.getLength() ? command.offset - 1
-+					: command.offset);
-+			int line = doc.getLineOfOffset(p);
-+			int startOfLineOffset = doc.getLineOffset(line);
-+			int whiteend = findEndOfWhiteSpace(doc, startOfLineOffset,
-+					command.offset);
-+
-+			if (whiteend != command.offset) {
-+
-+				int offsetOfLine = findEndOfWhiteSpace(doc, doc
-+						.getLineOffset(line), doc.getLineOffset(line)
-+						+ doc.getLineLength(line));
-+				int numberOfSpacesOnLeft = offsetOfLine
-+						- doc.getLineOffset(line);
-+
-+				if (isFreeForm)
-+					numberOfSpacesOnLeft -= FortranFreeFormSpacePreferencePage
-+							.getTabSize();
-+				else
-+					numberOfSpacesOnLeft -= FortranFixedFormEditor.COLUMM_6_WIDTH;
-+
-+				if (numberOfSpacesOnLeft >= 0) {
-+					// convert to number of spaces
-+					String spaces = "";
-+					for (int i = 0; i < numberOfSpacesOnLeft; i++)
-+						spaces += " ";
-+
-+					StringBuffer replaceText = new StringBuffer(spaces);
-+
-+					// add the rest of the current line including the just added
-+					replaceText.append(doc.get(whiteend, command.offset
-+							- whiteend));
-+					replaceText.append(command.text);
-+					// modify document command
-+					command.length = command.offset - startOfLineOffset;
-+					command.offset = startOfLineOffset;
-+					command.text = replaceText.toString();
-+				}
-+			}
-+		} catch (BadLocationException excp) {
-+			excp.printStackTrace();
-+		}
-+
-+	}
-+
-+	/**
-+	 * Returns true if after inserting the current character we have end
-+	 * 
-+	 * @param doc
-+	 * @param command
-+	 * @return whether we have end
-+	 * 
-+	 * Using simple character mathing instead of the parser so that it works
-+	 * even if the lexer is not available; in the case of Free Form with more
-+	 * than a 1000 lines
-+	 */
-+	private boolean soonToContainsEnd(IDocument doc, DocumentCommand command) {
-+		if (command.offset == -1 || doc.getLength() == 0)
-+			return false;
-+
-+		try {
-+			// convert all matches to lowercase since
-+			int commandOffset = (command.offset == doc.getLength() ? command.offset - 1
-+					: command.offset);
-+			int line = doc.getLineOfOffset(commandOffset); // our current line
-+			int start = doc.getLineOffset(line);
-+			int whiteend = findEndOfWhiteSpace(doc, start, command.offset);
-+
-+			// if c equals d and after appending this we have "end"
-+			if ("d".equals(command.text.toLowerCase())) {
-+				int end = doc.getLineOffset(line) + doc.getLineLength(line)
-+						- whiteend;
-+				if (doc.get(whiteend, end).toLowerCase().equals("en")) {
-+					return true;
-+				}
-+			}
-+		} catch (BadLocationException e) {
-+			e.printStackTrace();
-+		}
-+		return false;
-+
-+	}
-+
-+}
-Index: src/org/eclipse/photran/internal/ui/editor/ListOfWordsToIndent.java
-===================================================================
-RCS file: src/org/eclipse/photran/internal/ui/editor/ListOfWordsToIndent.java
-diff -N src/org/eclipse/photran/internal/ui/editor/ListOfWordsToIndent.java
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ src/org/eclipse/photran/internal/ui/editor/ListOfWordsToIndent.java	1 Jan 1970 00:00:00 -0000
-@@ -0,0 +1,111 @@
-+package org.eclipse.photran.internal.ui.editor;
-+
-+import java.util.HashSet;
-+
-+import org.eclipse.photran.internal.core.f95parser.Terminal;
-+
-+/**
-+ * @author nchen
-+ * @author cheah
-+ * 
-+ * This returns an hashtable of words that require indentation in Fortran The
-+ * FortranPartitionScanner class would then make use of it as it checks to see
-+ * if we will auto-indent or not.
-+ * 
-+ */
-+public class ListOfWordsToIndent {
-+
-+	/**
-+	 * @author cheah
-+	 * @author nchen
-+	 *
-+	 * This class stores a tuple
-+	 */
-+	static class Pair {
-+		public Object fFirst = null;
-+
-+		public Object fSecond = null;
-+
-+		public Pair(Object first, Object second) {
-+			fFirst = first;
-+			fSecond = second;
-+		}
-+
-+		/*
-+		 * String accessors
-+		 */
-+		public String firstAsString() {
-+			return (String) fFirst;
-+		}
-+
-+		public String secondAsString() {
-+			return (String) fSecond;
-+		}
-+	}
-+
-+	// Augment this list as necessary
-+	private static Pair[] fortranKeywordsPairs = new Pair[] {
-+			new Pair(Terminal.T_PROGRAM, Terminal.T_ENDPROGRAM),
-+			new Pair(Terminal.T_FUNCTION, Terminal.T_ENDFUNCTION),
-+			new Pair(Terminal.T_SUBROUTINE, Terminal.T_ENDSUBROUTINE),
-+			new Pair(Terminal.T_MODULE, Terminal.T_ENDMODULE),
-+			new Pair(Terminal.T_BLOCKDATA, Terminal.T_ENDBLOCKDATA),
-+			new Pair(Terminal.T_TYPE, Terminal.T_ENDTYPE),
-+			new Pair(Terminal.T_FORALL, Terminal.T_ENDFORALL),
-+			new Pair(Terminal.T_WHERE, Terminal.T_ENDWHERE),
-+			new Pair(Terminal.T_ELSEWHERE, Terminal.T_ENDWHERE),
-+			new Pair(Terminal.T_IF, Terminal.T_ENDIF),
-+			new Pair(Terminal.T_ELSEIF, Terminal.T_ENDIF),
-+			new Pair(Terminal.T_SELECTCASE, Terminal.T_ENDSELECT),
-+			new Pair(Terminal.T_CASE, Terminal.T_END),
-+			new Pair(Terminal.T_DO, Terminal.T_ENDDO),
-+			new Pair(Terminal.T_INTERFACE, Terminal.T_ENDINTERFACE) };
-+
-+	private static HashSet wordsToIndentRight = new HashSet();
-+	
-+	private static HashSet wordsToIndentLeft = new HashSet();
-+	
-+	private static ListOfWordsToIndent uniqueInstance;
-+
-+	// Singleton
-+	private ListOfWordsToIndent() {
-+		//generate the hashtable from the list of keywords
-+		for (int index = 0; index < fortranKeywordsPairs.length; index++) {
-+			wordsToIndentRight.add((Terminal)(fortranKeywordsPairs[index].fFirst));
-+		}
-+		
-+		// add the one and only terminal to indent left
-+		wordsToIndentLeft.add((Terminal)Terminal.T_END);
-+	}
-+
-+	/**
-+	 * Singleton implementation
-+	 * @return the unique instance
-+	 */
-+	public static ListOfWordsToIndent getListOfWordsToIndentInstance() {
-+		if (uniqueInstance == null)
-+			uniqueInstance = new ListOfWordsToIndent();
-+
-+		return uniqueInstance;
-+	}
-+
-+	/**
-+	 * Checks to see if the keyword causes indentation
-+	 * @param terminal
-+	 * @return
-+	 */
-+	public static boolean checkIfKeywordNeedsRightIndentation(Terminal terminal) {
-+		return getListOfWordsToIndentInstance().wordsToIndentRight
-+				.contains(terminal);
-+	}
-+	
-+	/**
-+	 * Checks to see if the keyword causes indentation
-+	 * @param terminal
-+	 * @return
-+	 */
-+	public static boolean checkIfKeywordNeedsLeftIndentation(Terminal terminal) {
-+		return getListOfWordsToIndentInstance().wordsToIndentLeft
-+				.contains(terminal);
-+	}
-+}
-
-
diff --git a/org.eclipse.photran-samples/.cdtproject b/org.eclipse.photran-samples/.cdtproject
deleted file mode 100644
index 8802934..0000000
--- a/org.eclipse.photran-samples/.cdtproject
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse-cdt version="2.0"?>
-
-<cdtproject id="org.eclipse.cdt.make.core.make">
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.XCOFF32" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="cygpath" value="cygpath"/>
-<attribute key="c++filt" value="c++filt"/>
-<attribute key="nm" value="nm"/>
-</extension>
-<extension id="org.eclipse.cdt.core.MachO" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.nullindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<data>
-<item id="scannerConfiguration">
-<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-</item>
-<item id="org.eclipse.cdt.core.pathentry">
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-<pathentry kind="src" path="src-fixed-form"/>
-<pathentry kind="src" path="src-fortran-and-c"/>
-<pathentry kind="src" path="src-gaussian-elimination"/>
-<pathentry kind="src" path="src-includes"/>
-<pathentry kind="src" path="src-language-features"/>
-<pathentry kind="src" path="src-line-fitting"/>
-<pathentry kind="src" path="src-modules"/>
-<pathentry kind="src" path="src-scoping"/>
-<pathentry kind="src" path="src-implicits-1"/>
-<pathentry kind="src" path="src-implicits-2"/>
-<pathentry kind="src" path="src-implicits-3"/>
-</item>
-<item id="org.eclipse.cdt.make.core.buildtargets">
-<buildTargets>
-<target name="all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments></buildArguments>
-<buildTarget>all</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-</target>
-<target name="clean" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments></buildArguments>
-<buildTarget>clean</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-</target>
-</buildTargets>
-</item>
-</data>
-</cdtproject>
diff --git a/org.eclipse.photran-samples/.cproject b/org.eclipse.photran-samples/.cproject
deleted file mode 100644
index 7483ff2..0000000
--- a/org.eclipse.photran-samples/.cproject
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?fileVersion 4.0.0?>
-
-<cproject>
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="converted.config.1543524045">
-<storageModule moduleId="scannerConfiguration">
-<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="false" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-</storageModule>
-
-
-<storageModule buildSystemId="org.eclipse.cdt.core.defaultConfigDataProvider" id="converted.config.1543524045" moduleId="org.eclipse.cdt.core.settings" name="convertedConfig">
-<externalSettings/>
-<extensions>
-<extension id="org.eclipse.cdt.core.nullindexer" point="org.eclipse.cdt.core.CIndexer"/>
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.XCOFF32" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="addr2line" value="addr2line"/>
-<attribute key="cygpath" value="cygpath"/>
-<attribute key="nm" value="nm"/>
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-<extension id="org.eclipse.cdt.core.MachO" point="org.eclipse.cdt.core.BinaryParser">
-<attribute key="c++filt" value="c++filt"/>
-</extension>
-</extensions>
-</storageModule>
-
-<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
-<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-
-
-<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
-<buildTargets>
-<target name="all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments/>
-<buildTarget>all</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-<runAllBuilders>true</runAllBuilders>
-</target>
-<target name="clean" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments/>
-<buildTarget>clean</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-<runAllBuilders>true</runAllBuilders>
-</target>
-<target name="all" path="src-fortran2003" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments/>
-<buildTarget>all</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-<runAllBuilders>true</runAllBuilders>
-</target>
-<target name="clean" path="src-fortran2003" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
-<buildCommand>make</buildCommand>
-<buildArguments/>
-<buildTarget>clean</buildTarget>
-<stopOnError>false</stopOnError>
-<useDefaultCommand>true</useDefaultCommand>
-<runAllBuilders>true</runAllBuilders>
-</target>
-</buildTargets>
-</storageModule>
-<storageModule moduleId="org.eclipse.cdt.core.pathentry">
-<pathentry kind="out" path=""/>
-<pathentry kind="con" path="org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"/>
-<pathentry kind="src" path="src-fixed-form-1"/>
-<pathentry kind="src" path="src-fixed-form-2"/>
-<pathentry kind="src" path="src-fortran-and-c"/>
-<pathentry kind="src" path="src-fortran2003"/>
-<pathentry kind="src" path="src-gaussian-elimination"/>
-<pathentry kind="src" path="src-includes"/>
-<pathentry kind="src" path="src-language-features"/>
-<pathentry kind="src" path="src-liebmann-1-eoshift"/>
-<pathentry kind="src" path="src-liebmann-2-arrays"/>
-<pathentry kind="src" path="src-liebmann-3-loops"/>
-<pathentry kind="src" path="src-line-fitting"/>
-<pathentry kind="src" path="src-modules"/>
-<pathentry kind="src" path="src-scoping"/>
-<pathentry kind="src" path="src-implicits-1"/>
-<pathentry kind="src" path="src-implicits-2"/>
-<pathentry kind="src" path="src-implicits-3"/>
-<pathentry kind="src" path="src-common"/>
-<pathentry kind="src" path="src-cray-pointers"/>
-</storageModule>
-</cconfiguration>
-</storageModule>
-</cproject>
diff --git a/org.eclipse.photran-samples/.project b/org.eclipse.photran-samples/.project
deleted file mode 100644
index 39247cb..0000000
--- a/org.eclipse.photran-samples/.project
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.photran-samples</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.makeBuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>org.eclipse.cdt.core.errorOutputParser</key>
-					<value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;org.eclipse.photran.core.intel.IntelCompilerErrorParser;org.eclipse.photran.core.AbsoftErrorParser;org.eclipse.photran.core.XLFErrorParser;org.eclipse.photran.core.GFortranErrorParser;org.eclipse.photran.core.IntelFortranErrorParser;org.eclipse.photran.core.LaheyFortranErrorParser;org.eclipse.photran.core.G95FortranErrorParser;org.eclipse.photran.core.NAGErrorParser;org.eclipse.photran.core.PGIErrorParser;org.eclipse.photran.errorparsers.xlf.XLFCompilerErrorParser;</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.arguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.command</key>
-					<value>make</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.location</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.auto</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.clean</key>
-					<value>clean</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.build.target.inc</key>
-					<value>all</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.environment</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.make.core.makeNature</nature>
-		<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.photran-samples/.settings/org.eclipse.cdt.core.prefs b/org.eclipse.photran-samples/.settings/org.eclipse.cdt.core.prefs
deleted file mode 100644
index b208aeb..0000000
--- a/org.eclipse.photran-samples/.settings/org.eclipse.cdt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Wed Aug 15 15:14:22 MDT 2007
-eclipse.preferences.version=1
-indexer/indexerId=org.eclipse.cdt.core.nullindexer
-indexerId=org.eclipse.cdt.core.nullindexer
diff --git a/org.eclipse.photran-samples/.settings/scoped_pref_store.prefs b/org.eclipse.photran-samples/.settings/scoped_pref_store.prefs
deleted file mode 100644
index 40c0f9b..0000000
--- a/org.eclipse.photran-samples/.settings/scoped_pref_store.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Mon Jul 27 12:02:55 CDT 2009
-EnableContentAssist=true
-EnableDeclView=true
-EnableHoverTip=true
-EnableVPG=true
-eclipse.preferences.version=1
diff --git a/org.eclipse.photran-samples/Makefile b/org.eclipse.photran-samples/Makefile
deleted file mode 100644
index 35b9b86..0000000
--- a/org.eclipse.photran-samples/Makefile
+++ /dev/null
@@ -1,63 +0,0 @@
-# Generic makefile deletes all programs corresponding to .f90 files and rebuilds them
-# Expects to run under bash
-#
-# Jeff Overbey
-#
-# Note - pattern substitution: $(patsubst %.f90,%.exe,$(wildcard *.f90))
-
-# Command to run your Fortran compiler
-FORTRAN=`which gfortran ifort 2>/dev/null | head -1`
-DEBUGSWITCH=-g
-INCLUDESWITCH=-I
-LIBSWITCH=-L
-CRAYSWITCH=-fcray-pointer
-OPTSWITCH=-O4
-OUTSWITCH=-o
-EXEFILE=a.exe
-
-# In each of these directories, all of the sources will be compiled into a single executable
-#SRCDIRS=$(filter-out src-fortran2003, $(wildcard src-*))
-SRCDIRS=$(wildcard src-*)
-
-# Here we do not use $(wildcard) to delay expansion until the shell is invoked
-SRCFILES=*.f*
-OBJFILES=*.o *.obj
-OTHERFILES=*.mod *.fwd *.map *.ydg
-EXEFILES=$(EXEFILE) *.exe
-
-all:	clean build
-
-clean:
-	for dir in $(SRCDIRS) .; do \
-	  cd $$dir; \
-	  rm -f $(OBJFILES) >/dev/null 2>&1; \
-	  rm -f $(OTHERFILES) >/dev/null 2>&1; \
-	  rm -f $(EXEFILES) >/dev/null 2>&1; \
-	  cd ..; \
-	done
-
-build:
-	@echo "=====>" Using compiler $(FORTRAN)
-	@for dir in $(SRCDIRS); do \
-	  if [ -e $$dir/Makefile ]; then \
-	    $(MAKE) -C $$dir; \
-	  else \
-	    echo "=====>" Begin compiling sources in $$dir; \
-	    $(FORTRAN) $(DEBUGSWITCH) \
-	               $(OUTSWITCH) $$dir/$(EXEFILE) \
-	               $(INCLUDESWITCH). \
-	               $(INCLUDESWITCH)$$dir \
-	               $(LIBSWITCH). \
-	               $(LIBSWITCH)$$dir \
-	               $(OPTSWITCH) \
-	               $(CRAYSWITCH) \
-	               $$dir/$(SRCFILES); \
-	    echo "<=====" Done compiling sources in $$dir; \
-	  fi \
-	done
-	@for dir in $(SRCDIRS) .; do \
-	  cd $$dir; \
-	  rm -f $(OBJFILES) >/dev/null 2>&1; \
-	  rm -f $(OTHERFILES) >/dev/null 2>&1; \
-	  cd ..; \
-	done
diff --git a/org.eclipse.photran-samples/liebmann-viz.gif b/org.eclipse.photran-samples/liebmann-viz.gif
deleted file mode 100644
index f0a3886..0000000
--- a/org.eclipse.photran-samples/liebmann-viz.gif
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.photran-samples/liebmann-viz.sh b/org.eclipse.photran-samples/liebmann-viz.sh
deleted file mode 100644
index c8216af..0000000
--- a/org.eclipse.photran-samples/liebmann-viz.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-#
-# Runs src-liebmann-3-loops/a.exe, which outputs a 2-D matrix of real numbers,
-# and then feeds this matrix to gnuplot to generate a visualization, which
-# is saved as liebmann-viz.gif.
-#
-# J. Overbey 8/27/08
-#
-
-src-liebmann-3*/a.exe >data
-
-cat <<EOF | gnuplot
-#==GNUPLOT INPUT=================================================================
-set term gif
-set output "liebmann-viz.gif"
-
-#set pm3d       # 1a. Normal
- set pm3d map   # 1b. Display a 2-D color gradient rather than the 3-D visualization
-#set pm3d at b  # 1c. Display a 2-D color gradient under the 3-D visualization
-
-#                                                                  # 2a. Nothing = Black to yellow via blue and red
-#set palette model XYZ functions gray**0.35, gray**0.5, gray**0.8  # 2b. Brown to yellow
- set palette model XYZ functions gray**0.3, gray**0.5, 0           # 2b. Dark red to yellow (Jeff)
-#set palette model XYZ functions gray**0.8, gray**0.5, gray**0.35  # 2c. Green to yellow
-#set palette rgbformulae 21,22,23                                  # 2d. Black to red to yellow to white
-#set palette rgbformulae 22,13,-31                                 # 2e. Blue to green to yellow to red
-#set palette defined (0 "black", 2.5 "red", 5 "yellow")
-
- splot 'data' matrix notitle             # 3a. Plot normally
-#splot 'data' matrix notitle with pm3d   # 3b. Colorize the 3-D visualization (set 1a above)
-
-#================================================================================
-EOF
-
-rm -f data
-
-echo "Visualization saved as liebmann-viz.gif"
-
-if [ `uname -s` == "Darwin" ]; then
-	open liebmann-viz.gif
-elif [ `which eog` != "" ]; then
-	eog liebmann-viz.gif
-fi
diff --git a/org.eclipse.photran-samples/src-common/.cvsignore b/org.eclipse.photran-samples/src-common/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-common/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-common/change_c.f90 b/org.eclipse.photran-samples/src-common/change_c.f90
deleted file mode 100644
index d028d90..0000000
--- a/org.eclipse.photran-samples/src-common/change_c.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-subroutine change_c
-    implicit none
-
-    ! Now k is the same as c in main.f90
-    common /common/ k
-    complex :: k
-
-    k = (5,6)
-end subroutine
diff --git a/org.eclipse.photran-samples/src-common/main.f90 b/org.eclipse.photran-samples/src-common/main.f90
deleted file mode 100644
index d322922..0000000
--- a/org.eclipse.photran-samples/src-common/main.f90
+++ /dev/null
@@ -1,50 +0,0 @@
-!!
-!! Demonstrates COMMON block nightmare
-!!
-!! J. Overbey 8/18/08
-!!
-program main
-    implicit none
-
-    external change_c
-
-    common a, b
-    integer :: a
-    real    :: b
-
-    common /common/ c, d, e /common2/ f, g, /common3/ h
-    complex :: c
-    dimension c(3)
-    ! double precision :: d, e, f, g, h
-    double precision :: d
-    double precision :: e
-    double precision :: f
-    double precision :: g
-    double precision :: h
-
-    a = 1
-    b = 2.3
-    c = (4,5)
-    print *, a, b, c
-
-    call change_ab
-    call change_c
-
-    print *, "Now the first two variables below should have garbage values"
-    print *, "and the third should be (5,6):"
-    print *, a, b, c
-end program
-
-subroutine change_ab
-    implicit none
-
-    ! q and r are stored at the same place in memory as a and b above,
-    ! but they have the wrong types
-    common q, r
-    real    :: q
-    integer :: r
-
-    q = 4.5
-    r = 6
-    print *, q, r
-end subroutine
diff --git a/org.eclipse.photran-samples/src-cray-pointers/.cvsignore b/org.eclipse.photran-samples/src-cray-pointers/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-cray-pointers/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-cray-pointers/cray-pointers.f90 b/org.eclipse.photran-samples/src-cray-pointers/cray-pointers.f90
deleted file mode 100644
index cc6ac70..0000000
--- a/org.eclipse.photran-samples/src-cray-pointers/cray-pointers.f90
+++ /dev/null
@@ -1,46 +0,0 @@
-! Examples using Cray pointers (non-standard extension)
-! Jeff Overbey 8/27/08
-
-implicit none
-
-call example1
-call example2
-call example3
-end
-
-! Example 1: Pointer to scalar
-subroutine example1()
-	integer :: pointer           ! A Cray pointer is just an integer
-	pointer (pointer, pointee)   ! We associate the pointer variable with another variable
-	real    :: pointee           ! To dereference the pointer, we read this variable
-
-	real :: value = 5.0
-
-	pointer = loc(value)
-	print *, pointee  ! = 5.0
-end subroutine
-
-! Example 2: Pointer to array, constant size
-subroutine example2()
-    integer :: pointer
-    real    :: pointee
-    pointer (pointer, pointee(5))
-
-    real :: array(5) = (/ 1.1, 2.2, 3.3, 4.4, 5.5 /)
-
-    pointer = loc(array)
-    print *, pointee(3)  ! = 3.3
-end subroutine
-
-! Example 3: Pointer to array, arbitrary size
-subroutine example3()
-    integer :: pointer
-    real    :: pointee
-    pointer (pointer, pointee(*))
-
-    real :: array(5) = (/ 1.1, 2.2, 3.3, 4.4, 5.5 /)
-
-    pointer = loc(array)
-    print *, pointee(-2)  ! = 3.3
-    print *, pointee(3)   ! = 3.3
-end subroutine
diff --git a/org.eclipse.photran-samples/src-fixed-form-1/.cvsignore b/org.eclipse.photran-samples/src-fixed-form-1/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-fixed-form-1/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-fixed-form-1/hello.f b/org.eclipse.photran-samples/src-fixed-form-1/hello.f
deleted file mode 100755
index 5e515bd..0000000
--- a/org.eclipse.photran-samples/src-fixed-form-1/hello.f
+++ /dev/null
@@ -1,14 +0,0 @@
-c Ugly fixed form hello world program demonstrates intelligent syntax highlighting
-      programasampleprogram
-        implicitreal(i)
-        if=0.0
-        if(sine(if).lt..00001)then                                      Variable if
-          print*,'Hello, old-school Fortran!'
-        endif
-        stop
-      c  o  n  t  a  i  n  s
-        realfunctionsine(x)
-          real,intent(in)::x
-          sine=sin(x)
-        endfunction
-      endprogramasampleprogram
\ No newline at end of file
diff --git a/org.eclipse.photran-samples/src-fixed-form-2/.cvsignore b/org.eclipse.photran-samples/src-fixed-form-2/.cvsignore
deleted file mode 100644
index 66fec5b..0000000
--- a/org.eclipse.photran-samples/src-fixed-form-2/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.exe
-*.mod
diff --git a/org.eclipse.photran-samples/src-fixed-form-2/Makefile b/org.eclipse.photran-samples/src-fixed-form-2/Makefile
deleted file mode 100644
index 8eb26a6..0000000
--- a/org.eclipse.photran-samples/src-fixed-form-2/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-# gfortran 4.4.0 cannot parse sample.f, so only compile if Intel Fortran is available
-
-.PHONY: all clean
-
-SRC=sample.f
-
-IFORT=`which ifort    2>/dev/null | head -1`
-DEBUGSWITCH=-g
-OPTSWITCH=-O4
-OUTSWITCH=-o
-
-all:
-	@if [ "$(IFORT)" != "" ]; then \
-	    for file in $(SRC); do \
-	        $(IFORT)  $(DEBUGSWITCH) \
-	                  $(OUTSWITCH) `echo $$file | sed -e 's/.f/.exe/'` \
-	                  $(OPTSWITCH) \
-	                  $$file; \
-	    done; \
-	fi
-
-clean:
-	rm -f *.exe *.mod
\ No newline at end of file
diff --git a/org.eclipse.photran-samples/src-fixed-form-2/sample.f b/org.eclipse.photran-samples/src-fixed-form-2/sample.f
deleted file mode 100644
index ea1288d..0000000
--- a/org.eclipse.photran-samples/src-fixed-form-2/sample.f
+++ /dev/null
@@ -1,14 +0,0 @@
-      program blah
-        integer :: xyz,y
-        xy                                                              sdfgsdfgsd
-     $  z = 3
-        y = 5
-        if(sin(y+0.0)
-     $  .lt.x)then                                                            Variable cr
-         print*,'Hello, old-school Fortran!'
-        endif
-      end pro
-     $      gram
-
-
-
diff --git a/org.eclipse.photran-samples/src-fortran-and-c/Makefile b/org.eclipse.photran-samples/src-fortran-and-c/Makefile
deleted file mode 100644
index 99ecf1a..0000000
--- a/org.eclipse.photran-samples/src-fortran-and-c/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# Requires g95 under Windows (since calling a C function; proprietary)
-
-clean:
-	rm -f a.exe *.o
-
-all:
-	gcc -g -c c.c
-	g95 -g -c fortran.f90
-	g95 -o a.exe c.o fortran.o
-	rm *.o
diff --git a/org.eclipse.photran-samples/src-fortran-and-c/c.c b/org.eclipse.photran-samples/src-fortran-and-c/c.c
deleted file mode 100644
index b21f9c1..0000000
--- a/org.eclipse.photran-samples/src-fortran-and-c/c.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void cfunction_()
-{
-	printf(" This is the C function\n");
-}
diff --git a/org.eclipse.photran-samples/src-fortran-and-c/fortran.f90 b/org.eclipse.photran-samples/src-fortran-and-c/fortran.f90
deleted file mode 100644
index eef8e42..0000000
--- a/org.eclipse.photran-samples/src-fortran-and-c/fortran.f90
+++ /dev/null
@@ -1,38 +0,0 @@
-  external cfunction  ! Defined in c.c
-
-  print *, 'This is the Fortran program; I am going to call the C function now...'
-  call cfunction()
-  call sum(1.0,2.0,3.0)
-  call factorial(3)
-  print *, 'Now we are back in Fortran again'
-
-contains
-
-  subroutine sum(x,y,z)
-
-  x = x+y+z
-
-  print *, x
-
-  end subroutine sum
-
-  subroutine factorial(j)
-
-  p=1
-  i=1
-  do i=1,j
-    p=p*i
-  end do
-
-  print *, j, "! = ", p
-
-  end subroutine factorial
-
-  subroutine sum2(x,y)
-
-  p = x+y
-
-  end subroutine sum2
-
-
-end
diff --git a/org.eclipse.photran-samples/src-fortran2003/.cvsignore b/org.eclipse.photran-samples/src-fortran2003/.cvsignore
deleted file mode 100644
index 66fec5b..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.exe
-*.mod
diff --git a/org.eclipse.photran-samples/src-fortran2003/01-class.f03 b/org.eclipse.photran-samples/src-fortran2003/01-class.f03
deleted file mode 100644
index cb50da6..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/01-class.f03
+++ /dev/null
@@ -1,23 +0,0 @@
-! Simple class -- JO 1/28/09
-module m
-	implicit none
-
-	type c
-	contains
-		procedure :: p
-	end type
-contains
-	subroutine p(self)
-		class(c), intent(in) :: self
-		print *, 'Hi'
-	end subroutine
-end module
-
-program Fortran2003
-	use m
-	implicit none
-
-	type(c) :: t
-	call t%p
-	stop
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/02-inheritance.f03 b/org.eclipse.photran-samples/src-fortran2003/02-inheritance.f03
deleted file mode 100644
index 5bf83e0..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/02-inheritance.f03
+++ /dev/null
@@ -1,40 +0,0 @@
-! Inheritance -- JO 1/28/09
-module m1
-	implicit none
-
-	type c
-		character(20) :: STR = 'Hey there'
-	contains
-		procedure :: p
-	end type
-contains
-	subroutine p(self)
-		class(c), intent(in) :: self
-		print *, 'Hi'
-	end subroutine
-end module
-
-module m2
-	use m1
-	implicit none
-
-	type, extends(c) :: c2
-	contains
-		procedure :: p => c2_p
-	end type
-contains
-	! Can't call this p
-	subroutine c2_p(self)
-		class(c2), intent(in) :: self
-		print *, self%STR
-	end subroutine
-end module
-
-program Fortran2003
-	use m2
-	implicit none
-
-	type(c2) :: t
-	call t%p
-	stop
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/03-destructor.f03 b/org.eclipse.photran-samples/src-fortran2003/03-destructor.f03
deleted file mode 100644
index b82eb20..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/03-destructor.f03
+++ /dev/null
@@ -1,66 +0,0 @@
-! Destructor -- JO 1/28/09
-module m1
-	implicit none
-	private
-
-	type, public :: c1
-		character(20) :: STR = 'Hey there'
-	contains
-		procedure :: p
-		final :: destructor
-	end type
-contains
-	subroutine p(self)
-		class(c1), intent(in) :: self
-		print *, 'Hi'
-	end subroutine
-
-	subroutine destructor(self)
-		type(c1), intent(in) :: self
-		print *, 'Bye'
-	end subroutine
-end module
-
-module m2
-	use m1
-	implicit none
-	private
-
-	type, extends(c1), public :: c2
-	contains
-		procedure :: p
-	end type
-contains
-	subroutine p(self)
-		class(c2), intent(in) :: self
-		print *, self%STR
-	end subroutine
-end module
-
-program Fortran2003
-	use m1
-	use m2
-	implicit none
-
-	type(c1), target :: c1obj
-	type(c2), target :: c2obj
-
-	class(c1), pointer :: c1ptr => null()
-	class(c2), pointer :: c2ptr => null()
-
-	allocate(c1ptr)
-	allocate(c2ptr)
-
-	c1ptr => c1obj
-	c2ptr => c2obj
-
-	call c1ptr%p
-	call c2ptr%p
-	c1ptr => c2ptr
-	call c1ptr%p
-
-	deallocate(c1ptr)
-	deallocate(c2ptr)
-
-	stop
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/Makefile b/org.eclipse.photran-samples/src-fortran2003/Makefile
deleted file mode 100644
index 303029a..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-.PHONY: all clean
-ALL_SRC=$(filter-out xlf-bug.f03 xlf-crash.f03, $(wildcard *.f03))
-
-############ WHICH FILES ARE COMPILED DEPENDS ON THE COMPILER #############
-
-XLF_SRC=$(ALL_SRC)
-
-NAGFOR_SRC=$(filter-out 03-destructor.f03 string.f03, $(ALL_SRC))
-
-###########################################################################
-
-XLF   =`which xlf    2>/dev/null | head -1`
-NAGFOR=`which nagfor 2>/dev/null | head -1`
-DEBUGSWITCH=-g
-OPTSWITCH=-O4
-OUTSWITCH=-o
-
-all:
-	@if [ "$(NAGFOR)" != "" ]; then \
-	    for file in $(NAGFOR_SRC); do \
-	        $(NAGFOR)  $(DEBUGSWITCH) \
-	                   $(OUTSWITCH) `echo $$file | sed -e 's/.f03/.exe/'` \
-	                   $(OPTSWITCH) \
-	                   $$file; \
-	    done; \
-	elif [ "$(XLF)" != "" ]; then \
-	    for file in $(XLF_SRC); do \
-	        $(XLF)     $(DEBUGSWITCH) \
-	                   $(OUTSWITCH) `echo $$file | sed -e 's/.f03/.exe/'` \
-	                   $(OPTSWITCH) \
-	                   $$file; \
-	    done; \
-	fi
-
-clean:
-	rm -f *.exe *.mod
\ No newline at end of file
diff --git a/org.eclipse.photran-samples/src-fortran2003/char-fn-test.f03 b/org.eclipse.photran-samples/src-fortran2003/char-fn-test.f03
deleted file mode 100644
index ba14363..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/char-fn-test.f03
+++ /dev/null
@@ -1,7 +0,0 @@
-! Test of a function returning a string -- JO 1/29/09
-  print *, c()
-contains
-  character(len=len("Hello")) function c()
-  	c = "Hello"
-  end function
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/nag-bug.f03 b/org.eclipse.photran-samples/src-fortran2003/nag-bug.f03
deleted file mode 100644
index df6837d..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/nag-bug.f03
+++ /dev/null
@@ -1,35 +0,0 @@
-! Demonstrates a parser bug in NAG Fortran Compiler Release 5.2(649)
-! NPLUX52NA for x86-32 Linux
-!
-! Line 34 reports a syntax error due to the empty parentheses ()
-! However, the statement should parse with
-!   pointer-assignment-stmt (R735)
-!     > data-target (R739)
-!     > expr (R722)
-!     > ...
-!     > primary (R701)
-!     > function-reference (R1217)
-!     > procedure-designator  "("  [actual-arg-spec-list]  ")"
-! where actual-arg-spec-list is marked as being optional and
-! procedure-designator (R1219) > data-ref "%" binding-name
-!
-! J. Overbey 2/23/09 - overbey2@illinois.edu
-module m
-    type t; contains; procedure :: ptr; end type
-contains
-    function ptr(self)
-        class(t), intent(in) :: self
-        class(*), pointer :: ptr
-        ptr => null()
-    end function
-end module
-
-program program
-    use m
-
-    class(t), pointer :: t_ptr
-    class(*), pointer :: any_ptr
-
-    allocate (t_ptr)
-    any_ptr => t_ptr%ptr()  ! <<<<<<<<<< Reported syntax error
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/params.f03 b/org.eclipse.photran-samples/src-fortran2003/params.f03
deleted file mode 100644
index 5f52560..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/params.f03
+++ /dev/null
@@ -1,22 +0,0 @@
-! Testing behavior of pass-by-reference
-
-integer, parameter :: q = 1
-
-call s(1)  ! Can't byref (literal)
-
-n = 1
-call s(n)  ! Can byref (variable)
-print *, "Expected:", 2, "Actual:", n
-
-call s(q)  ! Can't byref (parameter)
-print *, "Expected:", 1, "Actual:", q
-
-stop
-
-contains
-	subroutine s(p)
-		integer :: p
-		p = 2
-		print *, "Expected:", 2, "Actual:", p
-	end subroutine
-end
diff --git a/org.eclipse.photran-samples/src-fortran2003/stream-io.f03 b/org.eclipse.photran-samples/src-fortran2003/stream-io.f03
deleted file mode 100644
index c7637ea..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/stream-io.f03
+++ /dev/null
@@ -1,59 +0,0 @@
-!>
-!! Sample program demonstrates stream I/O in Fortran 2003.
-!!
-!! Jeff Overbey (2/22/09)
-!<
-program stream_io
-    implicit none
-
-    integer, parameter :: FILE = 2
-
-    call check_byte_kind
-    call create_file
-    call read_file
-    stop
-
-contains
-    subroutine check_byte_kind
-        integer(kind=1) :: byte = 127 + 1
-        integer         :: int  = 127 + 1
-        if (byte .ne. -128 .or. int .ne. 128) &
-            stop "integer(kind=1) is not one byte"
-    end subroutine
-
-    subroutine create_file
-        integer(kind=1) byte
-
-	    open (FILE, status='replace', action='write', access='stream', form='unformatted', file='bytes')
-	    write (FILE) transfer("A", byte)
-	    write (FILE) transfer("B", byte)
-	    write (FILE) new_line("x")
-	    write (FILE) transfer("C", byte)
-	    close (FILE)
-    end subroutine
-
-    subroutine read_file
-        integer(kind=1) byte
-        integer pos, status
-        character*256 :: errmsg
-
-	    open (FILE, status='old', action='read', access='stream', form='unformatted', file='bytes')
-	    do
-	        inquire (FILE, pos=pos)
-	        print *, "Position is", pos
-
-	        !read (FILE, pos=pos, iostat=status, iomsg=errmsg) byte
-	        read (FILE, iostat=status, iomsg=errmsg) byte
-	        if (status .eq. 0) then
-	            print '("Read byte ", i5, ", status is ", i5)', byte, status
-	        else if (is_iostat_end(status)) then
-	            exit
-	        else
-	            print *, errmsg
-	            stop "I/O error"
-	        end if
-	    end do
-	    print '("Read ", i5, " bytes")', pos-1
-	    close (FILE)
-    end subroutine
-end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/string.f03 b/org.eclipse.photran-samples/src-fortran2003/string.f03
deleted file mode 100644
index d66440d..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/string.f03
+++ /dev/null
@@ -1,411 +0,0 @@
-!>
-!! Definition of a string class for Fortran.
-!!
-!! Jeff Overbey (1/29/09)
-!<
-module string_module
-    implicit none
-    private
-
-    public :: new_string
-
-    interface new_string
-        module procedure &
-            new_string_string, &
-            new_string_integer, &
-            new_string_logical
-    end interface
-
-    type, public :: string
-        private
-        character, dimension(:), allocatable :: data
-        integer :: length = 0
-    contains
-        procedure :: initialize
-        generic   :: operator(+) => concat1, concat2
-        generic   :: concat => concat1, concat2  ! Photran doesn't parse - R1207
-        procedure :: substring
-        procedure :: char_at
-        procedure :: map
-        procedure :: to_uppercase
-        procedure :: to_lowercase
-        generic   :: write(formatted) => write_formatted    ! Photran doesn't parse
-        generic   :: write(unformatted) => write_unformatted
-        procedure :: value
-        generic   :: operator(==) => equals
-        generic   :: operator(.eqic.) => equals_ignore_case
-        final     :: destructor
-
-        procedure, private :: concat1
-        procedure, private :: concat2
-        procedure, private :: write_formatted
-        procedure, private :: write_unformatted
-        procedure, private :: all_satisfy
-        procedure, private :: equals
-        procedure, private :: equals_ignore_case
-    end type string
-
-contains
-
-    type(string) function new_string_string(string) result(return)
-        character(len=*), intent(in) :: string
-        call return%initialize(string)
-    end function
-
-    type(string) function new_string_integer(integer) result(return)
-        integer, intent(in) :: integer
-        return = new_string_nat(abs(integer))
-        if (integer < 0) return = new_string("-") + return
-    end function
-
-    type(string) function new_string_logical(logical) result(return)
-        logical, intent(in) :: logical
-        if (logical) then
-            return = new_string('.true.')
-        else
-            return = new_string('.false.')
-        end if
-    end function
-
-    type(string) recursive function new_string_nat(absval) result(return)
-        integer, intent(in) :: absval
-
-        if (0 <= absval .and. absval <= 9) then
-            call return%initialize(digit_string(absval))
-        else
-            return = new_string_nat(absval / 10) + digit_string(mod(absval, 10))
-        end if
-    end function
-
-    character(len=1) function digit_string(digit)
-        integer, intent(in) :: digit
-        select case (digit)
-            case (0); digit_string = '0'
-            case (1); digit_string = '1'
-            case (2); digit_string = '2'
-            case (3); digit_string = '3'
-            case (4); digit_string = '4'
-            case (5); digit_string = '5'
-            case (6); digit_string = '6'
-            case (7); digit_string = '7'
-            case (8); digit_string = '8'
-            case (9); digit_string = '9'
-        end select
-    end function
-
-    subroutine initialize(self, data)
-        class(string), intent(inout) :: self
-        character(len=*), intent(in) :: data
-        integer :: i
-
-        self%length = len(data)
-        allocate(self%data(self%length))
-        do i = 1, len(data)
-            self%data(i) = data(i:i)
-           end do
-    end subroutine
-
-    ! XLF parses class(string) but gives semantic error; Photran doesn't parse
-    type(string) function concat1(self, other) result(return)
-        class(string), intent(in) :: self
-        class(string), intent(in) :: other
-
-        return = concat2(self, other%value())
-    end function
-
-    type(string) function concat2(self, other) result(return)
-        class(string), intent(in) :: self
-        character(len=*), intent(in) :: other
-        integer :: i
-
-        return%length = self%length + len(other)
-        allocate(return%data(return%length))
-        return%data(1:self%length) = self%data
-        do i = 1, len(other); return%data(i + self%length) = other(i:i); end do
-    end function
-
-    type(string) function substring(self, start, thru) result(return)
-        class(string), intent(in) :: self
-        integer, intent(in) :: start, thru
-
-        if (thru < start) return
-
-        return%length = thru - start + 1
-        allocate(return%data(return%length))
-        return%data(1:self%length) = self%data(start:thru)
-    end function
-
-    character(len=1) function char_at(self, index) result(return)
-        class(string), intent(in) :: self
-        integer, intent(in) :: index
-        return = self%data(index)
-    end function
-
-    type(string) function map(self, function) result(return)
-        class(string), intent(in) :: self
-        interface
-            character(len=1) function function(string)
-              character(len=1), intent(in) :: string
-            end function
-        end interface
-        integer :: i
-
-        return%length = self%length
-        allocate(return%data(return%length))
-        do i = 1, self%length
-             return%data(i) = function(self%data(i))
-        end do
-    end function
-
-    type(string) function to_uppercase(self) result(return)
-        class(string), intent(in) :: self
-        return = self%map(to_upper)
-    !contains ! Causes XLF compiler bug -- see xlf-bug.f03
-    end function
-        character(len=1) function to_upper(ch) result(return)
-            character(len=1), intent(in) :: ch
-            integer, parameter :: diff = iachar('a') - iachar('A')
-
-            if (lle('a', ch) .and. lle(ch, 'z')) then
-                return = achar(iachar(ch) - diff)
-            else
-                return = ch
-            end if
-        end function
-    !end function
-
-    type(string) function to_lowercase(self) result(return)
-        class(string), intent(in) :: self
-        return = self%map(to_lower)
-    !contains ! Causes XLF compiler bug -- see xlf-bug.f03
-    end function
-        character(len=1) function to_lower(ch) result(return)
-            character(len=1), intent(in) :: ch
-            integer, parameter :: diff = iachar('a') - iachar('A')
-
-            if (lle('A', ch) .and. lle(ch, 'Z')) then
-                return = achar(iachar(ch) + diff)
-            else
-                return = ch
-            end if
-        end function
-    !end function
-
-    subroutine write_formatted(self, unit, iotype, v_list, iostat, iomsg)
-        class(string), intent(in) :: self
-        integer, intent(in) :: unit
-        character(*), intent(in) :: iotype
-        integer, dimension(:), intent(in) :: v_list
-        integer, intent(out) :: iostat
-        character(*), intent(inout) :: iomsg
-        ! TODO Incomplete
-        write (unit=unit, fmt=*, iostat=iostat, iomsg=iomsg) self%value()
-    end subroutine
-
-    subroutine write_unformatted(self, unit, iostat, iomsg)
-        class(string), intent(in) :: self
-        integer, intent(in) :: unit
-        integer, intent(out) :: iostat
-        character(*), intent(inout) :: iomsg
-        ! TODO Incomplete
-        write (unit=unit, fmt=*, iostat=iostat, iomsg=iomsg) self%value()
-    end subroutine
-
-    character(len=self%length) function value(self) result(result)
-        class(string), intent(in) :: self
-        integer :: i
-
-        do i = 1, ubound(self%data, 1)
-            result(i:i) = self%data(i)
-        end do
-    end function
-
-    logical function all_satisfy(self, function, other) result(return)
-        class(string), intent(in) :: self
-        interface
-            logical function function(ch1, ch2)
-                character(len=1), intent(in) :: ch1, ch2
-            end function
-        end interface
-        class(string), intent(in) :: other
-        integer :: i
-
-        if (self%length <> other%length) then
-            return = .false.
-        else
-            return = .true.
-            do i = 1, self%length
-                if (function(self%data(i), other%data(i)) .eqv. .false.) then
-                    return = .false.
-                    return
-                end if
-            end do
-        end if
-    end function
-
-    logical function equals(self, other) result(return)
-        class(string), intent(in) :: self
-        class(string), intent(in) :: other
-        return = self%all_satisfy(ch_eq, other)
-    end function
-
-    logical function ch_eq(ch1, ch2) result(return)
-        character(len=1), intent(in) :: ch1, ch2
-        return = ch1 .eq. ch2
-    end function
-
-    logical function equals_ignore_case(self, other) result(return)
-        class(string), intent(in) :: self
-        class(string), intent(in) :: other
-        return = self%all_satisfy(ch_eqic, other)
-    end function
-
-    logical function ch_eqic(ch1, ch2) result(return)
-        character(len=1), intent(in) :: ch1, ch2
-        return = to_upper(ch1) .eq. to_upper(ch2)
-    end function
-
-    subroutine destructor(self)
-        type(string), intent(inout) :: self
-    end subroutine
-
-end module string_module
-
-module test_util
-    implicit none
-contains
-    character(len=1) function identity(string) result(return)
-        character(len=1), intent(in) :: string
-        return = string
-    end function
-
-    character(len=1) function always_a(string) result(return)
-        character(len=1), intent(in) :: string
-        return = 'a'
-    end function
-end module test_util
-
-program string_test
-    use string_module
-    use test_util
-    implicit none
-
-    type(string) :: s1, s2
-
-    print *, "Expected: "
-    print *, "Actual:   ", s1%value()
-
-    call s1%initialize('Hello')
-    call s2%initialize('!')
-
-    print *, "Expected: Hello"
-    print *, "Actual:   ", s1%value()
-
-    s1 = new_string("HeLlOoO!")
-    print *, "Expected: HeLlOoO!"
-    print *, "Actual:   ", s1%value()
-    s1 = new_string("Hello")
-
-    s1 = s1%concat(', world')
-    print *, "Expected: Hello, world"
-    print *, "Actual:   ", s1%value()
-
-    s1 = s1%concat(s2)
-    print *, "Expected: Hello, world!"
-    print *, "Actual:   ", s1%value()
-
-    s1 = s1 + '!'
-    !print *, (s1 + '!')%value()
-    print *, "Expected: Hello, world!!"
-    print *, "Actual:   ", s1%value()
-
-    print *, "Expected: -9876x"
-    print *, "Actual:   ", new_string("-") + new_string("9876x")
-
-    print *, "Expected: ell"
-    print *, "Actual:   ", "Hello, world!!"(2:4)
-    print *, "Expected: ell"
-    print *, "Actual:   ", s1%substring(2, 4)
-
-    print *, "Expected: He"
-    print *, "Actual:   ", s1%substring(0, 2)
-
-    print *, "Expected: "
-    print *, "Actual:   ", "Hello, world!!"(5:1)
-    print *, "Expected: "
-    print *, "Actual:   ", s1%substring(5, 1)
-
-    print *, "Expected: e"
-    print *, "Actual:   ", s1%char_at(2)
-
-    print *, "Expected: ", "Hello, world!!"
-    print *, "Actual:   ", s1%map(identity)
-
-    print *, "Expected: ", "aaaaaaaaaaaaaa"
-    print *, "Actual:   ", s1%map(always_a)
-
-    print *, "Expected: HELLO, WORLD!!"
-    print *, "Actual:   ", s1%to_uppercase()
-
-    print *, "Expected: hello, world!!"
-    print *, "Actual:   ", s1%to_lowercase()
-
-    print *, "Expected: Hello, world!!"
-    print *, "Actual:   ", s1
-
-    print *, "Expected: 0"
-    print *, "Actual:   ", new_string(0)
-
-    print *, "Expected: 5"
-    print *, "Actual:   ", new_string(5)
-
-    print *, "Expected: 12345"
-    print *, "Actual:   ", new_string(12345)
-
-    print *, "Expected: -8"
-    print *, "Actual:   ", new_string(-8)
-
-    print *, "Expected: -98765"
-    print *, "Actual:   ", new_string(-98765)
-
-    print *, "Expected: .true."
-    print *, "Actual:   ", new_string(.true.)
-
-    print *, "Expected: .false."
-    print *, "Actual:   ", new_string(.false.)
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string(.false.) == new_string(".false.")
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string("") == new_string("")
-
-    print *, "Expected:  F"
-    print *, "Actual:   ", new_string("") == new_string("true")
-
-    print *, "Expected:  F"
-    print *, "Actual:   ", new_string("true") == new_string("")
-
-    print *, "Expected:  F"
-    print *, "Actual:   ", new_string("true") == new_string("truE")
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string(.false.) .eqic. new_string(".false.")
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string("") .eqic. new_string("")
-
-    print *, "Expected:  F"
-    print *, "Actual:   ", new_string("") .eqic. new_string("true")
-
-    print *, "Expected:  F"
-    print *, "Actual:   ", new_string("true") .eqic. new_string("")
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string("true") .eqic. new_string("truE")
-
-    print *, "Expected:  T"
-    print *, "Actual:   ", new_string("tRUe") .eqic. new_string("TrUe")
-
-    print *, "Done"
-end program string_test
diff --git a/org.eclipse.photran-samples/src-fortran2003/xlf-bug.f03 b/org.eclipse.photran-samples/src-fortran2003/xlf-bug.f03
deleted file mode 100644
index 31776da..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/xlf-bug.f03
+++ /dev/null
@@ -1,62 +0,0 @@
-!>
-!! Illustrates a bug in IBM XL Fortran for AIX, V12.1 (5724-U82)
-!!
-!! The function "identity" is an internal function which
-!! is passed as a parameter to the "map" routine.  However, when it is invoked as a callback,
-!! the string it receives as its first parameter is not the string that was actually passed
-!! as the first parameter by the invoking function.
-!!
-!! Jeff Overbey (1/29/09)
-!<
-module string_module
-    implicit none
-    private
-
-    type, public :: string
-    contains
-        procedure :: map
-        procedure :: copy
-    end type string
-
-contains
-
-	! Applies function to each of the strings 'H', 'e', 'l', 'l', 'o'
-    subroutine map(self, function)
-    	class(string), intent(in) :: self
-    	interface
-    		character(len=1) function function(string)
-    		  character(len=1), intent(in) :: string
-    		end function
-    	end interface
-
-		character, dimension(5) :: hello = (/ 'H', 'e', 'l', 'l', 'o' /)
-    	integer :: i
-
-		do i = 1, 5
-        	print *, "Invoking callback with parameter ", hello(i)
-        	hello(i) = function(hello(i))
-        end do
-    end subroutine
-
-    ! Invokes map with the identity function (defined below)
-    subroutine copy(self)
-    	class(string), intent(in) :: self
-    	call self%map(identity)
-    contains
-        !!!!! Error is demonstrated when this (internal) function is
-        !!!!! passed as an argument to the map procedure: The "ch"
-        !!!!! argument is a garbage string, not the one actually
-        !!!!! passed by map
-	    character(len=1) function identity(ch) result(return)
-	    	character(len=1), intent(in) :: ch
-            print *, "Callback invoked with parameter ", ch
-            return = ch
-		end function
-    end subroutine
-end module string_module
-
-program string_test
-	use string_module
-	type(string) :: s
-	call s%copy()
-end program string_test
diff --git a/org.eclipse.photran-samples/src-fortran2003/xlf-bug2.f03 b/org.eclipse.photran-samples/src-fortran2003/xlf-bug2.f03
deleted file mode 100644
index 91ace76..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/xlf-bug2.f03
+++ /dev/null
@@ -1,55 +0,0 @@
-!>
-!! Illustrates a bug in IBM XL Fortran for AIX, V12.1 (5724-U82)
-!!
-!! XLF reports errors when a subclass, whose parent class is in a different
-!! module, overrides a procedure with a pointer to class(*) as either an
-!! argument or a return type.  If both modules are combined into a single
-!! module, the code compiles successfully.
-!!
-!! Jeff Overbey (2/24/09)
-!<
-module mod_base
-    implicit none
-    private
-    ! Abstract class "base" contains two routines
-    ! * accept_any accepts a pointer to class(*)
-    ! * return_any returns a pointer to class(*)
-    type, public, abstract :: base
-    contains
-        procedure(accept_any), deferred :: accept_any
-        procedure(return_any), deferred :: return_any
-    end type
-    abstract interface
-        subroutine accept_any(self, arg)
-            import base
-            class(base), intent(in) :: self
-            class(*), pointer, intent(in) :: arg
-        end subroutine
-        function return_any(self) result(return)
-            import base
-            class(base), intent(in) :: self
-            class(*), pointer :: return
-        end function
-    end interface
-end module
-module mod_extended
-    use mod_base
-    implicit none
-    private
-    type, public, extends(base) :: extended
-    contains
-        procedure :: accept_any => extended_accept_any  ! XLF reports Dummy argument arg of overridden binding accept_any and the corresponding dummy argument of overriding binding accept_any must have the same type and type parameters.
-        procedure :: return_any => extended_return_any  ! XLF reports The function results of the overridden binding return_any and overridding binding return_any must have the same type and type parameters.
-    end type
-contains
-    subroutine extended_accept_any(self, arg)
-        class(extended), intent(in) :: self
-        class(*), pointer, intent(in) :: arg
-    end subroutine
-    function extended_return_any(self) result(return)
-        class(extended), intent(in) :: self
-        class(*), pointer :: return
-        return => null()
-    end function
-end module
-program p; end program
diff --git a/org.eclipse.photran-samples/src-fortran2003/xlf-crash.f03 b/org.eclipse.photran-samples/src-fortran2003/xlf-crash.f03
deleted file mode 100644
index ad259b3..0000000
--- a/org.eclipse.photran-samples/src-fortran2003/xlf-crash.f03
+++ /dev/null
@@ -1,20 +0,0 @@
-!>
-!! Example program causes an internal compiler error in
-!! IBM XL Fortran for AIX, V12.1 (5724-U82)
-!!
-!! Jeff Overbey (1/29/09)
-!<
-module m
-  type string
-    character, dimension(:), pointer :: data
-  contains
-    procedure value
-  end type
-contains
-  ! XLF internal compiler error due to this expression
-  !             vvvvvvvvvvvvvvvvvvvv
-  character(len=ubound(self%data, 1)) function value(self) !result(result)
-    class(string), intent(in) :: self
-    value = ''
-  end function
-end module
diff --git a/org.eclipse.photran-samples/src-gaussian-elimination/.cvsignore b/org.eclipse.photran-samples/src-gaussian-elimination/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-gaussian-elimination/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-gaussian-elimination/gauselim.f90 b/org.eclipse.photran-samples/src-gaussian-elimination/gauselim.f90
deleted file mode 100755
index f193e2d..0000000
--- a/org.eclipse.photran-samples/src-gaussian-elimination/gauselim.f90
+++ /dev/null
@@ -1,239 +0,0 @@
-program GaussianElimination
-! Solve a linear system of equations with Gaussian Elimination
-!   and Back Substitution
-
-! SUBROUTINES: mtxrd,mtxwrt,mtxmlt
-
-! Always declare ALL variables
-  implicit none
-  INTEGER :: indx,jndx,kndx,lndx ! loop counters
-  INTEGER :: nsize               ! # of equations (size of the A matrix)
-  REAL :: amtx(10,10)            ! A matrix in Ax=B
-  REAL :: bvct(10)               ! B vector in Ax=B
-  REAL :: xvct(10)               ! x vector in Ax=B
-  REAL :: scl(10)                ! Scale factors
-  INTEGER :: irow(10)            ! Row numbers (for swapping rows)
-  INTEGER :: ipivot              ! Pivot row
-  INTEGER :: itemp               ! Temporary value while swapping
-  REAL :: tmpval                 ! Temporary value while pivoting
-  REAL :: pival                  ! Pivot value
-  REAL :: fctr                   ! Multiplication factor for row reduction
-  CHARACTER(len = 64) :: filein  ! Input file name
-  INTEGER :: ieof                ! Flag to ensure the file opens correctly
-
-! Initially, no row swaps
-  do indx = 1, 10
-    irow(indx) = indx
-  end do
-
-! Introduce the program
-  write (*, *) &
-    'Program to solve a linear system of equations using'
-  write (*, *) &
-    '  Gaussian Elimination and Back Substitution'
-  write (*, *) ! A Blank Line
-
-! Read from a file (we don't have to type all those numbers)
-  write (*, *) 'Enter the input file name: '
-  read (*, *) filein
-  open (10, file = filein, status = 'old', iostat = ieof)
-
-! If I have trouble opening the file, blow me out of the program!
-  if (ieof .ne. 0) then
-    write (*, *) 'File error!'
-    stop
-  end if
-
-! Input the A matrix - write it out for the user
-  write (*, *) 'A Matrix:'
-  call mtxrd(amtx,nsize,nsize)
-  call mtxwrt(amtx,irow,nsize,nsize)
-! Input the B vector - write it out for the user
-  write (*, *) ! Blank line
-  write (*, *) 'B Vector:'
-  call vctrd(bvct,nsize)
-  call vctwrt(bvct,nsize)
-  
-! *** FIND SCALE FACTORS *** !
-
-  do indx = 1,nsize
-    scl(indx) = abs(amtx(indx,1))
-    do jndx = 2, nsize
-      if (abs(amtx(indx,jndx)) > scl(indx)) then
-        scl(indx) = abs(amtx(indx,jndx))
-      end if
-    end do
-  end do
-  
-  write (*, *) ! Blank line
-  write (*, *) 'Scale factors:'
-  call vctwrt(scl,nsize)
-  
-! *** BEGIN GAUSSIAN ELIMINATION (ROW REDUCTION) *** !
-
-  do kndx = 1, nsize-1  ! For each column k...
-
-    ! Choose the pivot element
-    ipivot = kndx   ! WAS ipivot = irow(kndx)
-    pival = abs(amtx(irow(ipivot), kndx) / scl(irow(ipivot)))
-    do lndx = kndx+1, nsize
-      tmpval = abs(amtx(irow(lndx), kndx) / scl(irow(lndx)))
-      if (tmpval > pival) then
-        pival = tmpval
-        ipivot = lndx   ! WAS ipivot = irow(lndx)
-      end if
-    end do
-    
-    !write (*, *) ! Blank line
-    !write (*, *) 'Swapping rows ', kndx, ' and ', ipivot, ' -- pival is ', pival
-    
-    ! Row swap
-    itemp = irow(kndx)
-    irow(kndx) = irow(ipivot)
-    irow(ipivot) = itemp
-
-    !call augwrt(amtx,irow,bvct,nsize)
-    
-    ! Row reduce
-    do indx = kndx+1, nsize  ! For each row i > k...
-      fctr = amtx(irow(indx),kndx) / amtx(irow(kndx),kndx)
-      amtx(irow(indx),kndx) = 0.0      ! We're zeroing out a(i,k)
-      do jndx = kndx+1,nsize     ! Scale & subtract the rest of the row
-        amtx(irow(indx),jndx) = amtx(irow(indx),jndx) - fctr * amtx(irow(kndx),jndx)
-      end do
-      bvct(irow(indx)) = bvct(irow(indx)) - fctr * bvct(irow(kndx))
-    end do
-    
-    !write (*, *) 'Reduction:'
-    !call augwrt(amtx,irow,bvct,nsize)
-    
-  end do
-
-! *** END GAUSSIAN ELIMINATION (ROW REDUCTION) *** !
-
-
-  write (*, *) ! Blank line
-  write (*, *) 'Reduced, Augmented Matrix:'
-  call augwrt(amtx,irow,bvct,nsize)
-
-! Back Substitute
-  do indx = nsize, 1, -1  ! Start at lower right and work upwards
-    xvct(indx) = bvct(irow(indx))
-! Subtract the previous x-values times their respective coefficients
-    do jndx = indx+1, nsize
-      xvct(indx) = xvct(indx) - amtx(irow(indx),jndx) * xvct(jndx)
-    end do
-! Divide by the current coefficient
-    xvct(indx) = xvct(indx) / amtx(irow(indx),indx)
-  end do
-
-  write (*, *) ! Blank line
-  write (*, *) 'Solution Vector:'
-  call vctwrt(xvct,nsize)
-
-  stop
-
-contains
-
-  subroutine mtxrd(amtx,mrow,ncol)
-
-! ABSTRACT: Subroutine to read an m x n matrix from a file
-!   FORMAT: first line has the dimensions
-!           each following line has a row of the matrix
-
-! Always declare ALL variables
-    implicit none
-    INTEGER :: irow,jcol               ! row, column loop counters
-    INTEGER, INTENT(OUT) :: mrow,ncol  ! # rows, columns
-    REAL, INTENT(OUT) :: amtx(:,:)     ! matrix
-
-! Read the size of the matrix
-    read (10, *) mrow,ncol
-
-! Read the matrix, one row at a time
-    do irow = 1,mrow
-      read (10, *) (amtx(irow,jcol),jcol=1,ncol)
-    end do
-
-    return
-  end subroutine mtxrd
-
-  subroutine mtxwrt(amtx,irow,mrow,ncol)
-
-! ABSTRACT: Subroutine to write an m x n matrix to the screen
-
-! Always declare ALL variables
-    implicit none
-    INTEGER :: indx,jcol              ! row, column loop counters
-    INTEGER, INTENT(IN) :: mrow,ncol  ! # rows, columns
-    INTEGER, INTENT(IN) :: irow(:)    ! For row swapping
-    REAL, INTENT(IN) :: amtx(:,:)     ! matrix
-
-! Write the matrix, one row at a time
-    do indx = 1,mrow
-      write (*, '('' '',10g10.4)') (amtx(irow(indx),jcol),jcol=1,ncol)
-    end do
-    return
-  end subroutine mtxwrt
-
-  subroutine augwrt(amtx,irow,bvct,nsize)
-
-! ABSTRACT: Subroutine to write an n x n matrix with a vector augmented to it
-
-! Always declare ALL variables
-    implicit none
-    INTEGER :: indx,jcol            ! row, column loop counters
-    INTEGER, INTENT(IN) :: nsize   ! # rows
-    INTEGER, INTENT(IN) :: irow(:)    ! For row swapping
-    REAL, INTENT(IN) :: amtx(:,:)  ! matrix
-    REAL, INTENT(IN) :: bvct(:)    ! vector
-
-! Write the matrix, one row at a time
-    do indx = 1,nsize
-      write (*, '('' '',10g10.4)') &
-        (amtx(irow(indx),jcol),jcol=1,nsize),bvct(irow(indx))
-    end do
-    return
-  end subroutine augwrt
-
-  subroutine vctrd(vctr,nsize)
-
-! ABSTRACT: Subroutine to read a vector from a file
-!   FORMAT: first line has the dimensions
-!           each following line has a row of the vector
-
-! Always declare ALL variables
-    implicit none
-    INTEGER :: irow               ! row loop counters
-    INTEGER, INTENT(OUT) :: nsize ! # rows
-    REAL, INTENT(OUT) :: vctr(:)  ! vector
-
-! Read the size of the matrix
-    read (10, *) nsize
-
-! Read the matrix, one row at a time
-    do irow = 1,nsize
-      read (10, *) vctr(irow)
-    end do
-
-    return
-  end subroutine vctrd
-
-  subroutine vctwrt(vctr,nsize)
-
-! ABSTRACT: Subroutine to write a vector to the screen
-
-! Always declare ALL variables
-    implicit none
-    INTEGER :: irow               ! row loop counters
-    INTEGER, INTENT(IN) :: nsize ! # rows
-    REAL, INTENT(IN) :: vctr(:)  ! vector
-
-! Write the matrix, one row at a time
-    do irow = 1,nsize
-      write (*, *) vctr(irow)
-    end do
-    return
-  end subroutine vctwrt
-
-end program GaussianElimination
diff --git a/org.eclipse.photran-samples/src-implicits-1/.cvsignore b/org.eclipse.photran-samples/src-implicits-1/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-implicits-1/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-implicits-1/hello.f90 b/org.eclipse.photran-samples/src-implicits-1/hello.f90
deleted file mode 100644
index f5dfb76..0000000
--- a/org.eclipse.photran-samples/src-implicits-1/hello.f90
+++ /dev/null
@@ -1,22 +0,0 @@
-! This is a sample program
-
-program Hello
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-end program
-
-integer function Fn(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
diff --git a/org.eclipse.photran-samples/src-implicits-2/.cvsignore b/org.eclipse.photran-samples/src-implicits-2/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-implicits-2/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-implicits-2/fortran.f90 b/org.eclipse.photran-samples/src-implicits-2/fortran.f90
deleted file mode 100644
index 8240a04..0000000
--- a/org.eclipse.photran-samples/src-implicits-2/fortran.f90
+++ /dev/null
@@ -1,37 +0,0 @@
-program functioncalling
-    
-  print *, 'This is the Fortran program; I am going to call some functions now...'
-  call sum(1.0,2.0,3.0)
-  call factorial(3)
-  print *, 'Done'
-
-contains
-
-  subroutine sum(x,y,z)
-
-  x = x+y+z
-
-  print *, x
-
-  end subroutine sum
-
-  subroutine factorial(j)
-
-  p=1
-  i=1
-  do i=1,j
-    p=p*i
-  end do
-
-  print *, j, "! = ", p
-
-  end subroutine factorial
-
-  subroutine sum2(x,y)
-
-  p = x+y
-
-  end subroutine sum2
-
-
-end
diff --git a/org.eclipse.photran-samples/src-implicits-3/.cvsignore b/org.eclipse.photran-samples/src-implicits-3/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-implicits-3/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-implicits-3/crazyimplicits.f90 b/org.eclipse.photran-samples/src-implicits-3/crazyimplicits.f90
deleted file mode 100644
index 8a82a84..0000000
--- a/org.eclipse.photran-samples/src-implicits-3/crazyimplicits.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-program p
-    a = 3
-    d = 4
-    stop
-contains
-subroutine s
-    implicit integer (a-c,g), real (d-e), type(t) (f), complex (h)
-    type t
-        integer n
-    end type
-    
-    a = 3
-    b = 3
-    c = 3
-    d = 3.0
-    e = 3.0
-    f%n = 3
-    g = 3
-    h = (3, 4)
-end subroutine
-end program
diff --git a/org.eclipse.photran-samples/src-includes/.cvsignore b/org.eclipse.photran-samples/src-includes/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-includes/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-includes/inc.h b/org.eclipse.photran-samples/src-includes/inc.h
deleted file mode 100644
index 32cff95..0000000
--- a/org.eclipse.photran-samples/src-includes/inc.h
+++ /dev/null
@@ -1 +0,0 @@
-  integer :: i
diff --git a/org.eclipse.photran-samples/src-includes/innocuous.f90 b/org.eclipse.photran-samples/src-includes/innocuous.f90
deleted file mode 100644
index a6a9baf..0000000
--- a/org.eclipse.photran-samples/src-includes/innocuous.f90
+++ /dev/null
@@ -1 +0,0 @@
-end
diff --git a/org.eclipse.photran-samples/src-includes/main.doesnotcompile b/org.eclipse.photran-samples/src-includes/main.doesnotcompile
deleted file mode 100644
index fcc082c..0000000
--- a/org.eclipse.photran-samples/src-includes/main.doesnotcompile
+++ /dev/null
@@ -1,6 +0,0 @@
-! Compilers have all sorts of trouble with this...
-! gfortran segfaulted, and ifort does not allow it
-program p
-    include "inc.h"
-    print i
-end program p
diff --git a/org.eclipse.photran-samples/src-language-features/.cvsignore b/org.eclipse.photran-samples/src-language-features/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-language-features/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-language-features/almost-exhaustive.f90 b/org.eclipse.photran-samples/src-language-features/almost-exhaustive.f90
deleted file mode 100644
index 2154980..0000000
--- a/org.eclipse.photran-samples/src-language-features/almost-exhaustive.f90
+++ /dev/null
@@ -1,47 +0,0 @@
-program Main
-    integer, parameter :: k6=selected_int_kind(6) ! Kind for range [-999999,999999]
-    integer, parameter :: n1 = -123456_k6
-    integer, parameter :: n2 = -123456_4
-    integer, parameter :: long = selected_real_kind(9, 99) ! 9 sig decimals, exponent
-                                                           ! range 10^-99 to 10^99
-    integer, parameter :: asci = kind('ASCII')
-    integer(kind=long) :: a
-    character(len=20, kind=1) :: english_word
-    character(20) :: length_twenty
-    
-    type person
-        character(10) :: name
-        real          :: age
-        integer       :: id
-    end type
-    type(person) :: me = person('Jeff', 23, 12345)
-    type(person) :: you
-        
-    real, dimension(10) :: array1thru10
-    real, dimension(-10,5) :: arrayneg10thru5
-    real, dimension(-10:5, -20:-1, 2) :: threedarray
-    real, dimension(5) :: arrayconst = (/ 1, 2, 3, 4, 5 /)
-    
-    character(len=10) :: ten = "1234567890"
-    
-    real, pointer :: realptr => null()
-        
-    you%name = 'Bob'
-    you%age  = 17.25
-    you%id   = 18
-        
-    print *, "Kinds:", kind(k6), kind(n1), kind(n2), kind(1.0)
-    print *, "Precision:", precision(1.0_long) ! will be at least 9
-    print *, "Num decimal digits supported:", range(2_k6)
-    print *, "Num decimal digits supported:", range(1.0_long) ! will be at least 99
-    !ERROR!print *, "Bin/octal/hex:", b'01100110', o'076543', z'10fa'
-    print *, "Real literal constant:", -10.6e-11, 1., -0.1, 1e-1, 3.141592653
-    print *, "Complex:", (1., 3.2), (1, .99e-2), (1.0, 3.7_8)
-    print *, 'He said "Hello"', "This contains an '", 'Isn''t it a nice day'
-    print *, 'This is a long string     &
-            & which spans several lines &
-            & unnecessarily.'
-    !ERROR!print *, asci_"String"
-    print *, .false._1, .true._long
-    print *, ten(:5), ten(6:), ten(3:7), ten(:), you%name(1:2), 'Hello'(:2)
-end program
diff --git a/org.eclipse.photran-samples/src-liebmann-1-eoshift/.cvsignore b/org.eclipse.photran-samples/src-liebmann-1-eoshift/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-liebmann-1-eoshift/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-liebmann-1-eoshift/liebmann.f90 b/org.eclipse.photran-samples/src-liebmann-1-eoshift/liebmann.f90
deleted file mode 100644
index f603aca..0000000
--- a/org.eclipse.photran-samples/src-liebmann-1-eoshift/liebmann.f90
+++ /dev/null
@@ -1,50 +0,0 @@
-!!
-!! Liebmann's method to compute heat transfer across a 2-D surface
-!! J. Overbey 8/27/08
-!!
-!! Use liebmann-viz.sh in the main project directory to visualize the resulting
-!! table using gnuplot
-!!
-!! This version looks the nicest and uses the eoshift intrinsic
-!!
-program liebmann_example
-    implicit none
-
-    integer, parameter :: SIZE = 200
-    integer, parameter :: INTERIOR_SIZE = SIZE - 2
-    real, parameter    :: BOUNDARY_VALUE = 5.0
-    real, parameter    :: EPSILON = 0.001
-
-    call main()
-
-contains
-
-subroutine main()
-    integer :: i
-    real :: surface(INTERIOR_SIZE, INTERIOR_SIZE)
-
-    surface = 0.0
-    surface = iterate(surface)
-
-    print *, (BOUNDARY_VALUE, i=1,SIZE)
-    do i = 1, INTERIOR_SIZE; print *, BOUNDARY_VALUE, surface(i, :), BOUNDARY_VALUE; end do
-    print *, (BOUNDARY_VALUE, i=1,SIZE)
-end subroutine
-
-function iterate(initial) result(result)
-    intent(in) :: initial
-    real, dimension(INTERIOR_SIZE, INTERIOR_SIZE) :: initial, previous, up, down, left, right, result
-
-    result = initial
-    do
-        previous = result
-        up     = eoshift(previous, +1, boundary_value, 1)
-        down   = eoshift(previous, -1, boundary_value, 1)
-        left   = eoshift(previous, +1, boundary_value, 2)
-        right  = eoshift(previous, -1, boundary_value, 2)
-        result = (up + down + left + right) / 4.0
-        if (maxval(abs(result - previous)) .lt. EPSILON) exit
-    end do
-end function
-
-end program
diff --git a/org.eclipse.photran-samples/src-liebmann-2-arrays/.cvsignore b/org.eclipse.photran-samples/src-liebmann-2-arrays/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-liebmann-2-arrays/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-liebmann-2-arrays/liebmann.f90 b/org.eclipse.photran-samples/src-liebmann-2-arrays/liebmann.f90
deleted file mode 100644
index 1ddab15..0000000
--- a/org.eclipse.photran-samples/src-liebmann-2-arrays/liebmann.f90
+++ /dev/null
@@ -1,77 +0,0 @@
-!!
-!! Liebmann's method to compute heat transfer across a 2-D surface
-!! J. Overbey 8/27/08
-!!
-!! Use liebmann-viz.sh in the main project directory to visualize the resulting
-!! table using gnuplot
-!!
-!! This version uses array sections to compute each iteration and the delta
-!!
-program liebmann_example
-    implicit none
-
-    integer, parameter :: SIZE = 200
-    integer, parameter :: INTERIOR_SIZE = SIZE - 2
-    real, parameter    :: BOUNDARY_VALUE = 5.0
-    real, parameter    :: EPSILON = 0.001
-
-    call main()
-
-contains
-
-subroutine main()
-    real :: surface(SIZE, SIZE)
-    integer :: i
-
-    call liebmann(surface)
-
-    do i = 1, SIZE; print *, surface(i, :); end do
-end subroutine
-
-subroutine liebmann(surface)
-    real, intent(out) :: surface(SIZE, SIZE)
-    real, dimension(SIZE, SIZE) :: prev, next
-    real :: delta
-
-    call init_with_boundaries(prev)
-    call init_with_boundaries(next)
-
-    do
-        delta = iterate(prev, next)
-        if (delta < EPSILON) then
-            surface = next
-            return
-        end if
-
-        delta = iterate(next, prev)
-        if (delta < EPSILON) then
-            surface = prev
-            return
-        end if
-    end do
-end subroutine
-
-subroutine init_with_boundaries(surface)
-    real, dimension(SIZE, SIZE), intent(in out) :: surface
-
-    surface          = 0.0
-    surface(1, :)    = BOUNDARY_VALUE
-    surface(SIZE, :) = BOUNDARY_VALUE
-    surface(:, 1)    = BOUNDARY_VALUE
-    surface(:, SIZE) = BOUNDARY_VALUE
-end subroutine
-
-function iterate(prev, next) result(epsilon)
-    real, dimension(SIZE, SIZE), intent(in)  :: prev
-    real, dimension(SIZE, SIZE), intent(in out) :: next
-    real :: epsilon
-
-    next(2:SIZE-1, 2:SIZE-1) = &
-        (prev(1:SIZE-2, 2:SIZE-1) + &
-         prev(3:SIZE,   2:SIZE-1) + &
-         prev(2:SIZE-1, 1:SIZE-2) + &
-         prev(2:SIZE-1, 3:SIZE  )) / 4.0
-    epsilon = maxval(abs(next(2:SIZE-1,2:SIZE-1) - prev(2:SIZE-1,2:SIZE-1)))
-end function
-
-end program
diff --git a/org.eclipse.photran-samples/src-liebmann-3-loops/.cvsignore b/org.eclipse.photran-samples/src-liebmann-3-loops/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-liebmann-3-loops/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-liebmann-3-loops/liebmann.f90 b/org.eclipse.photran-samples/src-liebmann-3-loops/liebmann.f90
deleted file mode 100644
index 8b41de9..0000000
--- a/org.eclipse.photran-samples/src-liebmann-3-loops/liebmann.f90
+++ /dev/null
@@ -1,84 +0,0 @@
-!!
-!! Liebmann's method to compute heat transfer across a 2-D surface
-!! J. Overbey 8/27/08
-!!
-!! Use liebmann-viz.sh in the main project directory to visualize the resulting
-!! table using gnuplot
-!!
-!! This version uses explicit loops through the array elements
-!!
-program liebmann_example
-    implicit none
-
-    integer, parameter :: SIZE = 200
-    integer, parameter :: INTERIOR_SIZE = SIZE - 2
-    real, parameter    :: BOUNDARY_VALUE = 5.0
-    real, parameter    :: EPSILON = 0.001
-
-    call main()
-
-contains
-
-subroutine main()
-    real :: surface(SIZE, SIZE)
-    integer :: i
-
-    call liebmann(surface)
-
-    do i = 1, SIZE; print *, surface(i, :); end do
-end subroutine
-
-subroutine liebmann(surface)
-    real, dimension(SIZE, SIZE), intent(out) :: surface
-    real, dimension(SIZE, SIZE) :: prev, next
-    real :: delta
-
-    call init_with_boundaries(prev)
-    call init_with_boundaries(next)
-
-    do
-        delta = iterate(prev, next)
-        if (delta < EPSILON) then
-            surface = next
-            return
-        end if
-
-        delta = iterate(next, prev)
-        if (delta < EPSILON) then
-            surface = prev
-            return
-        end if
-    end do
-end subroutine
-
-subroutine init_with_boundaries(surface)
-    real, dimension(SIZE, SIZE), intent(out) :: surface
-
-    surface          = 0.0
-    surface(1, :)    = BOUNDARY_VALUE
-    surface(SIZE, :) = BOUNDARY_VALUE
-    surface(:, 1)    = BOUNDARY_VALUE
-    surface(:, SIZE) = BOUNDARY_VALUE
-end subroutine
-
-function iterate(prev, next) result(delta)
-    real, dimension(SIZE, SIZE), intent(in)  :: prev
-    real, dimension(SIZE, SIZE), intent(out) :: next
-    real :: delta
-
-    integer :: i, j
-
-    delta = 0.0
-    do j = 2, SIZE-1
-        do i = 2, SIZE-1
-            next(i,j) = &
-                (prev(i-1, j) + &
-                 prev(i+1, j) + &
-                 prev(i, j-1) + &
-                 prev(i, j+1)) / 4.0
-             delta = max(delta, abs(next(i,j)-prev(i,j)))
-        end do
-    end do
-end function
-
-end program
diff --git a/org.eclipse.photran-samples/src-line-fitting/.cvsignore b/org.eclipse.photran-samples/src-line-fitting/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-line-fitting/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-line-fitting/bstfit.f90 b/org.eclipse.photran-samples/src-line-fitting/bstfit.f90
deleted file mode 100755
index 3647396..0000000
--- a/org.eclipse.photran-samples/src-line-fitting/bstfit.f90
+++ /dev/null
@@ -1,863 +0,0 @@
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-! BstFit
-!
-! This program provides the user with three options:
-! (1) Compute least-squares lines using vertical, horizontal, and
-!     perpendicular distances
-! (2) Show the distances between points and a given line
-! (3) Compute linear, exponential, and power least-squares curves
-! 
-! Points are read from an ASCII text file, where each line contains a x-value
-! followed by a space and a y-value.  Values are expected to be real numbers.
-! The number of points is not specified; the program reads data from each line
-! until the end of the file (or 1,000 points, whichever comes first).
-!
-! Output is displayed to the screen.
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-module Mdataset
-
-  ! Declare all variables
-  implicit none
-
-  ! Declare a Tdataset type to hold data points, count, sums, etc.
-  type :: Tdataset
-    real             :: datapt(4,1000)    ! (x,y) data points from input file
-                                          !    stored as (x, y, ln x, ln y)
-    integer          :: npts              ! Number of points in input file
-    real             :: valsum(4)         ! Sums of values of
-                                          !    x, y, ln x, and ln y
-    real             :: sqsum(4)          ! Sums of values of x**2, y**2,
-                                          !    (ln x)**2, and (ln y)**2
-    real             :: xysum(3)          ! Sums of products
-                                          !    (xy, x ln y, ln x ln y)
-    logical          :: has_np(2)         ! Are any x- or y-values nonpositive?
-  end type Tdataset
-
-end module Mdataset
-
-program BstFitProj
-
-  use Mdataset
-
-  ! Declare all variables
-  implicit none
-
-  ! Type                Name(s)             Description
-  integer			 :: if
-  integer            :: ichoice           ! The user's choice from the menu
-  type(Tdataset)     :: ds                ! Points and computed values
-  real               :: aval, bval        ! Values of a and b (in y=ax+b)
-  real               :: slopem, intrcpt   ! Slope and y-intercept of a line
-                                          !   supplied by the user
-  real               :: ssvd, sshd, sspd  ! Sum of squares of horiz, vert, and
-                                          !   perpendicular distances
-  logical            :: suces             ! Exponential or power fit success?
-  integer            :: outu              ! Output file unit number
-
-  ! Introduce the program
-  write (*, *) 'This program performs least-squares fitting on ', &
-                            'a set of n (x,y) pairs'
-  write (*, *) ! Blank line
-
-  ! Ask the user for the input file, and read the data from it  
-  call LoadDataSet(ds)
-  write (*, *) ! Blank line
-  
-  ! Show the list of points
-  write (*, *) 'Data points are:'
-  call ShowDataPoints(ds)
-  write (*, *) ! Blank line
-  
-  ! Ask the user for the name of the output file, and open it
-  outu = OpenOutput()
-  write (*, *) ! Blank line
-  
-  ! The user hasn't chosen anything from the menu yet
-  ichoice = 0
-  
-  ! Let the user continue choosing from the menu until s/he chooses to exit
-  do while (ichoice .ne. 4)
-  
-    ! Display a list of options, and allow the user to select one
-    write (*, *) ! Blank line
-    write (*, *) '===================================================='
-    write (*, *) 'MENU'
-    write (*, *) '===================================================='
-    write (*, *) '1. Compute three linear least squares lines'
-    write (*, *) '2. Compute distances between points and a given line'
-    write (*, *) '3. Find linear, exponential, and power least squares'
-    write (*, *) '4. Exit'
-    write (*, *) '===================================================='
-    write (*, *) ! Blank line
-    write (*, *) 'Choose an option: '
-    read  (*, *) ichoice
-    
-    if (if .eq. 5) then
-      print *, 'Why did you name a variable "if" anyway?'
-    end if
-
-    select case (ichoice)
-      case (1) ! Option 1 - Three linear least squares lines
-
-        write (outu, *) 'THREE LEAST SQUARES LINES:'
-
-        ! Linear least squares, vertical distances
-        call LinearLeastSquares(ds, 1, 2, aval, bval)
-        write (outu, *) ! Blank line
-        write (outu, *) 'Using vertical distances:'
-        write (outu, *) 'y = ', trim(real2str(aval)), &
-                                     'x + ', trim(real2str(bval))
-
-        ! Linear least squares, horizontal distances
-        call LinearLeastSquares(ds, 2, 1, aval, bval)
-        write (outu, *) ! Blank line
-        write (outu, *) 'Using horizontal distances:'
-        write (outu, *) 'y = ', trim(real2str(aval)), &
-                                     'x + ', trim(real2str(bval))
-
-        ! Linear least squares, perpendicular distances
-        call PerpLeastSquares(ds, 0, aval, bval)
-        write (outu, *) ! Blank line
-        write (outu, *) 'Using perpendicular distances:'
-        write (outu, *) 'y = ', trim(real2str(aval)), &
-                                     'x + ', trim(real2str(bval))
-        
-        write (outu, *) '--OR--'
-
-        call PerpLeastSquares(ds, 1, aval, bval)
-        write (outu, *) 'y = ', trim(real2str(aval)), &
-                                     'x + ', trim(real2str(bval))
-
-        write (outu, *) ! Blank line
-
-      case (2) ! Option 2 - Distances between points and a given line
-
-        write (outu, *) 'SUM OF SQUARES OF DISTANCES BETWEEN ', &
-                                     'POINTS AND A GIVEN LINE:'
-      
-        write (*, *) ! Blank line
-        write (*, *) 'Enter the line''s slope and y-intercept: '
-        read (*, *) slopem, intrcpt
-        
-        write (outu, *) ! Blank line
-        write (outu, *) 'Using f(x) = ', trim(real2str(slopem)), &
-                                     'x + ', trim(real2str(intrcpt))
-
-        write (outu, *) ! Blank line
-        call SquareDistances(ds, slopem, intrcpt, ssvd, sshd, sspd)
-
-        write (outu, *) 'Sum of squares of vertical distances:      ', &
-                                      ssvd
-        write (outu, *) ! Blank line
-        write (outu, *) 'Sum of squares of horizontal distances:    ', &
-                                      sshd
-        write (outu, *) ! Blank line
-        write (outu, *) 'Sum of squares of perpendicular distances: ', &
-                                      sspd
-        write (outu, *) ! Blank line
-
-      case (3) ! Option 3 - Linear, exponential, and power least squares
-
-        write (outu, *) 'LINEAR, EXPONENTIAL, AND POWER LEAST SQUARES:'
-      
-        call LinearLeastSquares(ds, 1, 2, aval, bval)
-        write (outu, *) ! Blank line
-        write (outu, *) 'Linear fit:       y = ', trim(real2str(aval)), &
-                                     'x + ', trim(real2str(bval))
-
-        call ExpLeastSquares(ds, aval, bval, suces)
-        write (outu, *) ! Blank line
-        if (suces .eqv. .true.) then
-          write (outu, *) 'Exponential fit:  y = ', trim(real2str(bval)), &
-                                       ' * e^(', trim(real2str(aval)), 'x)'
-        else
-          write (outu, *) 'Unable to perform exponential fit: ', &
-                                       'there is at least one nonpositive y-value'
-        end if
-
-        call PowerLeastSquares(ds, aval, bval, suces)
-        write (outu, *) ! Blank line
-        if (suces .eqv. .true.) then
-          write (outu, *) 'Power fit:        y = ', trim(real2str(bval)), &
-                                       ' * x^', trim(real2str(aval))
-        else
-          write (outu, *) 'Unable to perform power fit: ', &
-                                       'there is at least one nonpositive x- or y-value'
-        end if
-
-        write (outu, *) ! Blank line
-        
-      case (4) ! Option 4 - Exit
-        ! Allow loop to stop
-
-      case default
-        write (*, *) 'The option you chose is not valid.'
-    end select
-    
-  end do
-  
-  stop
-  
-contains
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! LoadDataSet - Ask the user for an input filename, and read data points from
-  !               that file into the ds%datapt array, storing the number
-  !               of points in ds%npts and computing sums
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine LoadDataSet(ds)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)             Description
-    type(Tdataset), intent(out) :: ds                ! Data points and sums
-    character (len=64)          :: infile            ! Input filename
-    integer                     :: ieof              ! File status
-    integer                     :: indx              ! Loop counter
-    integer                     :: inu               ! Input file unit number
-    integer                     :: imaxpairs         ! Maximum number of pairs
-    
-    ! Default maximum number of pairs to array size
-    imaxpairs = ubound(ds%datapt,2)
-    
-    ! Ask the user for the name of the input file
-    write (*, *) 'Enter the input filename or - for keyboard input: '
-    read (*, *) infile
-    
-    ! Determine the input unit number
-    if (infile .eq. '-') then
-    
-      inu = 5     ! Read from keyboard (standard input)
-      
-      write (*, *) 'How many pairs? '
-      read (*, *) imaxpairs
-      
-      ! Make sure this number is legal
-      if (imaxpairs .lt. 1 .or. imaxpairs .gt. ubound(ds%datapt,2)) then
-        write (*, *) 'Number of pairs must be between 1 and ', &
-          trim(int2str(ubound(ds%datapt,2)))
-        stop
-      end if
-      
-      write (*, *) 'Enter pairs, one per line'
-      write (*, *) ! End line before input
-      
-    else
-    
-      inu = 10    ! Read from file
-    
-      ! Open the file
-      open (10, file = infile, status = 'old', iostat = ieof)
-      if (ieof .ne. 0) then
-        write (*, *) 'The specified file could not be opened.'
-        stop
-      end if
-      
-    end if
-
-    ! Initialize the members of the dataset structure
-    ds%npts      = 0
-    ds%valsum(1) = 0.0
-    ds%valsum(2) = 0.0
-    ds%valsum(3) = 0.0
-    ds%valsum(4) = 0.0
-    ds%sqsum(1)  = 0.0
-    ds%sqsum(2)  = 0.0
-    ds%sqsum(3)  = 0.0
-    ds%sqsum(4)  = 0.0
-    ds%xysum(1)  = 0.0
-    ds%xysum(2)  = 0.0
-    ds%xysum(3)  = 0.0
-    ds%has_np(1) = .false.
-    ds%has_np(2) = .false.
-
-    ! Read data points until EOF or imaxpairs reached
-    do while (ds%npts < imaxpairs)
-    
-      ! Load the points into the datapt array, 
-      read (inu, *, end = 110) &
-        ds%datapt(1, ds%npts + 1), &
-        ds%datapt(2, ds%npts + 1)
-      
-      ! Calculate ln x, or set has_np if the value is nonpositive
-      if (ds%datapt(1, ds%npts + 1) .le. 0) then
-        ds%datapt(3, ds%npts + 1) = 0
-        ds%has_np(1) = .true.
-      else
-        ds%datapt(3, ds%npts + 1) = log(ds%datapt(1, ds%npts + 1))
-      end if
-      
-      ! Calculate ln y, or set has_np if the value is nonpositive
-      if (ds%datapt(2, ds%npts + 1) .le. 0) then
-        ds%datapt(4, ds%npts + 1) = 0
-        ds%has_np(2) = .true.
-      else
-        ds%datapt(4, ds%npts + 1) = log(ds%datapt(2, ds%npts + 1))
-      end if
-        
-      ! Update the number of points
-      ds%npts      = ds%npts      + 1
-
-      ! Update the value sums and square sums
-      do indx = 1,4
-        ds%valsum(indx) = ds%valsum(indx) + ds%datapt(indx, ds%npts)
-        ds%sqsum(indx)  = ds%sqsum(indx)  + ds%datapt(indx, ds%npts)**2
-      end do
-      
-      ! Update the xy sums (xy, x ln y, ln x ln y)
-      ds%xysum(1)  = ds%xysum(1) + &
-        ds%datapt(1, ds%npts) * ds%datapt(2, ds%npts)
-      ds%xysum(2)  = ds%xysum(2) + &
-        ds%datapt(1, ds%npts) * ds%datapt(4, ds%npts)
-      ds%xysum(3)  = ds%xysum(3) + &
-        ds%datapt(3, ds%npts) * ds%datapt(4, ds%npts)
-      
-    end do
-    
-    ! If we get here and we're reading from a file, there are more than
-    ! ubound(ds%datapt,2) points in the file, so display a warning
-    if (inu .eq. 10) then
-      write (*, *) 'WARNING: Only the first ', &
-        trim(int2str(ubound(ds%datapt,2))), ' points will be used'
-    end if
-
-    ! We have read all points from the file; close it
-110 if (inu .eq. 10) then
-      close (10)
-    end if
-    
-    return
-
-  end subroutine LoadDataSet
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! ShowDataPoints - Display the list of data points
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine ShowDataPoints(ds)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    integer                     :: indx       ! Loop counter
-  
-    ! Display a header
-    write (*, '(a5,a2,2a10)') '=====', '==', '==========', &
-                                                          '=========='
-    write (*, '(a5,2x,2a10)') 'i', 'x_i', 'y_i'
-    write (*, '(a5,a2,2a10)') '=====', '==', '==========', &
-                                                          '=========='
-
-    ! Display the list of points
-    do indx = 1,ds%npts
-      write (*, '(i5,a,2f10.4)') &
-        indx, ': ', ds%datapt(1,indx), ds%datapt(2,indx)
-    end do
-    
-    ! Display a footer
-    write (*, '(a5,a2,2a10)') '=====', '==', '==========', &
-                                                          '=========='
-    
-    return
-    
-  end subroutine ShowDataPoints
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! SquareDistances - Calculate the sums of squares of distances of a set of
-  !                   points from a given line f(x) = mx + b
-  !
-  ! finv denotes the inverse of the function f
-  !
-  ! Sum of squares of vertical distances is returned in ssvd
-  ! Sum of squares of horizontal distances is returned in sshd
-  ! Sum of squares of perpendicular distances is returned in sspd
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine SquareDistances(ds, slopem, intrcpt, ssvd, sshd, sspd)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    real, intent(in)            :: slopem     ! Slope of the line
-    real, intent(in)            :: intrcpt    ! Line's y-intercept
-    real                        :: fx         ! f(x) at a given x
-    real                        :: finvy      ! finv(y) at a given y
-    real                        :: perpx      ! x-coord where a perpendicular
-                                              !   line through (x_i,y_i)
-                                              !   intersects
-    real                        :: perpy      ! y-coord of intersection
-    real :: vdist, hdist, pdist               ! Distances of a particular point
-    real, intent(out)           :: ssvd       ! Sum of squares of vert dist's
-    real, intent(out)           :: sshd       ! Sum of squares of horiz dist's
-    real, intent(out)           :: sspd       ! Sum of squares of perp dist's
-    integer                     :: indx       ! Loop counter
-    
-    ! Initialize sums to 0.0
-    ssvd = 0.0
-    sshd = 0.0
-    sspd = 0.0
-  
-    ! Add the squares of the distances
-    do indx = 1,ds%npts
-      ! Calculate f(x_i) = m x_i + b
-      fx = slopem * ds%datapt(1,indx) + intrcpt
-      
-      ! Calculate finv(y_i) = (y_i - b) / m
-      finvy = (ds%datapt(2,indx) - intrcpt) / slopem
-      
-      ! Vertical distance = |f(x_i) - y_i|
-      vdist = abs(fx - ds%datapt(2,indx))
-      
-      ! Horizontal distance = |finv(y_i) - x_i|
-      hdist = abs(finvy - ds%datapt(1,indx))
-      
-      ! Perpendicular distance is more complicated
-      
-      ! The perpendicular line through (x_i, y_i) will intersect
-      ! at x-coordinate (y_i + x_i/m - b)/(m + 1/m)
-      ! and y-coordinate f(perpx)
-      perpx = (ds%datapt(2,indx) + ds%datapt(1,indx)/slopem - intrcpt) &
-              / (slopem + 1.0/slopem)
-      perpy = slopem * perpx + intrcpt
-      
-      ! Perpendicular distance is now given by the distance formula
-      !    ________________________________
-      !   /              2                2
-      ! \/  (y_i - perpy)  + (x_i - perpx)
-      !
-      pdist = sqrt((ds%datapt(2,indx) - perpy)**2 + (ds%datapt(1,indx) - perpx)**2)
-      
-      ! Now add these distances squared to the sums
-      ssvd = ssvd + vdist**2
-      sshd = sshd + hdist**2
-      sspd = sspd + pdist**2
-    end do
-    
-    return
-    
-  end subroutine SquareDistances
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! OpenOutput - Open an output file and return the unit number
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  integer function OpenOutput() result(outu)
-
-    ! Declare all variables
-    implicit none
-    ! Type                  Name(s)             Description
-    character (len=64) :: outfile           ! Output filename
-    integer            :: ieof              ! File status
-
-    ! Ask the user for the name of the output file
-    write (*, *) 'Enter the output filename or - for screen display: '
-    read (*, *) outfile
-    
-    if (outfile .eq. '-') then
-      outu = 6  ! Standard output
-    else
-    
-      ! Open the file
-      open (10, file = outfile, status = 'replace', iostat = ieof)
-      if (ieof .ne. 0) then
-        write (*, *) 'The specified file could not be opened.'
-        stop
-      end if
-      
-      outu = 10 ! File output
-    end if
-    
-    return
-    
-  end function OpenOutput
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! LinearLeastSquares - Compute a linear least squares line y = ax + b
-  !                      using vertical or horizontal distances
-  !
-  ! For vertical distances, set xcol = 1 and ycol = 2
-  ! For horizontal distances, set xcol = 2 and ycol = 1
-  ! Other values of xcol and ycol are used by the power and exponential
-  !   least squares functions (see below)
-  ! Values of a and b will be stored in aval and bval
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine LinearLeastSquares(ds, xcol, ycol, aval, bval)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    integer, intent(in)         :: xcol       ! Which column contains x-values
-                                              !   (independent data)?
-    integer, intent(in)         :: ycol       ! Which column contains y-values
-                                              !   (dependent data)?
-    integer                     :: xycol      ! Which xyval to use?
-    real, intent(out)           :: aval       ! Value of a
-    real, intent(out)           :: bval       ! Value of b
-    real                        :: dval       ! Value of delta (denominator)
-    
-    ! Determine which xyval to use (xy, x ln y, or ln x ln y)
-    if (xcol .eq. 1 .and. ycol .eq. 2 .or. xcol .eq. 2 .and. ycol .eq. 1) then
-      xycol = 1
-    else if (xcol .eq. 1 .and. ycol .eq. 4 .or. xcol .eq. 4 .and. ycol .eq. 1) then
-      xycol = 2
-    else if (xcol .eq. 3 .and. ycol .eq. 4 .or. xcol .eq. 4 .and. ycol .eq. 3) then
-      xycol = 3
-    else
-      write (*, *) 'ERROR: Invalid call to LinearLeastSquares'
-      write (*, *) 'Unable to continue'
-      stop
-    end if
-    
-    ! Compute the denominator:
-    !
-    !             n                n        2
-    !            ___    2      (  ___     )
-    ! delta = n  \    x    -  (   \    x   )
-    !            /__   i      (   /__   i  )
-    !                          (          )
-    !            i=1              i=1
-    
-    dval = ds%npts * ds%sqsum(xcol) - ds%valsum(xcol)**2
-    
-    ! Compute a:
-    !
-    !          n            n        n
-    !         ___          ___      ___
-    !      n  \    x y  -  \    x   \    y
-    !         /__   i i    /__   i  /__   i
-    !
-    !         i=1          i=1      i=1
-    ! a = ----------------------------------
-    !                   delta
-    
-    aval = ( ds%npts * ds%xysum(xycol) -         &
-             ds%valsum(xcol) * ds%valsum(ycol) ) &
-           / dval
-    
-    
-    ! Compute b:
-    !
-    !       n        n            n        n
-    !      ___      ___    2     ___      ___
-    !      \    y   \    x    -  \    x   \    x y
-    !      /__   i  /__   i      /__   i  /__   i i
-    !
-    !      i=1      i=1          i=1      i=1
-    ! b = ------------------------------------------
-    !                   delta
-    
-    bval = ( ds%valsum(ycol) * ds%sqsum(xcol) -   &
-             ds%valsum(xcol) * ds%xysum(xycol)  ) &
-           / dval
-           
-    ! If we are calculating using horizontal distances, we need to
-    ! solve x=ay+b for y (y = 1/a * x - b/a) and change a and b
-    ! accordingly
-    if (xcol .gt. ycol) then
-      aval = 1.0 / aval
-      bval = -bval * aval
-    end if
-    
-    return
-    
-  end subroutine LinearLeastSquares
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! PerpLeastSquares - Compute a linear least squares line y = ax + b
-  !                    using perpendicular distances
-  !
-  ! To use a = -p + sqrt(...), set subtr to an even value
-  ! To use a = -p - sqrt(...), set subtr to an odd value
-  ! Values of a and b will be stored in aval and bval
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine PerpLeastSquares(ds, subtr, aval, bval)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    integer, intent(in)         :: subtr      ! Determines which of two values
-                                              !   of a will be chosen
-    real, intent(out)           :: aval       ! Value of a
-    real, intent(out)           :: bval       ! Value of b
-    real                        :: pval       ! Value of p
-    
-    ! Compute p:
-    !
-    !         (   n           n       )    [  (  n      )  2   (  n      )  2 ]
-    !        (   ___    2    ___    2  )   [ (  ___      )    (  ___      )   ]
-    !      n (   \    x   -  \    y    ) - [ (  \    x   )  - (  \    y   )   ]
-    !        (   /__   k     /__   k   )   [ (  /__   k  )    (  /__   k  )   ]
-    !        (                         )   [  (         )      (         )    ]
-    !         (  k=1         k=1      )    [    k=1              k=1          ]  
-    ! p = ----------------------------------------------------------------------
-    !         (     n           n       n     )
-    !        (     ___         ___     ___     )
-    !      2 (  n  \   x y  -  \   x   \   y   )
-    !        (     /__  k k    /__  k  /__  k  )
-    !        (                                 )
-    !         (    k=1         k=1     k=1    )
-    
-    pval = (ds%npts*(ds%sqsum(1)-ds%sqsum(2)) - (ds%valsum(1)**2 - ds%valsum(2)**2)) &
-           / (2 * (ds%npts*ds%xysum(1) - ds%valsum(1)*ds%valsum(2)))
-    
-    !                        _______
-    !                       / 2
-    ! Compute a = -p +/-   / p  + 1
-    !                    \/
-    
-    aval = -pval + (-1)**subtr * sqrt(pval**2 + 1)
-
-    !               n           n
-    !              ___         ___
-    !              \    y  - a \    x
-    !              /__   k     /__   k
-    !
-    !              k=1         k=1
-    ! Compute b = ---------------------
-    !                       n
-    
-    bval = ( ds%valsum(2) - aval * ds%valsum(1) ) / ds%npts
-    
-    return
-    
-  end subroutine PerpLeastSquares
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !                                                                     ax
-  ! ExpLeastSquares - Compute an exponential least squares curve y = b e
-  !                   using vertical distances
-  !
-  ! Values of a and b will be stored in aval and bval
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine ExpLeastSquares(ds, aval, bval, suces)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    real, intent(out)           :: aval       ! Value of a
-    real, intent(out)           :: bval       ! Value of b
-    logical, intent(out)        :: suces      ! Success?
-
-    ! Make sure all y-values are positive
-    if (ds%has_np(2) .eqv. .true.) then
-      suces = .false.
-      return
-    end if
-    
-    ! Exponential least squares is done by reducing the problem to a linear
-    ! one, which is more easily solved.
-    
-    ! We want    y  = b e^(ax)
-    ! ==>     ln(y) = ln(b e^(ax)
-    ! ==>     ln(y) = ln(b) + ax
-    ! ==>     ln(y) = ax + ln(b)
-    
-    ! Use linear least squares on ln(y) = ax + ln(b)
-    call LinearLeastSquares(ds, 1, 4, aval, bval)
-    ! The variable bval now contains ln(b); make it contain b instead
-    bval = exp(bval)
-    
-    ! Now     ln(y) = ax + ln(b)
-    ! So         y  = e^(ax + ln(b))
-    ! ==>        y  = e^(ax) e^(ln(b))
-    ! ==>        y  = e^(ax) b
-    ! ==>        y  = b e^(ax)
-    
-    suces = .true.
-    return
-  
-  end subroutine ExpLeastSquares
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !                                                           a
-  ! PowerLeastSquares - Compute an least squares curve y = b x
-  !                     using vertical distances
-  !
-  ! Values of a and b will be stored in aval and bval
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  subroutine PowerLeastSquares(ds, aval, bval, suces)
-  
-    ! Declare all variables
-    implicit none
-    ! Type                         Name(s)      Description
-    type(Tdataset), intent(in)  :: ds         ! Data points and sums
-    real, intent(out)           :: aval       ! Value of a
-    real, intent(out)           :: bval       ! Value of b
-    logical, intent(out)        :: suces      ! Success?
-
-    ! Make sure all values are positive
-    if ((ds%has_np(1) .eqv. .true.) .or. (ds%has_np(2) .eqv. .true.)) then
-      suces = .false.
-      return
-    end if
-    
-    ! Exponential least squares is done by reducing the problem to a linear
-    ! one, which is more easily solved.
-    
-    ! We want    y  = b x^a
-    ! ==>     ln(y) = ln(b x^a)
-    ! ==>     ln(y) = ln(b) + ln(x^a)
-    ! ==>     ln(y) = ln(b) + a ln(x)
-    ! ==>     ln(y) = a ln(x) + ln(b)
-    
-    ! Use linear least squares on ln(y) = a ln(x) + ln(b)
-    call LinearLeastSquares(ds, 3, 4, aval, bval)
-    ! The variable bval now contains ln(b); make it contain b instead
-    bval = exp(bval)
-    
-    ! Now     ln(y) = a ln(x) + ln(b)
-    !
-    !                  a ln(x) + ln(b)
-    ! ==>        y  = e
-    !
-    !                  a ln(x)  ln(b)
-    ! ==>        y  = e        e
-    !
-    !                   a ln(x)
-    ! ==>        y  = (e )      b
-    !
-    !                   ln(x) a
-    ! ==>        y  = (e     )  b
-    !
-    !                  a
-    ! ==>        y  = x  b
-    !
-    !                    a
-    ! ==>        y  = b x
-    
-    suces = .true.
-    return
-  
-  end subroutine PowerLeastSquares
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! int2str - Convert an integer i to a string
-  !
-  ! The string will need to be trim()ed before displaying
-  !
-  ! Shouldn't something like this be built in?!
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  character(len=32) function int2str(i) result(s)
-  
-    ! Declare all variables
-    implicit none
-    
-    ! Type                 Name       Description
-    integer, intent(in) :: i        ! The number to convert
-    integer             :: ival     ! The number, with leading digits removed
-    integer             :: ndigits  ! The number of digits in the number
-    integer             :: indx     ! Loop counter
-    integer             :: is_neg   ! 0 if negative, 1 if positive
-
-    ! Start with a 0 string, overwriting the 0 if necessary
-    s = '0'
-    
-    ! Handle the cases where i is <= 0
-    if (i .eq. 0) then
-      return
-    else if (i .lt. 0) then
-      s(1:1) = '-'  ! Prefix output with a minus sign
-      is_neg = 1    ! There is one extra character at the start of the number
-      ival = -i     ! Now write out the absolute value of i
-    else
-      is_neg = 0    ! It's not negative
-      ival = i      ! We want to write out i
-    end if
-    
-    ! The number of digits needed to write out an integer i in base b is
-    ! |           |
-    ! |  log (i)  | + 1
-    ! |_    b    _|
-    !
-    ndigits = floor(log10(ival*1.0)) + 1
-    
-    ! Write out the digits in order, starting at the left
-    do indx = 1, ndigits
-      ! What is the first digit's ASCII code?  Append it to the string
-      s(indx+is_neg:indx+is_neg) = char(48 + ival/10**(ndigits-indx))
-      ! Now remove the first digit from ival
-      ival = ival - (ival/10**(ndigits-indx))*10**(ndigits-indx)
-    end do
-  
-    return
-    
-  end function int2str
-  
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  !
-  ! real2str - Convert a real number r to a string
-  !
-  ! The string will need to be trim()ed before displaying
-  !
-  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  character(len=128) function real2str(r) result(s)
-  
-    ! Declare all variables
-    implicit none
-    
-    ! Type                 Name       Description
-    real, intent(in)    :: r        ! The number to convert
-    real                :: rval     ! Value of |r|
-    integer             :: intpt    ! The integer part of the number
-    integer             :: ifracpt  ! The fractional part of the number
-                                    !   (rounded somewhat)
-    character(len=1)    :: is_neg   ! '-' if negative, ' ' otherwise
-    character(len=32)   :: sintpt   ! The integer part, as a string
-    character(len=32)   :: slead0   ! Leading 0s for fractional part
-    character(len=32)   :: sfracpt  ! The fractional part, as a string
-    integer             :: nfdigs=4 ! Number of fractional digits
-    
-    ! If the number's negative, remember this, but make it positive
-    if (r .lt. 0) then
-      is_neg = '-'
-      rval = -r
-    else
-      is_neg = ' '
-      rval = r
-    end if
-
-    ! Integer part = |_ r _|
-    intpt = floor(rval)
-    
-    ! To get the fractional part, subtract off the integer part, multiply
-    ! by 10**(# decimal places), and take the floor to drop off extra digits
-    ifracpt = floor((rval-intpt) * 10**nfdigs)
-    
-    ! Now convert the integer and fractional parts to strings
-    sintpt = int2str(intpt)
-    sfracpt = int2str(ifracpt)
-    slead0 = repeat('0', nfdigs-len_trim(sfracpt))
-    
-    ! Now just concatenate the number together
-    s = trim(is_neg) // &  ! Negative sign (if any)
-        trim(sintpt) // &  ! Integer part
-        '.' // &           ! Decimal point
-        trim(slead0) // &  ! Fractional part leading zeros
-        int2str(ifracpt)   ! Fractional part
-    
-    return
-    
-  end function real2str
-  
-end program BstFitProj
diff --git a/org.eclipse.photran-samples/src-modules/.cvsignore b/org.eclipse.photran-samples/src-modules/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-modules/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-modules/module1.f90 b/org.eclipse.photran-samples/src-modules/module1.f90
deleted file mode 100644
index d7ade86..0000000
--- a/org.eclipse.photran-samples/src-modules/module1.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-module Module1
-contains
-    subroutine say_hi
-        print *, "Hi"
-    end subroutine
-
-    subroutine say_bye
-        print *, "Bye"
-    end subroutine
-
-    subroutine rename_this
-        print *, "Renamed in 1"
-    end subroutine
-end module
diff --git a/org.eclipse.photran-samples/src-modules/module2.f90 b/org.eclipse.photran-samples/src-modules/module2.f90
deleted file mode 100644
index b9e484f..0000000
--- a/org.eclipse.photran-samples/src-modules/module2.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-module Module2
-contains
-    subroutine say_konnichiwa
-        print *, "Kon'nichiwa"
-    end subroutine
-
-    subroutine say_sayonara
-        print *, "Sayonara"
-    end subroutine
-
-    subroutine rename_this
-        print *, "Renamed in 2"
-    end subroutine
-end module
diff --git a/org.eclipse.photran-samples/src-modules/zmain.f90 b/org.eclipse.photran-samples/src-modules/zmain.f90
deleted file mode 100644
index d4b8d98..0000000
--- a/org.eclipse.photran-samples/src-modules/zmain.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-program MyProgram
-!implicit none
-
-use module1, renamed_in_1 => rename_this
-use module2, only: say_konnichiwa, renamed_in_2 => rename_this
-
-call start
-
-call say_hi
-call say_bye
-call say_konnichiwa
-!call say_sayonara
-call renamed_in_1
-call renamed_in_2
-
-stop
-
-contains
-
-subroutine start
-  implicit none
-  integer :: i
-    print *, i
-end subroutine
-
-end
diff --git a/org.eclipse.photran-samples/src-scoping/.cvsignore b/org.eclipse.photran-samples/src-scoping/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-scoping/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-scoping/scoping.f90 b/org.eclipse.photran-samples/src-scoping/scoping.f90
deleted file mode 100644
index 9cc9b36..0000000
--- a/org.eclipse.photran-samples/src-scoping/scoping.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-program p
-    call ctn1
-    call ctn2
-    call ext1
-    call ext2
-contains
-  subroutine ctn1
-    call ctn2
-    call ext1
-    call ext2
-  end subroutine
-  
-  subroutine ctn2
-    call ctn1
-    call ext1
-    call ext2
-  end subroutine
-end program p
-
-subroutine ext1
-    call ext2
-end subroutine ext1
-
-subroutine ext2
-    call ext1
-end subroutine ext2
diff --git a/org.eclipse.photran.core.vpg.tests.failing/.classpath b/org.eclipse.photran.core.vpg.tests.failing/.classpath
deleted file mode 100644
index 472ee29..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.photran.core.vpg.tests.failing/.project b/org.eclipse.photran.core.vpg.tests.failing/.project
deleted file mode 100644
index 82783c8..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.photran.core.vpg.tests.failing</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sourceforge.metrics.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>net.sourceforge.metrics.nature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index da520e9..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,268 +0,0 @@
-#Thu Jun 05 10:10:18 EDT 2008
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=20
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=18
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=18
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=1
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=1
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 7039f96..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu Jun 05 10:22:58 EDT 2008
-eclipse.preferences.version=1
-formatter_profile=_Jeff
-formatter_settings_version=11
-org.eclipse.jdt.ui.javadoc=true
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\r\n * Copyright (c) ${year} University of Illinois at Urbana-Champaign and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *\r\n * Contributors\:\r\n *    UIUC - Initial API and implementation\r\n *******************************************************************************/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * \r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/org.eclipse.photran.core.vpg.tests.failing/META-INF/MANIFEST.MF b/org.eclipse.photran.core.vpg.tests.failing/META-INF/MANIFEST.MF
deleted file mode 100644
index 8956fa9..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Photran VPG Failing Unit Tests
-Bundle-SymbolicName: org.eclipse.photran.core.vpg.tests.failing
-Bundle-Version: 1.0.0
-Bundle-Vendor: Eclipse.org
-Require-Bundle: org.eclipse.photran.core.vpg.tests,
- org.eclipse.photran.ui.vpg,
- org.junit,
- org.eclipse.photran.core,
- org.eclipse.photran.core.vpg,
- org.eclipse.cdt.core,
- org.eclipse.cdt.core.tests,
- org.eclipse.jface,
- org.eclipse.search
diff --git a/org.eclipse.photran.core.vpg.tests.failing/build.properties b/org.eclipse.photran.core.vpg.tests.failing/build.properties
deleted file mode 100644
index 34d2e4d..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90 b/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90
deleted file mode 100644
index 3f0bedf..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-program Hello
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-end program
-
-integer function Fn(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
diff --git a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90.result b/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90.result
deleted file mode 100644
index 039a260..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello.f90.result
+++ /dev/null
@@ -1,23 +0,0 @@
-program Hello
-  implicit none
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-  implicit none
-  real :: x
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-end program
-
-integer function Fn(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
diff --git a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90 b/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90
deleted file mode 100644
index b753872..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-program Hello
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-integer function Fn(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90.result b/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90.result
deleted file mode 100644
index 8ac7f99..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/intro-implicit-test-code/hello2.f90.result
+++ /dev/null
@@ -1,26 +0,0 @@
-program Hello
-  implicit none
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-  implicit none
-  real :: x
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-integer function Fn(n) result(y)
-  implicit none
-  integer :: n
-  integer :: y
-  print *, "You sent", n, "to the function"
-  y = n
-end function
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/00-README.txt b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/00-README.txt
deleted file mode 100644
index f031a7e..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/00-README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The classes in this package are identical to those in the same package in the
-org.eclipse.photran.core.vpg.tests plug-in, EXCEPT that they create an instance
-of FailingParserTestSuite
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialFromTheWWW.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialFromTheWWW.java
deleted file mode 100644
index a59c39e..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialFromTheWWW.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialFromTheWWW
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.from-the-www", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialLAPACK.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialLAPACK.java
deleted file mode 100644
index 47cd108..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialLAPACK.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialLAPACK
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.lapack", true, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialNagleFortran2003.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialNagleFortran2003.java
deleted file mode 100644
index 8038987..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialNagleFortran2003.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialNagleFortran2003
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.nagle-fortran2003", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialPOP.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialPOP.java
deleted file mode 100644
index 0e6cbae..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialPOP.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialPOP
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.pop", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdFortran2003.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdFortran2003.java
deleted file mode 100644
index 8f382b2..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdFortran2003.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdFortran2003
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-fortran2003", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java
deleted file mode 100644
index d9532f7..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdTestSuiteFixed
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-test-suite",
-            true, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java
deleted file mode 100644
index 515c3e2..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/a_parser/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.a_parser;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.FailingParserTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdTestSuiteFree
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new FailingParserTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-test-suite",
-            false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestReindent.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestReindent.java
deleted file mode 100644
index 1078ff9..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestReindent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.eclipse.photran.internal.core.tests.f_source_editing;
-
-import org.eclipse.photran.internal.core.tests.AbstractSourceEditorTestCase;
-
-public class TestReindent extends AbstractSourceEditorTestCase
-{
-    public void test() {}
-    
-//    public void testPasteQOutsideAndReindent() throws Exception
-//    {
-//        ASTExecutableProgramNode ast = load("hello-1-initial.f90");
-//        
-//        ASTSubroutineSubprogramNode q = ast.getASTProgramUnit(1).getASTMainProgram().getASTMainRange().getASTBodyPlusInternals().getASTInternalSubprogram(2).getASTSubroutineSubprogram();
-//        SourceEditor.cut(q);
-//        SourceEditor.pasteAsFirstChild(q, ast.getASTProgramUnit(0), ast, true);
-//        assertEquals(load("hello-7-q-pasted-formatted.f90"), ast);
-//    }
-//
-//    public void testPasteQAtBottomAndReindent() throws Exception
-//    {
-//        ASTExecutableProgramNode ast = load("hello-1-initial.f90");
-//        
-//        ASTSubroutineSubprogramNode q = ast.getASTProgramUnit(1).getASTMainProgram().getASTMainRange().getASTBodyPlusInternals().getASTInternalSubprogram(2).getASTSubroutineSubprogram();
-//        SourceEditor.cut(q);
-//        SourceEditor.pasteAsLastChild(q, ast.getASTProgramUnit(0), ast, true);
-//        assertEquals(load("hello-8-q-pasted-at-bottom-formatted.f90"), ast);
-//    }
-//
-//    public void testPasteTAboveQAndReindent() throws Exception
-//    {
-//        ASTExecutableProgramNode ast = load("hello-1-initial.f90");
-//        
-//        ASTSubroutineSubprogramNode t = ast.getASTProgramUnit(0).getASTSubroutineSubprogram();
-//        ParseTreeNode internalSubprogram2 = ast.getASTProgramUnit(1).getASTMainProgram().getASTMainRange().getASTBodyPlusInternals().getASTInternalSubprogram(2);
-//        SourceEditor.cut(t);
-//        SourceEditor.pasteAsFirstChild(t, internalSubprogram2, ast, true);
-//        assertEquals(load("hello-9-t-above-q.f90"), ast);
-//    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java
deleted file mode 100644
index cbd6649..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.eclipse.photran.refactoring.tests.introimplicitnone;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class IntroImplicitTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("hello.f90"));
-        suite.addTest(getSuiteFor("hello2.f90"));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Introducing Implicit None in " + baseFilename);
-        subSuite.addTest(new IntroImplicitTestCase(baseFilename, new LineCol(1, 9)));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java b/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java
deleted file mode 100644
index 271eab0..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.eclipse.photran.search.tests;
-
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.internal.ui.search.VPGSearchQuery;
-import org.eclipse.search.ui.text.Match;
-
-/**
- * The suite of tests for testing search functionality
- * 
- * @author Jeff Dammeyer, Andrew Deason, Joe Digiovanna, Nick Sexmith
- */
-public class VPGSearchTestSuite extends TestSuite
-{   
-    /**
-     * Adds all the tests to the suite for searching tests
-     */
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        ArrayList<Match> matches = new ArrayList<Match>();
-        
-        //test 4
-        //Tests FIND_REFERENCES
-        matches = new ArrayList<Match>();
-        matches.add(new Match("foo.f90",30,1));
-        matches.add(new Match("implicitTest.f90",22,1));
-        suite.addTest(getSuiteFor("testFour", new VPGSearchTestCase("a",
-            VPGSearchQuery.FIND_REFERENCES | VPGSearchQuery.FIND_ALL_TYPES, matches, false)));
-               
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename, VPGSearchTestCase testCase)
-    {
-        TestSuite subSuite = new TestSuite(baseFilename);
-        subSuite.addTest(testCase);
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/.classpath b/org.eclipse.photran.core.vpg.tests/.classpath
deleted file mode 100644
index 017e786..0000000
--- a/org.eclipse.photran.core.vpg.tests/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="lib" path="/org.eclipse.photran.core.vpg/vpg-eclipse.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.photran.core.vpg.tests/.project b/org.eclipse.photran.core.vpg.tests/.project
deleted file mode 100644
index 67cbcd3..0000000
--- a/org.eclipse.photran.core.vpg.tests/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.photran.core.vpg.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>net.sourceforge.metrics.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>net.sourceforge.metrics.nature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2670e7f..0000000
--- a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,268 +0,0 @@
-#Thu Jun 05 10:10:12 EDT 2008
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=20
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=18
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=18
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=20
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=1
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=100
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=1
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=true
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=100
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=space
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
diff --git a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.ui.prefs b/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index f3b164a..0000000
--- a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu Jun 05 10:22:49 EDT 2008
-eclipse.preferences.version=1
-formatter_profile=_Jeff
-formatter_settings_version=11
-org.eclipse.jdt.ui.javadoc=true
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\r\n * @param ${param} the ${bare_field_name} to set\r\n */</template><template autoinsert\="true" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*******************************************************************************\r\n * Copyright (c) ${year} University of Illinois at Urbana-Champaign and others.\r\n * All rights reserved. This program and the accompanying materials\r\n * are made available under the terms of the Eclipse Public License v1.0\r\n * which accompanies this distribution, and is available at\r\n * http\://www.eclipse.org/legal/epl-v10.html\r\n *\r\n * Contributors\:\r\n *    UIUC - Initial API and implementation\r\n *******************************************************************************/</template><template autoinsert\="false" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\r\n * \r\n * @author ${user}\r\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\r\n * \r\n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\r\n * ${tags}\r\n */</template><template autoinsert\="true" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/* (non-Javadoc)\r\n * ${see_to_overridden}\r\n */</template><template autoinsert\="true" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\r\n * ${tags}\r\n * ${see_to_target}\r\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\r\n${package_declaration}\r\n\r\n${typecomment}\r\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\r\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\r\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\r\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\r\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\r\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\r\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\r\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF b/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index f76d7db..0000000
--- a/org.eclipse.photran.core.vpg.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,33 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Photran Virtual Program Graph Tests Plug-in
-Bundle-SymbolicName: org.eclipse.photran.core.vpg.tests
-Bundle-Version: 1.0.0
-Bundle-Vendor: Eclipse.org
-Require-Bundle: org.eclipse.photran.core.vpg,
- org.eclipse.photran.ui.vpg,
- org.eclipse.cdt.core.tests,
- org.eclipse.core.resources,
- org.eclipse.ltk.core.refactoring,
- org.eclipse.core.runtime,
- org.eclipse.jface.text,
- org.junit,
- org.eclipse.cdt.core,
- org.eclipse.jface,
- org.eclipse.search
-Eclipse-LazyStart: true
-Bundle-Activator: org.eclipse.photran.refactoring.tests.Activator
-Export-Package: org.eclipse.photran.internal.core.tests,
- org.eclipse.photran.internal.core.tests.f_source_editing,
- org.eclipse.photran.internal.core.tests.g_type_check,
- org.eclipse.photran.internal.core.tests.h_interface_links,
- org.eclipse.photran.internal.core.tests.projects,
- org.eclipse.photran.internal.core.tests.serialization,
- org.eclipse.photran.internal.core.tests.x_cpreprocessor,
- org.eclipse.photran.refactoring.tests,
- org.eclipse.photran.refactoring.tests.extractprocedure,
- org.eclipse.photran.refactoring.tests.infrastructure,
- org.eclipse.photran.refactoring.tests.introimplicitnone,
- org.eclipse.photran.refactoring.tests.movesavedtocommonblock,
- org.eclipse.photran.refactoring.tests.rename,
- org.eclipse.photran.search.tests
diff --git a/org.eclipse.photran.core.vpg.tests/Makefile b/org.eclipse.photran.core.vpg.tests/Makefile
deleted file mode 100644
index 6d0965f..0000000
--- a/org.eclipse.photran.core.vpg.tests/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-all:
-	$(MAKE) -C rename-test-code
-
-clean:
-	$(MAKE) clean -C rename-test-code
diff --git a/org.eclipse.photran.core.vpg.tests/NOTE b/org.eclipse.photran.core.vpg.tests/NOTE
deleted file mode 100644
index 281ce20..0000000
--- a/org.eclipse.photran.core.vpg.tests/NOTE
+++ /dev/null
@@ -1,18 +0,0 @@
-Due to licensing restrictions, most of the Fortran code used for testing
-the parser cannot be made publicly available.  The corresponding JUnit
-tests will NOT fail if these directories do not exist; an informational
-message will be displayed instead.
-
-If you are working on the lexer/parser and require access to this code,
-please e-mail one of the developers.
-
-To add more confidential Fortran code to the parser test suite:
-(1) Add the code in subdirectories under parser-test-code
-    (by convention, their names start with "confidential-")
-(2) Add these subdirectories to .cvsignore
-(3) Use the ParseIBEAM or ParseConfidential*Files classes as
-    examples of how to have the code parsed.  Be sure to pass
-    "false" for the mustExist parameter.
-(4) Distribute the code to the other developers working on the parser.
-
---Jeff Overbey (23 Sept 06)
diff --git a/org.eclipse.photran.core.vpg.tests/build.properties b/org.eclipse.photran.core.vpg.tests/build.properties
deleted file mode 100644
index 34d2e4d..0000000
--- a/org.eclipse.photran.core.vpg.tests/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90
deleted file mode 100644
index f572c17..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-module module1
-	implicit none
-	integer :: i,j,k
-	
-contains
-
-end module
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90.result
deleted file mode 100644
index 593f327..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/module1.f90.result
+++ /dev/null
@@ -1,19 +0,0 @@
-module module1
-	implicit none
-	integer :: i,j,k
-	private :: i
-	
-contains
-    subroutine setI(value)
-        implicit none
-        integer, intent(in) :: value
-        i = value
-    end subroutine
-
-    integer function getI()
-        implicit none
-        getI = i
-    end function
-
-
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90
deleted file mode 100644
index eb96a3c..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *, variable
-  variable = 3
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90.result
deleted file mode 100644
index c4c19f3..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01a-basic-integer.f90.result
+++ /dev/null
@@ -1,25 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-  private :: variable
-contains
-    subroutine setVariable(value)
-        implicit none
-        integer, intent(in) :: value
-        variable = value
-    end subroutine
-
-    integer function getVariable()
-        implicit none
-        getVariable = variable
-    end function
-
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *,getVariable()
-  call setVariable(3)
-  print *,getVariable()
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90
deleted file mode 100644
index fe13658..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-module mod
-  implicit none
-  real :: variable  !3,11,8
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *, variable
-  variable = 3.0
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90.result
deleted file mode 100644
index 8669aa6..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01b-basic-real.f90.result
+++ /dev/null
@@ -1,25 +0,0 @@
-module mod
-  implicit none
-  real :: variable  !3,11,8
-  private :: variable
-contains
-    subroutine setVariable(value)
-        implicit none
-        real, intent(in) :: value
-        variable = value
-    end subroutine
-
-    real function getVariable()
-        implicit none
-        getVariable = variable
-    end function
-
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *,getVariable()
-  call setVariable(3.0)
-  print *,getVariable()
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90
deleted file mode 100644
index 66cd693..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90
+++ /dev/null
@@ -1,17 +0,0 @@
-module mod
-  implicit none
-
-  type point
-    double precision x, y, z
-  end type
-
-  type(point) :: variable  !8,18,8
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *, variable
-  variable = point(1.0, 2.0, 3.0)
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90.result
deleted file mode 100644
index 02cd4ed..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-01c-basic-dt.f90.result
+++ /dev/null
@@ -1,30 +0,0 @@
-module mod
-  implicit none
-
-  type point
-    double precision x, y, z
-  end type
-
-  type(point) :: variable  !8,18,8
-  private :: variable
-contains
-    subroutine setVariable(value)
-        implicit none
-        type(point), intent(in) :: value
-        variable = value
-    end subroutine
-
-    type(point) function getVariable()
-        implicit none
-        getVariable = variable
-    end function
-
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *,getVariable()
-  call setVariable(point(1.0, 2.0, 3.0))
-  print *,getVariable()
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90
deleted file mode 100644
index cb4d664..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-contains
-  integer function three()
-    three = 3
-  end function
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *, variable
-  variable = 3
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90.result
deleted file mode 100644
index d9b0691..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-02-contains.f90.result
+++ /dev/null
@@ -1,28 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-  private :: variable
-contains
-  subroutine setVariable(value)
-      implicit none
-      integer, intent(in) :: value
-      variable = value
-  end subroutine
-
-  integer function getVariable()
-      implicit none
-      getVariable = variable
-  end function
-
-  integer function three()
-    three = 3
-  end function
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *,getVariable()
-  call setVariable(3)
-  print *,getVariable()
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90
deleted file mode 100644
index 72827d7..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90
+++ /dev/null
@@ -1,13 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-end module
-
-program encap1
-  use mod
-  implicit none
-  variable = 3
-  !                            9 + 1
-  variable = variable * variable + (variable - 2)
-  print *, variable, " should be equal to ", 10
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90.result
deleted file mode 100644
index 2d93b21..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-03-expr.f90.result
+++ /dev/null
@@ -1,26 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-  private :: variable
-contains
-    subroutine setVariable(value)
-        implicit none
-        integer, intent(in) :: value
-        variable = value
-    end subroutine
-
-    integer function getVariable()
-        implicit none
-        getVariable = variable
-    end function
-
-end module
-
-program encap1
-  use mod
-  implicit none
-  call setVariable(3)
-  !                            9 + 1
-  call setVariable(getVariable() *getVariable() + (getVariable() - 2))
-  print *,getVariable(), " should be equal to ", 10
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-04-nosetter-parameter.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-04-nosetter-parameter.f90
deleted file mode 100644
index 03304c2..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-04-nosetter-parameter.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-module mod
-  implicit none
-  integer, parameter :: CONSTANT = 10  !3,25,8
-end module
-
-program encap1
-  use mod
-  implicit none
-
-  print *, CONSTANT
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-05a-fail-conflict.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-05a-fail-conflict.f90
deleted file mode 100644
index 1074c94..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-05a-fail-conflict.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-module mod
-  implicit none
-  integer :: variable  !3,14,8
-contains
-  integer function getVariable()
-    getVariable = 99999
-  end function
-end module
-
-program encap1
-  use mod
-  implicit none
-  print *, variable
-  variable = 3
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06a-fail-array.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06a-fail-array.f90
deleted file mode 100644
index 1d2e6c2..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06a-fail-array.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-module mod
-  implicit none
-  integer, dimension(3) :: variable  !3,28,8
-end module
-
-program encap1
-  use mod
-  implicit none
-  variable = (/ 1, 2, 3 /)
-  print *, variable
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06b-fail-pointer.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06b-fail-pointer.f90
deleted file mode 100644
index 24519cc..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06b-fail-pointer.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-module mod
-  implicit none
-  integer, pointer :: ptr  !3,23,3
-end module
-
-program encap1
-  use mod
-  implicit none
-
-  integer, target :: int
-  int = 3
-  ptr => int
-  int = 4
-  print *, ptr
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06c-fail-allocatable1.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06c-fail-allocatable1.f90
deleted file mode 100644
index c9f2bb1..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06c-fail-allocatable1.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-module mod
-  implicit none
-  integer, dimension(:), allocatable :: array  !3,27,5
-end module
-
-program encap1
-  use mod
-  implicit none
-
-  allocate (array(5))
-  array = (/ 10, 20, 30, 40, 50 /)
-  print *, array
-  deallocate (array)
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06d-fail-allocatable2.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06d-fail-allocatable2.f90
deleted file mode 100644
index c55fd1e..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06d-fail-allocatable2.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-module mod
-  implicit none
-  integer, dimension(:), allocatable :: array  !3,27,5
-contains
-  subroutine alloc
-    allocate (array(5))
-  end subroutine
-  subroutine dealloc
-    deallocate (array)
-  end subroutine
-end module
-
-program encap1
-  use mod
-  implicit none
-
-  call alloc
-  array = (/ 10, 20, 30, 40, 50 /)
-  print *, array
-  call dealloc
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06e-fail-target.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06e-fail-target.f90
deleted file mode 100644
index e341aba..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-encap-06e-fail-target.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-module mod
-  implicit none
-  integer, target :: int
-end module
-
-program encap1
-  use mod
-  implicit none
-
-  integer, pointer :: ptr  !3,22,3
-  int = 3
-  ptr => int
-  int = 4
-  print *, ptr
-end program encap1
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90 b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90
deleted file mode 100644
index 79a0e59..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-program main
-    use module1
-    implicit none
-    integer :: blah
-    
-    blah = i + j + k !6,12,1
-    
-    i = blah + j
-    
-    call mult(i,j,blah)
-    
-contains
-    subroutine mult(a,b,c)
-        integer, intent(in) :: a, b, c
-        integer :: temp
-        temp = a*b*c
-    end subroutine
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90.result b/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90.result
deleted file mode 100644
index c02bf5f..0000000
--- a/org.eclipse.photran.core.vpg.tests/encapsulate-variable-test-code/test-simple01.f90.result
+++ /dev/null
@@ -1,19 +0,0 @@
-program main
-    use module1
-    implicit none
-    integer :: blah
-    
-    blah =getI() + j + k !6,12,1
-    
-    call setI(blah + j)
-    
-    call mult(getI(),j,blah)
-    
-contains
-    subroutine mult(a,b,c)
-        integer, intent(in) :: a, b, c
-        integer :: temp
-        temp = a*b*c
-    end subroutine
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90
deleted file mode 100644
index 5860258..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-subroutine sub
-    print *, "Hello" !<<<<<START !<<<<<END
-end subroutine
-
-program main; call sub; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90.result
deleted file mode 100644
index d854233..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test01-simple.f90.result
+++ /dev/null
@@ -1,11 +0,0 @@
-subroutine sub
-    call new_procedure()
-end subroutine
-
-subroutine new_procedure()
-    implicit none
-    print *, "Hello" !<<<<<START !<<<<<END
-end subroutine
-
-
-program main; call sub; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90
deleted file mode 100644
index 42a27c5..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-call sub1(); call flush; stop
-contains
-
-    subroutine sub1
-        integer :: a, b
-        dimension a(3, 4:5)
-        do b = 1, 3; a(b, :) = b*10; enddo; implicit1 = 20; implicit2 = 30
-        print *, a                  !<<<<<START
-        print *, b
-        print *, implicit1
-        print *, implicit2
-        if (implicit2 .gt. 3) then
-          print *, "OK"
-        end if                      !<<<<<END
-    end subroutine
-
-    subroutine x
-    end subroutine x
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90.result
deleted file mode 100644
index 74591b0..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test02-locals.f90.result
+++ /dev/null
@@ -1,29 +0,0 @@
-call sub1(); call flush; stop
-contains
-
-    subroutine sub1
-        integer :: a, b
-        dimension a(3, 4:5)
-        do b = 1, 3; a(b, :) = b*10; enddo; implicit1 = 20; implicit2 = 30
-        call new_procedure(a, b, implicit1, implicit2)
-    end subroutine
-
-    subroutine new_procedure(a, b, implicit1, implicit2)
-        implicit none
-        integer :: a(3, 4:5)
-        integer :: b
-        integer :: implicit1
-        integer :: implicit2
-        print *, a                  !<<<<<START
-        print *, b
-        print *, implicit1
-        print *, implicit2
-        if (implicit2 .gt. 3) then
-          print *, "OK"
-        end if                      !<<<<<END
-    end subroutine
-
-
-    subroutine x
-    end subroutine x
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90
deleted file mode 100644
index fed5543..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-call sub1(); call flush; stop
-contains
-
-    subroutine sub1
-        integer :: a, b
-        dimension a(3, 4:5)
-        do b = 1, 3; a(b, :) = b*10; enddo; implicit1 = 20; implicit2 = 30
-        print *, a
-        print *, b                  !<<<<<START !<<<<<END
-        print *, implicit1
-        print *, implicit2
-        if (implicit2 .gt. 3) then
-          print *, "OK"
-        end if
-    end subroutine
-
-    subroutine x
-    end subroutine x
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90.result
deleted file mode 100644
index 5b0f312..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test03-locals2.f90.result
+++ /dev/null
@@ -1,26 +0,0 @@
-call sub1(); call flush; stop
-contains
-
-    subroutine sub1
-        integer :: a, b
-        dimension a(3, 4:5)
-        do b = 1, 3; a(b, :) = b*10; enddo; implicit1 = 20; implicit2 = 30
-        print *, a
-        call new_procedure(b)
-        print *, implicit1
-        print *, implicit2
-        if (implicit2 .gt. 3) then
-          print *, "OK"
-        end if
-    end subroutine
-
-    subroutine new_procedure(b)
-        implicit none
-        integer :: b
-        print *, b                  !<<<<<START !<<<<<END
-    end subroutine
-
-
-    subroutine x
-    end subroutine x
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90
deleted file mode 100644
index a4af97e..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-subroutine hmmm
-    do 10 i = 1, 5
-       print *, i                   !<<<<<START
-       if (i .gt. 3) then
-         print *, i * 10
-       end if                       !<<<<<END
-       print *, i
-10  continue
-end subroutine
-
-program main; call hmmm; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90.result
deleted file mode 100644
index f17e531..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test04-in-loop.f90.result
+++ /dev/null
@@ -1,18 +0,0 @@
-subroutine hmmm
-    do 10 i = 1, 5
-       call new_procedure(i)
-       print *, i
-10  continue
-end subroutine
-
-subroutine new_procedure(i)
-    implicit none
-    integer :: i
-    print *, i                   !<<<<<START
-    if (i .gt. 3) then
-      print *, i * 10
-    end if                       !<<<<<END
-end subroutine
-
-
-program main; call hmmm; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90
deleted file mode 100644
index def65e6..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-subroutine prob
-        integer, parameter :: SIZE = 5
-        real :: matrix(SIZE, SIZE)
-        matrix(:, :) = 0.0          !<<<<<START !<<<<<END
-        print *, matrix
-end subroutine
-
-program main; call prob; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90.result
deleted file mode 100644
index 26bfbf6..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test05-parameter.f90.result
+++ /dev/null
@@ -1,16 +0,0 @@
-subroutine prob
-        integer, parameter :: SIZE = 5
-        real :: matrix(SIZE, SIZE)
-        call new_procedure(SIZE, matrix)
-        print *, matrix
-end subroutine
-
-subroutine new_procedure(SIZE, matrix)
-    implicit none
-    integer :: SIZE
-    real :: matrix(SIZE, SIZE)
-    matrix(:, :) = 0.0          !<<<<<START !<<<<<END
-end subroutine
-
-
-program main; call prob; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90
deleted file mode 100644
index ce0d9b1..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-subroutine prob
-        integer, parameter :: ROWS = 5, COLS = 7
-        real :: matrix(ROWS, COLS)
-        matrix(:, :) = 0.0          !<<<<<START !<<<<<END
-        print *, matrix
-end subroutine
-
-program main; call prob; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90.result
deleted file mode 100644
index 255bebd..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test06-parameter.f90.result
+++ /dev/null
@@ -1,17 +0,0 @@
-subroutine prob
-        integer, parameter :: ROWS = 5, COLS = 7
-        real :: matrix(ROWS, COLS)
-        call new_procedure(COLS, ROWS, matrix)
-        print *, matrix
-end subroutine
-
-subroutine new_procedure(COLS, ROWS, matrix)
-    implicit none
-    integer :: COLS
-    integer :: ROWS
-    real :: matrix(ROWS, COLS)
-    matrix(:, :) = 0.0          !<<<<<START !<<<<<END
-end subroutine
-
-
-program main; call prob; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90 b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90
deleted file mode 100644
index 2f547d2..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-subroutine prob(m, n)
-        implicit none
-        integer, intent(in) :: m
-        integer, intent(out) :: n
-        integer, save :: saved = 10
-        target :: saved
-        integer, pointer :: p_saved
-        integer, parameter :: ROWS = 5, COLS = 7
-        real :: matrix(ROWS, COLS)
-        p_saved => saved
-        matrix(:, :) = 0.0           !<<<<<START
-        n = 5 * m
-        saved = 2
-        !p_saved => saved
-        !p_saved = p_saved + 1
-        print *, n, m, saved !<<<<<END
-        print *, n, m, saved, p_saved
-end subroutine
-
-program main; call prob(3, n); call prob(3, n); print *, n; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90.result b/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90.result
deleted file mode 100644
index 035c9c1..0000000
--- a/org.eclipse.photran.core.vpg.tests/extract-proc-test-code/test07-attribs.f90.result
+++ /dev/null
@@ -1,32 +0,0 @@
-subroutine prob(m, n)
-        implicit none
-        integer, intent(in) :: m
-        integer, intent(out) :: n
-        integer, save :: saved = 10
-        target :: saved
-        integer, pointer :: p_saved
-        integer, parameter :: ROWS = 5, COLS = 7
-        real :: matrix(ROWS, COLS)
-        p_saved => saved
-        call new_procedure(COLS, ROWS, m, matrix, n, saved)
-        print *, n, m, saved, p_saved
-end subroutine
-
-subroutine new_procedure(COLS, ROWS, m, matrix, n, saved)
-    implicit none
-    integer :: COLS
-    integer :: ROWS
-    integer, intent(in) :: m
-    real :: matrix(ROWS, COLS)
-    integer, intent(out) :: n
-    integer, target :: saved
-    matrix(:, :) = 0.0           !<<<<<START
-    n = 5 * m
-    saved = 2
-    !p_saved => saved
-    !p_saved = p_saved + 1
-    print *, n, m, saved !<<<<<END
-end subroutine
-
-
-program main; call prob(3, n); call prob(3, n); print *, n; call flush; stop; end program
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90 b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90
deleted file mode 100644
index f448f4d..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do j = 1, 10
-		print *, i                   
-   		if (i .gt. j) then
-     		print *, i * 10
-   		end if                      
-   		print *, i
-	end do
-	!<<<<<END
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90.result b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90.result
deleted file mode 100644
index f448f4d..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-single-loop.f90.result
+++ /dev/null
@@ -1,15 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do j = 1, 10
-		print *, i                   
-   		if (i .gt. j) then
-     		print *, i * 10
-   		end if                      
-   		print *, i
-	end do
-	!<<<<<END
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90 b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90
deleted file mode 100644
index 9ab02ec..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-
-	do j = 1, 10
-		!<<<<<START
-		do i = 1, 10
-			do k = 2, 20
-				print *, i                   
-	       		if (i .gt. j) then
-	         		print *, i * 10
-	       		end if                      
-	       		print *, i
-	       	end do
-		end do
-		!<<<<<END
-	end do
-
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90.result b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90.result
deleted file mode 100644
index 9b3327b..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop.f90.result
+++ /dev/null
@@ -1,21 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-
-	do j = 1, 10
-	    !<<<<<START
-	    do k = 2, 20
-	        do i = 1, 10
-	            print *, i                   
-	            if (i .gt. j) then
-	                print *, i * 10
-	            end if                      
-	            print *, i
-	        end do
-	    end do
-		!<<<<<END
-	end do
-
-
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90 b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90
deleted file mode 100644
index 725388d..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do i = 1, 10
-		do j = 1, 15
-			do k = 1,20
-				print *, i                   
-	       		if (i .gt. j) then
-	         		print *, i * 10
-	       		end if                      
-	       		print *, i
-	       	end do
-		end do
-	end do
-	!<<<<<END
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90.result b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90.result
deleted file mode 100644
index c2e075d..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test-triple-loop2.f90.result
+++ /dev/null
@@ -1,19 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do j = 1, 15
-	    do i = 1, 10
-	        do k = 1,20
-	            print *, i                   
-	            if (i .gt. j) then
-	                print *, i * 10
-	            end if                      
-	            print *, i
-	        end do
-	    end do
-	end do
-	!<<<<<END
-
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90 b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90
deleted file mode 100644
index f4875b5..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-subroutine main()
-	integer :: i, j 
-	
-	!<<<<<START
-	do j = 1, 10
-		do i = 1, 10
-			print *, i+j
-		end do
-	end do
-	!<<<<<END
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90.result b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90.result
deleted file mode 100644
index 270a214..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test01-simple.f90.result
+++ /dev/null
@@ -1,12 +0,0 @@
-subroutine main()
-	integer :: i, j 
-	
-	!<<<<<START
-	do i = 1, 10
-	    do j = 1, 10
-	        print *, i+j
-	    end do
-	end do
-	!<<<<<END
-
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90 b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90
deleted file mode 100644
index f0a42d0..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90
+++ /dev/null
@@ -1,17 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do j = 1, 10
-		do i = 2, 15
-			print *, i                   
-       		if (i .gt. j) then
-         		print *, i * 10
-       		end if                      
-       		print *, i
-		end do
-	end do
-	!<<<<<END
-
-end subroutine
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90.result b/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90.result
deleted file mode 100644
index 3dd64d3..0000000
--- a/org.eclipse.photran.core.vpg.tests/interchange-loops-test-code/test02-simple.f90.result
+++ /dev/null
@@ -1,17 +0,0 @@
-subroutine main()
-	integer :: i, j
-	integer :: k, z
-	
-	!<<<<<START
-	do i = 2, 15
-	    do j = 1, 10
-	        print *, i                   
-	        if (i .gt. j) then
-	            print *, i * 10
-	        end if                      
-	        print *, i
-	    end do
-	end do
-	!<<<<<END
-
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/interface-test-code/definition1.f90 b/org.eclipse.photran.core.vpg.tests/interface-test-code/definition1.f90
deleted file mode 100644
index 26fbfbf..0000000
--- a/org.eclipse.photran.core.vpg.tests/interface-test-code/definition1.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-integer function f() ! 1,18
-  f = 1
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/interface-test-code/definition2.f90 b/org.eclipse.photran.core.vpg.tests/interface-test-code/definition2.f90
deleted file mode 100644
index 4fd6bcd..0000000
--- a/org.eclipse.photran.core.vpg.tests/interface-test-code/definition2.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-integer function f() ! 1,18
-  f = 2
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/interface-test-code/interface1.f90 b/org.eclipse.photran.core.vpg.tests/interface-test-code/interface1.f90
deleted file mode 100644
index 4eb5aeb..0000000
--- a/org.eclipse.photran.core.vpg.tests/interface-test-code/interface1.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-interface
-  integer function f() ! 2,20
-  end function
-end interface
-
-contains
-
-  subroutine s1(f)
-    interface
-      integer function f() ! 10,14 Subroutine parameter -- should not bind
-      end function
-    end interface
-  end subroutine
-
-  subroutine s2
-    interface
-      integer function f() ! 17,24
-      end function
-    end interface
-  end subroutine
-
-end program
-
-integer function f() ! 24,18
-  f = 0
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/interface-test-code/interface2.f90 b/org.eclipse.photran.core.vpg.tests/interface-test-code/interface2.f90
deleted file mode 100644
index 039ce2e..0000000
--- a/org.eclipse.photran.core.vpg.tests/interface-test-code/interface2.f90
+++ /dev/null
@@ -1,6 +0,0 @@
-interface
-  integer function f() ! 2,20
-  end function
-end interface
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90 b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90
deleted file mode 100644
index 6de8cd0..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-program p
-	integer :: hello
-	intrinsic flush
-	call s
-	call flush; stop
-contains
-	subroutine s
-		parameter (THREE = 3)
-		print *, THREE + 2 + 63 * twice(4)
-	end subroutine
-
-	integer function twice(n)
-		intent(in) :: n
-		twice = 2 * n
-	end function
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90.result b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90.result
deleted file mode 100644
index ebaadb0..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bigexpression.f90.result
+++ /dev/null
@@ -1,21 +0,0 @@
-program p
-	implicit none
-	integer :: hello
-	intrinsic flush
-	call s
-	call flush; stop
-contains
-	subroutine s
-		implicit none
-		real :: three
-		parameter (THREE = 3)
-		print *, THREE + 2 + 63 * twice(4)
-	end subroutine
-
-	integer function twice(n)
-		implicit none
-		integer :: n
-		intent(in) :: n
-		twice = 2 * n
-	end function
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90 b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90
deleted file mode 100644
index 830a8ce..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-program hello
-    intrinsic flush
-    integer :: i = 2, j = 2, mySillyVariable = 5
-    print *, i, j, MYsIlLyVaRiAbLe
-    CALL wORTHLESSfUNCTION(i+1,j+1,MySillyVariable)
-    print *, i, j, mYsILLYvARIABLE
-    call flush; stop
-
-    contains
-    subroutine WorthlessFunction(i,j,mySillyVariable)
-        intent(IN)  :: i, j
-        intent(OUT) :: mySillyVariable
-
-        mySillyVariable = i + j
-    end subroutine WorthlessFunction
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90.result b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90.result
deleted file mode 100644
index f7e4d56..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/bug206386.f90.result
+++ /dev/null
@@ -1,21 +0,0 @@
-program hello
-    implicit none
-    intrinsic flush
-    integer :: i = 2, j = 2, mySillyVariable = 5
-    print *, i, j, MYsIlLyVaRiAbLe
-    CALL wORTHLESSfUNCTION(i+1,j+1,MySillyVariable)
-    print *, i, j, mYsILLYvARIABLE
-    call flush; stop
-
-    contains
-    subroutine WorthlessFunction(i,j,mySillyVariable)
-        implicit none
-        integer :: i
-        integer :: j
-        integer :: mySillyVariable
-        intent(IN)  :: i, j
-        intent(OUT) :: mySillyVariable
-
-        mySillyVariable = i + j
-    end subroutine WorthlessFunction
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90 b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90
deleted file mode 100644
index 3d850c4..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90
+++ /dev/null
@@ -1,27 +0,0 @@
-program p
-    intrinsic flush
-    type t
-        integer n
-    end type
-    type(t) u
-
-    a = 1
-    d = 1
-    u = t(5)
-    call s
-    print *, a, d, u
-    call flush; stop
-contains
-  subroutine s
-    implicit integer (a-c,g), real (d-e), type(t) (f), complex (h)
-
-    a = 3
-    b = 3
-    c = 3
-    d = 3.0
-    e = 3.0
-    f%n = 3
-    g = 3
-    h = (3, 4)
-  end subroutine
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90.result b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90.result
deleted file mode 100644
index 79616f7..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/crazyimplicits.f90.result
+++ /dev/null
@@ -1,36 +0,0 @@
-program p
-    implicit none
-    real :: a
-    real :: d
-    intrinsic flush
-    type t
-        integer n
-    end type
-    type(t) u
-
-    a = 1
-    d = 1
-    u = t(5)
-    call s
-    print *, a, d, u
-    call flush; stop
-contains
-  subroutine s
-    implicit none
-    integer :: b
-    integer :: c
-    real :: e
-    type(t) :: f
-    integer :: g
-    complex :: h
-
-    a = 3
-    b = 3
-    c = 3
-    d = 3.0
-    e = 3.0
-    f%n = 3
-    g = 3
-    h = (3, 4)
-  end subroutine
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90 b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90
deleted file mode 100644
index e8444d3..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90
+++ /dev/null
@@ -1,34 +0,0 @@
-program functioncalling
-  intrinsic flush
-  print *, 'This is the Fortran program; I am going to call some functions now...'
-  call sum(1.0,2.0,3.0)
-  call factorial(3)
-  print *, 'Done'
-  call flush; stop
-
-contains
-
-  subroutine sum(x,y,z)
-
-
-	  !x = x+y+z ! gfortran 4.4.0 on Mac OS X 10.5.7 gives "Bus error"
-	  print *, x
-  end subroutine sum
-
-  subroutine factorial(j)
-	  p=1
-	  i=1
-	  do i=1,j
-	    p=p*i
-	  end do
-
-	  print *, j, "! = ", p
-  end subroutine factorial
-
-  subroutine sum2(x,y)
-	  implicit none
-	  real :: p
-	  integer :: x, y
-	  p = x+y
-  end subroutine sum2
-end
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90.result b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90.result
deleted file mode 100644
index 8f975c3..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/fortran.f90.result
+++ /dev/null
@@ -1,43 +0,0 @@
-program functioncalling
-  implicit none
-  intrinsic flush
-  print *, 'This is the Fortran program; I am going to call some functions now...'
-  call sum(1.0,2.0,3.0)
-  call factorial(3)
-  print *, 'Done'
-  call flush; stop
-
-contains
-
-  subroutine sum(x,y,z)
-	  implicit none
-	  real :: x
-	  real :: y
-	  real :: z
-
-
-	  !x = x+y+z ! gfortran 4.4.0 on Mac OS X 10.5.7 gives "Bus error"
-	  print *, x
-  end subroutine sum
-
-  subroutine factorial(j)
-	  implicit none
-	  integer :: i
-	  integer :: j
-	  real :: p
-	  p=1
-	  i=1
-	  do i=1,j
-	    p=p*i
-	  end do
-
-	  print *, j, "! = ", p
-  end subroutine factorial
-
-  subroutine sum2(x,y)
-	  implicit none
-	  real :: p
-	  integer :: x, y
-	  p = x+y
-  end subroutine sum2
-end
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90 b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90
deleted file mode 100644
index 8e961f4..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-program program
-  implicit none
-! Don't forget about comments
-  ! That would be bad
-print *, "Hello" !<<<<<START !<<<<<END
-  stop
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90.result b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90.result
deleted file mode 100644
index dc75f68..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/01-simple.f90.result
+++ /dev/null
@@ -1,8 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-PROGRAM program
-  IMPLICIT NONE
-! Don't forget about comments
-  ! That would be bad
-PRINT *, "Hello" !<<<<<START !<<<<<END
-  STOP
-END PROGRAM program
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90 b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90
deleted file mode 100644
index 5d723c0..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-program program
-implicit none
-print *, "Hello" !<<<<<START !<<<<<END
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90.result b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90.result
deleted file mode 100644
index 3894c1d..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/02-end-after.f90.result
+++ /dev/null
@@ -1,5 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-PROGRAM program
-IMPLICIT NONE
-PRINT *, "Hello" !<<<<<START !<<<<<END
-END PROGRAM program
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90 b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90
deleted file mode 100644
index 539e912..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-subroutine s     !<<<<<START
-print *, 'Yip'
-end subroutine   !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90.result b/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90.result
deleted file mode 100644
index 6e9d000..0000000
--- a/org.eclipse.photran.core.vpg.tests/keyword-case-test-code/03-blank-after.f90.result
+++ /dev/null
@@ -1,4 +0,0 @@
-! Taken from reindenter-test-code in org.eclipse.photran.core.vpg.tests
-SUBROUTINE s     !<<<<<START
-PRINT *, 'Yip'
-END SUBROUTINE   !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90 b/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90
deleted file mode 100644
index ec19e4c..0000000
--- a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90
+++ /dev/null
@@ -1,96 +0,0 @@
-MODULE MySeparateFileMod
-
-END MODULE
-
-PROGRAM MyMain
-
-	USE MySeparateFileMod
-
-	COMMON /MyTestFun_common1/ aVar
-
-	REAL :: a_xxx1
-
-	REAL :: comVar
-
-	REAL :: aVar
-
-	COMMON /CB1/ comVar
-
-	print *, test
-
-	print *, internalModVar
-
-	CALL MySeparateSub
-
-	comVar = 5.5
-
-	CONTAINS
-
-	REAL FUNCTION MyTestFun()
-
-		REAL :: com
-
-		COMMON /MyTestFun_common2/ com
-
-		REAL :: q = 3.3, w, e = 5.5
-
-		REAL, DIMENSION(5) :: r, t
-
-		REAL, SAVE :: u = 1.1
-
-		REAL, SAVE :: o
-
-		REAL, POINTER :: p
-
-		POINTER o, p
-
-		POINTER o, p
-
-		REAL :: b, c, d
-
-		REAL, POINTER :: a
-
-		POINTER c, d
-
-		SAVE a, r, p, b, c
-
-		DIMENSION b(10)
-
-		c = 1.2
-
-		MyTestFun = 3.3
-
-	END FUNCTION MyTestFun
-
-	REAL FUNCTION MyTestFun2(aVar)
-
-		REAL, DIMENSION (10:10) :: aVar
-
-		CHARACTER (LEN=30) :: char
-
-		REAL :: bVar(100:100)
-
-		DOUBLE PRECISION :: cVar(10)
-
-		REAL, PARAMETER :: b = 1.1
-
-		REAL c
-
-		POINTER c
-
-		SAVE
-
-	END FUNCTION MyTestFun2
-
-END PROGRAM MyMain
-
-SUBROUTINE MySub
-
-	REAL :: test
-	COMMON /CB1/ comVar
-
-	test = 1.1
-
-	comVar = comVar + comVar
-
-END SUBROUTINE MySub
diff --git a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90.result b/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90.result
deleted file mode 100644
index 4884a49..0000000
--- a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test1.f90.result
+++ /dev/null
@@ -1,116 +0,0 @@
-MODULE MySeparateFileMod
-
-END MODULE
-
-PROGRAM MyMain
-
-	USE MySeparateFileMod
-
-	REAL, POINTER :: a_xxx2
-
-	REAL, DIMENSION(10) :: b_xxx1
-
-	REAL, POINTER :: c_xxx1
-
-	REAL :: e_xxx1 = 5.5
-
-	REAL, POINTER :: o_xxx1
-
-	REAL, POINTER :: p_xxx1
-
-	REAL :: q_xxx1 = 3.3
-
-	REAL, DIMENSION(5) :: r_xxx1
-
-	REAL :: u_xxx1 = 1.1
-
-	COMMON /MyTestFun_common3/ a_xxx2,b_xxx1,c_xxx1,e_xxx1,o_xxx1,p_xxx1,q_xxx1,r_xxx1,u_xxx1
-
-	COMMON /MyTestFun_common1/ aVar
-
-	REAL :: a_xxx1
-
-	REAL :: comVar
-
-	REAL :: aVar
-
-	COMMON /CB1/ comVar
-
-	print *, test
-
-	print *, internalModVar
-
-	CALL MySeparateSub
-
-	comVar = 5.5
-
-	CONTAINS
-
-	REAL FUNCTION MyTestFun()
-
-		COMMON /MyTestFun_common3/ a_xxx2,b_xxx1,c_xxx1,e_xxx1,o_xxx1,p_xxx1,q_xxx1,r_xxx1,u_xxx1
-
-		REAL :: com
-
-		COMMON /MyTestFun_common2/ com
-
-		REAL :: q_xxx1, w, e_xxx1
-
-		REAL, DIMENSION(5) :: r_xxx1, t
-
-		REAL :: u_xxx1
-
-		REAL :: o_xxx1
-
-		REAL, POINTER :: p_xxx1
-
-		POINTER o_xxx1, p_xxx1
-
-		POINTER o_xxx1, p_xxx1
-
-		REAL :: b_xxx1, c_xxx1, d
-
-		REAL, POINTER :: a_xxx2
-
-		POINTER c_xxx1, d
-
-		DIMENSION b_xxx1(10)
-
-		c_xxx1 = 1.2
-
-		MyTestFun = 3.3
-
-	END FUNCTION MyTestFun
-
-	REAL FUNCTION MyTestFun2(aVar)
-
-		REAL, DIMENSION (10:10) :: aVar
-
-		CHARACTER (LEN=30) :: char
-
-		REAL :: bVar(100:100)
-
-		DOUBLE PRECISION :: cVar(10)
-
-		REAL, PARAMETER :: b = 1.1
-
-		REAL c
-
-		POINTER c
-
-		SAVE
-
-	END FUNCTION MyTestFun2
-
-END PROGRAM MyMain
-
-SUBROUTINE MySub
-
-	REAL :: test
-	COMMON /CB1/ comVar
-
-	test = 1.1
-
-	comVar = comVar + comVar
-
-END SUBROUTINE MySub
diff --git a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90 b/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90
deleted file mode 100644
index ec19e4c..0000000
--- a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90
+++ /dev/null
@@ -1,96 +0,0 @@
-MODULE MySeparateFileMod
-
-END MODULE
-
-PROGRAM MyMain
-
-	USE MySeparateFileMod
-
-	COMMON /MyTestFun_common1/ aVar
-
-	REAL :: a_xxx1
-
-	REAL :: comVar
-
-	REAL :: aVar
-
-	COMMON /CB1/ comVar
-
-	print *, test
-
-	print *, internalModVar
-
-	CALL MySeparateSub
-
-	comVar = 5.5
-
-	CONTAINS
-
-	REAL FUNCTION MyTestFun()
-
-		REAL :: com
-
-		COMMON /MyTestFun_common2/ com
-
-		REAL :: q = 3.3, w, e = 5.5
-
-		REAL, DIMENSION(5) :: r, t
-
-		REAL, SAVE :: u = 1.1
-
-		REAL, SAVE :: o
-
-		REAL, POINTER :: p
-
-		POINTER o, p
-
-		POINTER o, p
-
-		REAL :: b, c, d
-
-		REAL, POINTER :: a
-
-		POINTER c, d
-
-		SAVE a, r, p, b, c
-
-		DIMENSION b(10)
-
-		c = 1.2
-
-		MyTestFun = 3.3
-
-	END FUNCTION MyTestFun
-
-	REAL FUNCTION MyTestFun2(aVar)
-
-		REAL, DIMENSION (10:10) :: aVar
-
-		CHARACTER (LEN=30) :: char
-
-		REAL :: bVar(100:100)
-
-		DOUBLE PRECISION :: cVar(10)
-
-		REAL, PARAMETER :: b = 1.1
-
-		REAL c
-
-		POINTER c
-
-		SAVE
-
-	END FUNCTION MyTestFun2
-
-END PROGRAM MyMain
-
-SUBROUTINE MySub
-
-	REAL :: test
-	COMMON /CB1/ comVar
-
-	test = 1.1
-
-	comVar = comVar + comVar
-
-END SUBROUTINE MySub
diff --git a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90.result b/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90.result
deleted file mode 100644
index 62d99a5..0000000
--- a/org.eclipse.photran.core.vpg.tests/move-saved-to-common-block-test-code/test2.f90.result
+++ /dev/null
@@ -1,106 +0,0 @@
-MODULE MySeparateFileMod
-
-END MODULE
-
-PROGRAM MyMain
-
-	USE MySeparateFileMod
-
-	REAL :: bvar_xxx1(100:100)
-
-	REAL, POINTER :: c_xxx1
-
-	CHARACTER (LEN=30) :: char_xxx1
-
-	DOUBLE PRECISION :: cvar_xxx1(10)
-
-	COMMON /MyTestFun2_common1/ bvar_xxx1,c_xxx1,char_xxx1,cvar_xxx1
-
-	COMMON /MyTestFun_common1/ aVar
-
-	REAL :: a_xxx1
-
-	REAL :: comVar
-
-	REAL :: aVar
-
-	COMMON /CB1/ comVar
-
-	print *, test
-
-	print *, internalModVar
-
-	CALL MySeparateSub
-
-	comVar = 5.5
-
-	CONTAINS
-
-	REAL FUNCTION MyTestFun()
-
-		REAL :: com
-
-		COMMON /MyTestFun_common2/ com
-
-		REAL :: q = 3.3, w, e = 5.5
-
-		REAL, DIMENSION(5) :: r, t
-
-		REAL, SAVE :: u = 1.1
-
-		REAL, SAVE :: o
-
-		REAL, POINTER :: p
-
-		POINTER o, p
-
-		POINTER o, p
-
-		REAL :: b, c, d
-
-		REAL, POINTER :: a
-
-		POINTER c, d
-
-		SAVE a, r, p, b, c
-
-		DIMENSION b(10)
-
-		c = 1.2
-
-		MyTestFun = 3.3
-
-	END FUNCTION MyTestFun
-
-	REAL FUNCTION MyTestFun2(aVar)
-
-		COMMON /MyTestFun2_common1/ bvar_xxx1,c_xxx1,char_xxx1,cvar_xxx1
-
-		REAL, DIMENSION (10:10) :: aVar
-
-		CHARACTER (LEN=30) :: char_xxx1
-
-		REAL :: bvar_xxx1(100:100)
-
-		DOUBLE PRECISION :: cvar_xxx1(10)
-
-		REAL, PARAMETER :: b = 1.1
-
-		REAL c_xxx1
-
-		POINTER c_xxx1
-
-	END FUNCTION MyTestFun2
-
-END PROGRAM MyMain
-
-SUBROUTINE MySub
-
-	REAL :: test
-	COMMON /CB1/ comVar
-
-	test = 1.1
-
-	comVar = comVar + comVar
-
-END SUBROUTINE MySub
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/.cvsignore b/org.eclipse.photran.core.vpg.tests/parser-test-code/.cvsignore
deleted file mode 100644
index 0dce739..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-confidential-ibeam-object_cpp
-confidential-walt-fixed
-confidential-walt-orig
-confidential-from_the_www
-confidential-walt-free
-confidential-ibeam-object_cpp_mod
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/fortran2003_tests/fortran2003-syntax.f03 b/org.eclipse.photran.core.vpg.tests/parser-test-code/fortran2003_tests/fortran2003-syntax.f03
deleted file mode 100644
index 405f051..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/fortran2003_tests/fortran2003-syntax.f03
+++ /dev/null
@@ -1,80 +0,0 @@
-! This is syntactically correct but semantically incorrect and meaningless
-program Fortran2003
-    import x, y
-    import :: z
-
-    type, bind(c) :: class
-        private
-        procedure(), public :: proc_component
-    contains
-        procedure                     type_bound_proc1
-        procedure, non_overridable :: type_bound_proc3
-        procedure                     type_bound_proc4 => proc
-        procedure, non_overridable :: type_bound_proc6 => proc
-    end type
-
-    enum, bind(c)
-        enumerator    apple = 3, orange, pear
-        enumerator :: grapefruit
-    end enum
-
-    type(class), asynchronous, bind(c, name='x'), protected, value, volatile, pointer :: t1
-    class(class) :: t2
-    class(*)     :: t3
-
-    common /c1/ t1, t2
-
-    asynchronous      x1, x2
-    asynchronous   :: x3
-    bind(c)           x4
-    bind(c,name=x) :: x5, /c1/
-    protected         x6
-    protected      :: x7, x8
-
-    abstract interface
-        subroutine s
-        end subroutine s
-    end interface
-
-    procedure() p1
-    procedure(integer) p2
-    procedure(), pointer :: p3
-    procedure(integer), save, optional :: p4, p5 => null(), p6
-
-    ! EXECUTION PART
-
-    associate (this => 3 + 4, that => 5)
-        print *, this
-        print *, that
-    end associate
-
-    select type (renamed => t3)
-        type is (class)
-            print *, "1"
-        class is (class)
-            print *, '2'
-        class default
-            print *, '3'
-            if (3 .eq. 4) then
-                print *, '?!'
-            end if
-            do i = 6,8
-                print *, ":-)"
-            end do
-            do 51 i = 6,8
-51              print *, ":-)"
-    end select
-
-!    if (t1%type_bound_proc1() .eq. 3) print *, "!"
-
-    call t2%type_bound_proc4
-
-    open (3,action=something,asynchronous='?',decimal='?',encoding='?',iomsg=v,round='?',sign='?')
-    decimal=3
-    wait (3,id=n,iostat=m)
-    close (unit=3,iomsg=v)
-
-    use, intrinsic :: some_module
-    use :: some_other_module, operator(.x.) => operator(.y.)
-    use :: some_third_module, only: operator(.x.) => operator(.y.)
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariable.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariable.f90
deleted file mode 100644
index c8798f9..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariable.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-program TestExtractVariable
-
-contains
-
-subroutine Sub()
-  integer :: x
-  x = 1
-  if(x==1) then
-  	x=2
-  end if	
-  
-end subroutine Sub
-
-end program TestExtractVariable
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariableAfter.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariableAfter.f90
deleted file mode 100644
index 014e055..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/extractvariable/ExtractVariableAfter.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-program TestExtractVariable
-
-contains
-
-subroutine Sub()
-  integer :: x
-  logical :: y
-  x = 1
-  y = (x == 1)
-  if(y) then
-  	x=2
-  end if	
-  
-end subroutine Sub
-
-end program TestExtractVariable
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringAfter.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringAfter.f90
deleted file mode 100644
index 7f06a62..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringAfter.f90
+++ /dev/null
@@ -1,34 +0,0 @@
-program Hello
-  implicit none
-  integer :: i
-
-  i = 3
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  integer :: i
-  integer :: x
-
-  x = i
-  print *, x
-
-end subroutine Sub
-
-
-subroutine SomeSub(y,z)
-  real :: y
-  real :: z
-  real :: x
-
-  x = y + z
-  y = 22
-  z = y + z
-  print *, x
-
-end subroutine SomeSub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringBefore.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringBefore.f90
deleted file mode 100644
index 11faff4..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/MainProgramRefactoringBefore.f90
+++ /dev/null
@@ -1,30 +0,0 @@
-program Hello
-
-  i = 3
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-  
-contains
-
-subroutine Sub(i)
-  integer :: x
-
-  x = i
-  print *, x
-  
-end subroutine Sub
-
-
-subroutine SomeSub(y,z)
-  real :: y
-  real :: z
-
-  x = y + z
-  y = 22
-  z = y + z
-  print *, x
-  
-end subroutine SomeSub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsAfter.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsAfter.f90
deleted file mode 100644
index ada2665..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsAfter.f90
+++ /dev/null
@@ -1,34 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  implicit none
-  integer :: i
-  real :: x
-
-  x = i
-  print *, x
-
-end subroutine Sub
-
-
-subroutine SomeSub(y,z)
-  implicit none
-  real :: y
-  real :: z
-  real :: x
-
-  x = y + z
-  y = 22
-  z = y + z
-  print *, x
-
-end subroutine SomeSub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsBefore.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsBefore.f90
deleted file mode 100644
index 41e5075..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/Subroutine2RefactoringsBefore.f90
+++ /dev/null
@@ -1,27 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-  
-contains
-
-subroutine Sub(i)
-  
-  x = i
-  print *, x
-  
-end subroutine Sub
-
-
-subroutine SomeSub(y,z)
-  
-  x = y + z
-  y = 22
-  z = y + z
-  print *, x
-  
-end subroutine SomeSub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringAfter.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringAfter.f90
deleted file mode 100644
index 5c1e049..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringAfter.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  implicit none
-  integer :: i
-  real :: x
-
-  x = i
-  print *, x
-
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringBefore.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringBefore.f90
deleted file mode 100644
index 969f1ab..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineRefactoringBefore.f90
+++ /dev/null
@@ -1,17 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-  
-contains
-
-subroutine Sub(i)
-  
-  x = i
-  print *, x
-  
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineThatHasAnImplicitStmt.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineThatHasAnImplicitStmt.f90
deleted file mode 100644
index a053466..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineThatHasAnImplicitStmt.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  implicit none
-  integer :: i
-  real :: x
-
-  x = i
-  print *, x
-  
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDecalaredVarsRefactoringBefore.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDecalaredVarsRefactoringBefore.f90
deleted file mode 100644
index cf99a33..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDecalaredVarsRefactoringBefore.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  integer :: i
-  real :: x
-
-  x = i
-  print *, x
-  
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDeclaredVarsRefactoringAfter.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDeclaredVarsRefactoringAfter.f90
deleted file mode 100644
index 5c1e049..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/introduceimplicitnone/SubroutineWithDeclaredVarsRefactoringAfter.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-
-contains
-
-subroutine Sub(i)
-  implicit none
-  integer :: i
-  real :: x
-
-  x = i
-  print *, x
-
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1aRefactored.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1aRefactored.f90
deleted file mode 100644
index 47cefca..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1aRefactored.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program Hello
-  integer :: Whatever = 3
-
-  Whatever = Whatever + 1
-  print *, "The integer is ", Whatever
-  stop
-
-end program Hello
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1abOriginal.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1abOriginal.f90
deleted file mode 100644
index ea5bbad..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1abOriginal.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program Hello
-  integer :: i = 3
-  
-  i = i + 1
-  print *, "The integer is ", i
-  stop
-
-end program Hello
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1bRefactored.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1bRefactored.f90
deleted file mode 100644
index 89cbb8f..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test1bRefactored.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program Whatever
-  integer :: i = 3
-
-  i = i + 1
-  print *, "The integer is ", i
-  stop
-
-end program Whatever
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test2Original.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test2Original.f90
deleted file mode 100644
index c58a7cd..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test2Original.f90
+++ /dev/null
@@ -1,10 +0,0 @@
-program Hello
-  integer :: i = 3
-  integer :: j = 4
-  
-  i = i + 1
-  print *, "The integer is ", i
-  print *, "and the other integer is ", j
-  stop
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test3Original.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test3Original.f90
deleted file mode 100644
index 091fbdc..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test3Original.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-program Hello
-  integer :: i = 3
-
-  call Sub(i + 1)
-
-  print *, "The integer is ", i
-  
-contains
-
-subroutine Sub(x)
-  integer, intent(in) :: x
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Original.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Original.f90
deleted file mode 100644
index 5712ebd..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Original.f90
+++ /dev/null
@@ -1,23 +0,0 @@
-! This is a sample program
-
-program Hello
-  integer :: i = 3 !!! a variable !!!
-
-  call Sub(Fn(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine Sub(x) ! start
-  integer, intent(in) :: x
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine Sub   ! end
-
-end program
-
-integer function Fn(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Refactored.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Refactored.f90
deleted file mode 100644
index 3f1cd57..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/refactoring_test_files/rename/Test4Refactored.f90
+++ /dev/null
@@ -1,23 +0,0 @@
-! This is a sample program
-
-program Hello
-  integer :: i = 3 !!! a variable !!!
-
-  call buS(nF(i) + 1)
-
-  print *, "The integer is ", i
-
-contains ! a comment
-
-subroutine buS(x) ! start
-  integer, intent(in) :: x
-
-  print *, "In the subroutine, the integer is ", x
-end subroutine buS   ! end
-
-end program
-
-integer function nF(n) result(y)
-  print *, "You sent", n, "to the function"
-  y = n
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/AssignResult.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/AssignResult.F90
deleted file mode 100644
index 1c35155..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/AssignResult.F90
+++ /dev/null
@@ -1,3 +0,0 @@
-program p
-result(1:7) = (/ 1.3, vector_x, 2.35, vector_y /)
-end program p
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/BlockData.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/BlockData.F90
deleted file mode 100644
index 0b6e27e..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/BlockData.F90
+++ /dev/null
@@ -1,7 +0,0 @@
-PROGRAM P
-
-END PROGRAM P
-
-BLOCK DATA INIT_BLOCK_A
-
-END BLOCK DATA
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ConstSubstring.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ConstSubstring.F90
deleted file mode 100644
index 154591c..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ConstSubstring.F90
+++ /dev/null
@@ -1,4 +0,0 @@
-Program p
-TEMP = "ELMWOOD HIGH" (N:N+3)   ! Parent is a constant.
-lll = 'ABCDF' (i:i)
-End program p
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/DblPrecDim.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/DblPrecDim.F90
deleted file mode 100644
index 8b29635..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/DblPrecDim.F90
+++ /dev/null
@@ -1,4 +0,0 @@
-program p
-  ! DIMENSION is a keyword
-  DOUBLE PRECISION , DIMENSION ( 100 ) :: A , B 
-end program p
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/FormatTest.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/FormatTest.F90
deleted file mode 100644
index 1e3ce78..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/FormatTest.F90
+++ /dev/null
@@ -1,4 +0,0 @@
-program p
-  ! Should match / ) as two tokens, not one
-  100 FORMAT (2(3EN15.4,3X)/)
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/Function.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/Function.F90
deleted file mode 100644
index fddbbb3..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/Function.F90
+++ /dev/null
@@ -1,11 +0,0 @@
-program p
-
-contains
-
-integer function f(x)
-end function
-
-double precision function f(x)
-end function
-
-end program p
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ImplicitTest.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ImplicitTest.F90
deleted file mode 100644
index 56e226e..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ImplicitTest.F90
+++ /dev/null
@@ -1,12 +0,0 @@
-program lineContTest
-	! See Fortran 95 Handbook p.112
-	implicit integer (a)
-	implicit integer (b-c)
-	implicit complex (d-e, f)
-	implicit integer (g-i, k), complex(l-n)
-	implicit type (mytype) (p), complex (q)
-	implicit logical (kind = bit) (r)
-	IMPLICIT INTEGER (S-V) ! Comment here
-	IMPLICIT CHARACTER(LEN=5)(W-X)
-	IMPLICIT CHARACTER(LEN=5, KIND=7)(Y), COMPLEX(Z) ! Yeah!
-end program lineContTest
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/IntentTest.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/IntentTest.F90
deleted file mode 100644
index 8351310..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/IntentTest.F90
+++ /dev/null
@@ -1,4 +0,0 @@
-integer function f(x, y) result(r)
-  intent ( in ) x , y
-  return 0
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/LineContinuationTest.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/LineContinuationTest.F90
deleted file mode 100644
index 2fa3bd6..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/LineContinuationTest.F90
+++ /dev/null
@@ -1,12 +0,0 @@
-program lineContTest
-	
-	REAL::S
-	REAL::R
-    R = 1.01 
-    S = R + & 		! a comment
-    				! another comment
-    & R*2 	&		! a comment
-    				! another comment
-    + R				! comment
-    
-end program lineContTest
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/OperatorStarTest.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/OperatorStarTest.F90
deleted file mode 100644
index fad4a47..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/OperatorStarTest.F90
+++ /dev/null
@@ -1,5 +0,0 @@
-module ops
-interface operator (*)
-	module procedure rat_mult
-end interface
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ParenSlash.F90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ParenSlash.F90
deleted file mode 100644
index 3fe1c7c..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/ParenSlash.F90
+++ /dev/null
@@ -1,7 +0,0 @@
-MODULE X
-   ! (/) should be three tokens, not (/ followed by )
-   INTERFACE OPERATOR (/)
-      MODULE PROCEDURE BIG_DIV_INT, &
-                       BIG_DIV_BIG
-   END INTERFACE
-END MODULE X
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118954-todo.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118954-todo.f90
deleted file mode 100644
index e02a9e6..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118954-todo.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-500 FORMAT (1H0, 2F10.3, E15.1, TR1, A10, 7HIN BOOK)
-1001 FORMAT (2(5E10.2, I10/), (1X, SP, I7, ss, ES10.2))
-130 FORMAT (9HMORE SNOW)
-140 FORMAT (a, 9X, 3A5, 7/ a, 10X, 3L4)
-! 17   format (7Ha"cde'g, 4 I8, '***')   ! This still doesn't work (Holleriths in free form)
-
-string = ASCII_"Hello"
-
-end
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118955.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118955.f90
deleted file mode 100644
index 9b5ce8e..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118955.f90
+++ /dev/null
@@ -1,10 +0,0 @@
-IDENT = RESHAPE ( (/ (1, (0, II=1,N), JJ=1,N-1), 1 /), (/ N,N /) )
-
-
-   a = reshape( (/ (1.0, (real(k), i=1,N), j=1,N), 1.0 /), &
-      (/ N, N /) )
-
-STOKES=DEN&
-      &SITY-11.11
-
-end
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118965.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118965.f90
deleted file mode 100644
index 475cfa4..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug118965.f90
+++ /dev/null
@@ -1,174 +0,0 @@
-module CmatProduct_m
-
-use MatranUtil_m
-use Cmat_m
-
-implicit none
-
-
-
-  real(wp), parameter :: ZERO = 0, ONE = 1
-
-  interface Times
-     module procedure CmTimesComplexScalarRm, CmTimesComplexScalarCm, &
-     CmTimesRealScalarCm, CmTimesRealScalarRm
-  end interface Times
-
-!    interface operator(*)
-!       module procedure RmTimesScalarRm_o, RmTimesRmScalar_o, &
-!                        RmTimesRmRm_o
-!    end interface
-!
-!    interface TimesXhy
-!       module procedure RmTimesXhy
-!    end interface TimesXhy
-!
-!    interface operator(.xhy.)
-!       module procedure RmTimes_xhy
-!    end interface
-!
-!    interface TimesXyh
-!       module procedure RmTimesXyh
-!    end interface TimesXyh
-!   !    interface operator(.xyh.)
-!       module procedure RmTimes_xyh
-!    end interface
-!
-!    interface TimesXhx
-!       module procedure RmTimesXhx
-!    end interface
-!
-!    interface operator(.xhx.)
-!       module procedure RmTimes_xhx
-!    end interface
-!
-!    interface TimesXxh
-!       module procedure RmTimesXxh
-!    end interface
-!
-!    interface operator(.xxh.)
-!       module procedure RmTimes_xxh
-!    end interface
-
-contains
-
-  subroutine CmTimesComplexScalarRm(C, s, A)
-     type(Cmat), intent(inout) :: C
-     complex(wp), intent(in) :: s
-     type(Rmat), intent(in) :: A
-
-     integer :: m, n, i, j
-
-     m = A%nrow
-     n = A%ncol
-
-     call GuardTemp(A)
-     call ReshapeAry(C, m, n)
-
-     if (m==0 .or. n==0) then
-        C%tag = 'yy'
-     !else                C%tag = 'xx'
-     else
-                     C%tag = 'xx'
-        forall (i=1:m,j=1:n)
-            C%a(i,j) = s*cmplx(A%a(i,j),0)
-        end forall
-
-     end if
-
-     call CleanTemp(A)
-
-  end subroutine CmTimesComplexScalarRm
-
-  subroutine CmTimesRealScalarCm(C, s, A)
-     type(Cmat), intent(out) :: C
-     real(wp), intent(in) :: s
-     type(Cmat), intent(in) :: A
-
-     integer m, n
-
-     m = A%nrow
-     n = A%ncol
-
-     call GuardTemp(A)
-     call ReshapeAry(C, m, n)
-
-     if (m==0 .or. n==0) then
-        C%tag = 'GE'
-
-     else
-
-        if (s>=0 .OR. A%tag/='HP') then
-           C%tag = A%tag
-        else
-           C%tag = 'HE'
-        end if
-        C%a(1:m,1:n) = s*A%a(1:m,1:n)
-
-     end if
-
-     call CleanTemp(A)
-
-  end subroutine CmTimesRealScalarCm
-
-  subroutine CmTimesRealScalarRm(C, s, A)
-     type(Cmat), intent(out) :: C
-     real(wp), intent(in) :: s
-     type(Rmat), intent(in) :: A
-
-     integer m, n
-
-     m = A%nrow
-     n = A%ncol
-
-     call GuardTemp(A)
-     call ReshapeAry(C, m, n)
-
-     if (m==0 .or. n==0) then
-        C%tag = 'GE'
-
-     else
-
-        if (s>=0 .OR. A%tag/='HP') then
-           C%tag = A%tag
-        else
-           C%tag = 'HE'
-        end if
-        C%a(1:m,1:n) = s*A%a(1:m,1:n)
-
-     end if
-
-     call CleanTemp(A)
-
-  end subroutine CmTimesRealScalarRm
-
-  subroutine CmTimesComplexScalarCm(C, s, A)
-     type(Cmat), intent(out) :: C
-     complex(wp), intent(in) :: s
-     type(Cmat), intent(in) :: A
-
-     integer m, n
-
-     m = A%nrow
-     n = A%ncol
-
-     call GuardTemp(A)
-     call ReshapeAry(C, m, n)
-
-     if (m==0 .or. n==0) then
-        C%tag = 'GE'
-
-     else
-
-        C%tag = 'HE'
-        C%a(1:m,1:n) = s*A%a(1:m,1:n)
-
-     end if
-
-     call CleanTemp(A)
-
-  end subroutine CmTimesComplexScalarCm
-
-
-
-end module CmatProduct_m
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126383.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126383.f90
deleted file mode 100644
index a7c6b83..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126383.f90
+++ /dev/null
@@ -1,25 +0,0 @@
-PROGRAM TstFmts
-
-!   This program contains snippets of code that may cause the photran
-!   outline parser grief.  The program provides no useful function.
-
-    IMPLICIT NONE
-
-          WRITE (6, 148)
-          WRITE (6, 149)
-          WRITE (6, 150)
-
-148       FORMAT (/ ' *TestForBackup*  Backup due to too large a fractional ', 'change in core power.' / )
-149       FORMAT ( / ' *TestForBackup*  Backup due to too large a fractional ', 'change in core power.' /)
-150       FORMAT ( / ' *TestForBackup*  Backup due to too large a fractional change in core power.', // )
-
-         ictl(1:6) = ( / ictl1, ictl2, 1, 0, 0, 0 / )
-         ictl(1:6) = (/ ictl1, ictl2, 1, 0, 0, 0 /)
-
-
-data radii/(12*(fcasts+1))*0/
-
-       data radii / (12*(fcasts+1))*0 /
-
-
-END PROGRAM
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126546.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126546.f90
deleted file mode 100644
index 51da770..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126546.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-density(atoms%orbs) = 1.0d0
-density(atoms%orbs(i,n)) = 1.0d0
-end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126547.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126547.f90
deleted file mode 100644
index 29dfdd6..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126547.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-module blabla
-implicit none
-
-type,public :: atomic_type
-    integer ::n
-    integer, allocatable :: orbs(:,:)
-end type atomic_type
-
-end module blabla
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126548.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126548.f90
deleted file mode 100644
index ac34d1a..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug126548.f90
+++ /dev/null
@@ -1,24 +0,0 @@
-module blabla
-implicit none
-
-integer :: includx
-integer :: includex
-real :: m
-
-end module blabla
-
-module blabla
-implicit none
-
-integer :: includx
-integer :: includex
-
-contains
-
-subroutine blablas
-
-    print *, includex
-    write(*,*)"hello"
-end subroutine blablas
-
-end module blabla
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug138221.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug138221.f90
deleted file mode 100644
index 4ffa5ef..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug138221.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-    type VarcharType
-        private
-        character,  dimension(:), allocatable :: chars
-    end type
-    end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug167734.f b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug167734.f
deleted file mode 100644
index d9ca601..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug167734.f
+++ /dev/null
@@ -1,3 +0,0 @@
-      program Hello
- 10    format(F5.4,3E2.1)
-      end
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193031.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193031.f90
deleted file mode 100644
index 1c2d909..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193031.f90
+++ /dev/null
@@ -1,32 +0,0 @@
-! This did not parse correctly if its filename extension was .F (it was interpreted as fixed rather than free format),
-! even if .F files were associated with the free-format Fortran content type 
-
-!WRF:DRIVER_LAYER:MAIN
-!
-
-PROGRAM wrf
-
-   USE module_wrf_top
-
-!<DESCRIPTION>
-! Main program of WRF model.  Responsible for starting up the model, reading in (and
-! broadcasting for distributed memory) configuration data, defining and initializing
-! the top-level domain, either from initial or restart data, setting up time-keeping, and
-! then calling the <a href=integrate.html>integrate</a> routine to advance the domain
-! to the ending time of the simulation. After the integration is completed, the model
-! is properly shut down.
-!
-!</DESCRIPTION>
-
-   IMPLICIT NONE
-
-   ! Initialize WRF model.  
-   CALL wrf_init
-
-   ! WRF model time-stepping.  Calls integrate().  
-   CALL wrf_run
-
-   ! WRF model clean-up.  This calls MPI_FINALIZE() for DM parallel runs.  
-   CALL wrf_finalize
-
-END PROGRAM wrf
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193196.f b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193196.f
deleted file mode 100644
index 322af35..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug193196.f
+++ /dev/null
@@ -1,3 +0,0 @@
-      FORMAT(1X,I10,1X,I10,1X,E15.7,I10,1X,I10,1X,I3/)
- 9973 FORMAT(/,1X,'!!!!!! EXECUTION WILL NOW BE TERMINATED !!!!!!',//)
-      END
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug195801.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug195801.f90
deleted file mode 100644
index 2c8e869..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug195801.f90
+++ /dev/null
@@ -1,36 +0,0 @@
-PROGRAM TEST_DERIVED_TYPE
-
-	IMPLICIT NONE
-	
-	TYPE :: TestType
-		INTEGER :: a, b
-	END TYPE
-	
-	
-	TYPE(TestType) :: TestVar
-	
-	
-	TestVar%a = 10
-	TestVar%b = 20
-
-	CALL DISPLAYTEST(TestVar)
-
-	
-CONTAINS
-
-
-
-	SUBROUTINE DISPLAYTEST(Var)
-	
-		IMPLICIT NONE
-		
-		TYPE(TestType), INTENT(IN) :: Var
-		
-		PRINT *, Var%a
-		PRINT *, Var%b
-		
-	END SUBROUTINE
-
-
-
-END PROGRAM
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606-todo.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606-todo.f90
deleted file mode 100644
index 1623eba..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606-todo.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-USE SIZES; USE GLOBAL, ONLY: C3D, COMM; USE GLOBAL_IO
-
-
-type (OutputDataDescript_t) :: descript
-CHARACTER(LEN=4) :: type1
-CHARACTER(LEN=4) :: type2
-integer :: ns,type
-
-type1     = type2
-!type = 2   ! This line still has problems
-
-     READ(IHOT,REC=IHOTSTP) IMHS         ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) TIME         ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) ITHS         ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) NP_G_IN      ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) NE_G_IN      ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) NP_A_IN      ; IHOTSTP = IHOTSTP + 1
-     READ(IHOT,REC=IHOTSTP) NE_A_IN      ; IHOTSTP = IHOTSTP + 1
-
-end
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606.f90
deleted file mode 100644
index 1822e04..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug212606.f90
+++ /dev/null
@@ -1,23 +0,0 @@
-subroutine s
-end subroutine  
-                
-
-program bug212606
-    implicit none
-
-    type OutputDataDescript_t
-        integer n
-    end type
-
-    type (OutputDataDescript_t) :: descript
-
-    CHARACTER(LEN=4) :: type1
-    CHARACTER(LEN=4) :: type2
-
-    integer :: ns,type
-
-    type1 = type2
-
-    type = 2
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug276186.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug276186.f90
deleted file mode 100644
index 8620ba3..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/bug276186.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-type t1(l)
-    integer, len :: l
-end type
-
-type t2(len)
-    integer, len :: len
-end type
-
-!            v-- F03 parser reports unexpected len
-integer ifdr,len_n,len_c,filtyp,fdrnam
-
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/formatbugs.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/formatbugs.f90
deleted file mode 100644
index fe4e648..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/formatbugs.f90
+++ /dev/null
@@ -1,16 +0,0 @@
-10    format(F5.4,3E2.1)
-
-148       FORMAT (/ ' *TestForBackup*  Backup due to too large a fractional ', 'change in core power.' / )
-149       FORMAT ( / ' *TestForBackup*  Backup due to too large a fractional ', 'change in core power.' /)
-150       FORMAT ( / ' *TestForBackup*  Backup due to too large a fractional change in core power.', // )
-
-         ictl(1:6) = ( / ictl1, ictl2, 1, 0, 0, 0 / )
-         ictl(1:6) = (/ ictl1, ictl2, 1, 0, 0, 0 /)
-
-FORMAT(1X,I10,1X,I10,1X,E15.7,I10,1X,I10,1X,I3/)
-
-data radii/(12*(fcasts+1))*0/
-
-9973 FORMAT(/,1X,'!!!!!! EXECUTION WILL NOW BE TERMINATED !!!!!!',//)
-
-      end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/valref.f90 b/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/valref.f90
deleted file mode 100644
index d5f0553..0000000
--- a/org.eclipse.photran.core.vpg.tests/parser-test-code/reg_tests/valref.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-subroutine s(%val(f), %ref(g))
-end subroutine
-
-function f(%val(f), %ref(g))
-end function
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90 b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90
deleted file mode 100644
index 8d0d2f4..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program program
-  implicit none
-! Don't forget about comments
-  ! That would be bad
-print *, "Hello" !<<<<<START !<<<<<END
-  stop
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90.result b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90.result
deleted file mode 100644
index a979aeb..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/01-simple.f90.result
+++ /dev/null
@@ -1,7 +0,0 @@
-program program
-  implicit none
-  ! Don't forget about comments
-    ! That would be bad
-  print *, "Hello" !<<<<<START !<<<<<END
-  stop
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90 b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90
deleted file mode 100644
index 33fb83d..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program program
-  implicit none
-print *, "Hello" !<<<<<START !<<<<<END
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90.result b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90.result
deleted file mode 100644
index 3063bdd..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/02-end-after.f90.result
+++ /dev/null
@@ -1,4 +0,0 @@
-program program
-  implicit none
-  print *, "Hello" !<<<<<START !<<<<<END
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90 b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90
deleted file mode 100644
index 3550349..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-    subroutine s     !<<<<<START
-      print *, 'Yip'
-    end subroutine   !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90.result b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90.result
deleted file mode 100644
index 283be06..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/03-blank-after.f90.result
+++ /dev/null
@@ -1,3 +0,0 @@
-subroutine s     !<<<<<START
-  print *, 'Yip'
-end subroutine   !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90 b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90
deleted file mode 100644
index 54bdeb1..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-program program
-print *, "Hello" !<<<<<START !<<<<<END
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90.result b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90.result
deleted file mode 100644
index 4f26825..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/04-guess-indent.f90.result
+++ /dev/null
@@ -1,3 +0,0 @@
-program program
-    print *, "Hello" !<<<<<START !<<<<<END
-end program program
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90 b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90
deleted file mode 100644
index 6ba1b56..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-            program program !<<<<<START
-          print *, "Hello"
-    end program program
-
-      subroutine s
-        integer :: i
-          do i = 3, 4
-        do j = 5, 6
-                  print *, i + j
-                     end do
-                             end do
-end subroutine !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90.result b/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90.result
deleted file mode 100644
index e2f0ef3..0000000
--- a/org.eclipse.photran.core.vpg.tests/reindenter-test-code/05-eachline-test.f90.result
+++ /dev/null
@@ -1,12 +0,0 @@
-program program !<<<<<START
-    print *, "Hello"
-end program program
-
-subroutine s
-    integer :: i
-    do i = 3, 4
-        do j = 5, 6
-            print *, i + j
-        end do
-    end do
-end subroutine !<<<<<END
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/.cvsignore b/org.eclipse.photran.core.vpg.tests/rename-test-code/.cvsignore
deleted file mode 100644
index d8200e1..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-rename?
-*.mod
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/Makefile b/org.eclipse.photran.core.vpg.tests/rename-test-code/Makefile
deleted file mode 100644
index bace899..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-FORTRAN=ifort
-FLAGS=-g -I.
-
-all:
-	$(FORTRAN) $(FLAGS) -o rename1 rename1.f90
-	$(FORTRAN) $(FLAGS) -o rename2 rename2.f90
-	
-	$(FORTRAN) $(FLAGS) -S rename3c.f90
-	$(FORTRAN) $(FLAGS) -S rename3a.f90 rename3b.f90
-	$(FORTRAN) $(FLAGS) -o rename3 rename3*.f90
-	rm -f *.mod *.s
-	
-	$(FORTRAN) $(FLAGS) -o rename4 rename4.f90
-	$(FORTRAN) $(FLAGS) -o rename5 rename5.f90
-	$(FORTRAN) $(FLAGS) -o rename6 rename6.f90
-	$(FORTRAN) $(FLAGS) -o rename7 rename7.f90
-	$(FORTRAN) $(FLAGS) -o rename8 rename8.f90
-	$(FORTRAN) $(FLAGS) -o rename9 rename9.f90 rename9a.f90
-
-clean:
-	rm -f rename? *.mod *.s
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-mod.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-mod.f90
deleted file mode 100644
index c5e94d7..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-mod.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-MODULE Mod1
-
-    INTEGER, PARAMETER :: DIM = 5 ! 3,27
-
-    CONTAINS
-
-        SUBROUTINE PrintDim
-
-            print *,'DIM IS:'
-
-            print *, DIM ! 11,22
-
-        END SUBROUTINE PrintDim
-
-END MODULE Mod1
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-prog.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-prog.f90
deleted file mode 100644
index ee1110a..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-prog.f90
+++ /dev/null
@@ -1,18 +0,0 @@
-PROGRAM MyProgram
-
-    CALL MySub
-
-    CALL MySub2
-
-END PROGRAM MyProgram
-
-
-subroutine MySub
-
-    USE Mod1
-
-    INTEGER, DIMENSION(DIM) :: MyArray = (/1, 10, 100, 1000, 10000/) ! 14,24
-
-    print *, MyArray(DIM - 2) ! 16,22
-
-end subroutine MySub
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-subs.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-subs.f90
deleted file mode 100644
index b106a7c..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278103-subs.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-subroutine MySub2
-
-    USE Mod1
-
-    REAL :: MyArray2(DIM) ! 5,22
-
-    SAVE MyArray2
-
-    MyArray2(DIM - 3) = 0.1 ! 9,14
-
-    print *, MyArray2(DIM - 3) ! 11,23
-
-    CALL PrintDim
-
-end subroutine MySub2
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278106-visibility.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278106-visibility.f90
deleted file mode 100644
index 9b279a8..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278106-visibility.f90
+++ /dev/null
@@ -1,40 +0,0 @@
-module m1
-  integer :: m1a, m1b ! 2,14 !2,19
-end module m1
-
-module m2
-  use m1
-  private :: m1b ! 7,14
-end module m2
-
-subroutine s1
-  use m2
-  !integer :: m1a !! ILLEGAL
-  integer :: m1b ! 13,14
-  print *, m1a, m1b ! 14,12 14,17
-end subroutine s1
-
-module m3
-  use m1
-  private
-end module m3
-
-subroutine s2
-  use m3
-  integer :: m1a ! 24,14
-  integer :: m1b ! 25,14
-  print *, m1a, m1b ! 26,12 26,17
-end subroutine s2
-
-module m4
-  use m1
-  private
-  public :: m1a ! 32,13
-end module m4
-
-subroutine s3
-  use m4
-  !integer :: m1a !! ILLEGAL
-  integer :: m1b ! 38,14
-  print *, m1a, m1b ! 39,12 39,17
-end subroutine s3
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-mod.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-mod.f90
deleted file mode 100644
index 53d807f..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-mod.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-MODULE Mod1
-  IMPLICIT NONE
-  INTEGER, DIMENSION(3) :: module_array  ! 3,28
-END MODULE Mod1
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-prog.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-prog.f90
deleted file mode 100644
index ef0f5c7..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278320-prog.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-PROGRAM MyProgram
-    USE Mod1
-    IMPLICIT NONE
-    INTEGER :: local_array(3)
-    module_array(1) = 1  ! 5,5
-    local_array(module_array(2)) = 1   ! 6,17
-END PROGRAM MyProgram
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278324.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278324.f90
deleted file mode 100644
index b136aa7..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/bug278324.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-PROGRAM MyProgram
-    IMPLICIT NONE
-    CHARACTER(len=5) :: parmValFormat   ! 3,25
-999 FORMAT('(A',I2,',')
-    WRITE(parmValFormat,999)  ! 5,11
-    WRITE(25, parmValFormat // "' = ', I10, ' [CHANGED]')")  ! 6,15
-END PROGRAM MyProgram
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-a.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-a.f90
deleted file mode 100644
index 3425639..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-a.f90
+++ /dev/null
@@ -1,25 +0,0 @@
-subroutine ext1 !1,12
-end subroutine ext1 !2,16
-
-program test
-  interface
-    subroutine ext1 !6,16
-    end subroutine ext1 !7,20
-
-    character(len=3) function ext2(i) !9,31
-      real, intent(in) :: i
-    end function ext2 !11,18
-
-    integer function ext3() !13,22
-    end function ext3 !14,18
-  end interface
-
-  call ext1 !17,8
-  print *, ext2(1.1) !18,12
-  print *, ext3() !19,12
-
-end program
-
-function ext3() result(j) !23,10
-  j = 3
-end function ext3 !25,14
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-b.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-b.f90
deleted file mode 100644
index 4a7eb67..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-extsub1-b.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-character(len=3) function ext2(i) !1,27
-  real, intent(in) :: i
-  external ext3 !3,12
-
-  j = ext3() !5,7
-  ext2 = 'Bye' !6,3
-end function ext2 !7,14
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-fn-result.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-fn-result.f90
deleted file mode 100644
index dacc742..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-fn-result.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-  print *, f()   ! 1,12
-contains
-  function f()   ! 3,12
-    integer :: f ! 4,16
-    f = 3        ! 5,5
-  end function f ! 6,16
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-overloads.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-overloads.f90
deleted file mode 100644
index 28f4f4c..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename-overloads.f90
+++ /dev/null
@@ -1,49 +0,0 @@
-module module
-  interface module_overload !2,13
-    subroutine overload_int(value) !3,16
-      integer, intent(in) :: value
-    end subroutine overload_int !5,20
-    module procedure overload_char !6,22
-  end interface module_overload !7,17
-contains
-  subroutine overload_char(value) !9,14
-    character, intent(in) :: value
-    print *, "(Module) Character", value
-  end subroutine overload_char !12,18
-end module module
-
-subroutine overload_int(value) !15,12
-  integer, intent(in) :: value
-  print *, "Integer", value
-end subroutine overload_int !18,16
-
-program test
-  interface overload
-    subroutine overload_int(value) !22,16
-      integer, intent(in) :: value
-    end subroutine overload_int !24,20
-
-    subroutine overload_char(value) !26,16
-      character, intent(in) :: value
-    end subroutine overload_char !28,20
-  end interface overload !29,17
-
-  call overload(1)        !31,8
-  call overload('c')      !32,8
-  call overload_int(1)    !33,8
-  call overload_char('c') !34,8
-  call call_module
-contains
-  subroutine call_module
-    use module
-    call module_overload(2)   !39,10
-    call module_overload('d') !40,10
-    call overload_int(2)      !41,10
-    call overload_char('d')   !42,10
-  end subroutine call_module
-end program
-
-subroutine overload_char(value) !46,12
-  character, intent(in) :: value
-  print *, "Character", value
-end subroutine overload_char !49,16
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename1.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename1.f90
deleted file mode 100644
index 711180a..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename1.f90
+++ /dev/null
@@ -1,33 +0,0 @@
-program Main
-    integer, parameter :: two = 2
-    integer, parameter :: three = selected_real_kind(3)
-    integer :: a, b = three
-    integer(three) :: not_shadowed = 98765
-    real(kind=three) :: c
-    complex :: shadow_this_1 = (three, two), shadow_this_2 = (2, three)
-    implicit = 13579
-    print *, a, b, c, two, three, not_shadowed, shadow_this_1, shadow_this_2, implicit
-    
-    call int
-    call ext
-    stop
-    
-contains
-
-    subroutine int
-      complex :: shadow_this_1
-      integer :: shadow_this_2
-      
-      print *, not_shadowed, shadow_this_1, shadow_this_2, implicit
-      call ext
-    end subroutine int
-    subroutine sub
-    end subroutine sub
-end program Main
-subroutine ext
-    print *, two
-contains
-    subroutine int
-        print *, two
-    end subroutine int
-end subroutine ext
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename2.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename2.f90
deleted file mode 100644
index 7fb2509..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename2.f90
+++ /dev/null
@@ -1,29 +0,0 @@
-! Header comment
-program Main ! After program name
-    implicit none
-    integer :: one ! After declaration
-    integer, parameter :: two = 2 ! After declaration assignment
-    integer :: three
-    
-    ! Between specifications
-    
-    integer(two) :: four
-
-    print *, one !
-    print *, two, &
-        three
-    print *, four &
-        , one
-    print *, two, & !
-        three !
-    print *, four & !
-        , one !
-
-    print *, "This is a really&
-            & long string"
-
-    stop
-! end
-end program Main !End
-! end of file
-! end of file
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3.f90
deleted file mode 100644
index ec7214d..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3.f90
+++ /dev/null
@@ -1,18 +0,0 @@
-program MyProgram ! 1,9
-  use module_a, a_renamed3 => a_sub3of3 ! 2,7 2,17 2,31
-  use module_b, only: b_sub2of3, b_renamed3 => b_sub3of3 ! 3,7 3,23 3,34 3,48
-
-  implicit none
-
-  call a_sub1of3  !  7,8
-  call a_sub2of3  !  8,8
-  call a_renamed3 !  9,8
-  call b_sub2of3  ! 10,8
-  call b_renamed3 ! 11,8
-  call contained  ! 12,8
-  call external   ! 13,8
-contains
-  subroutine contained; end subroutine ! 15,14
-end
-
-subroutine external; end subroutine ! 18,12
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3a.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3a.f90
deleted file mode 100644
index fe48524..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3a.f90
+++ /dev/null
@@ -1,6 +0,0 @@
-module module_a ! 1,8
-contains
-    subroutine a_sub1of3; end subroutine ! 3,16
-    subroutine a_sub2of3; end subroutine ! 4,16
-    subroutine a_sub3of3; end subroutine ! 5,16
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3b.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3b.f90
deleted file mode 100644
index eac8923..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3b.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-module module_b ! 1,8
-    use module_c ! 2,9
-contains
-    subroutine b_sub1of3; end subroutine ! 4,16
-    subroutine b_sub2of3; end subroutine ! 5,16
-    subroutine b_sub3of3; ! 6,16
-      call c_sub ! 7,12
-    end subroutine
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3c.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3c.f90
deleted file mode 100644
index 7c06b6d..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename3c.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-module module_c ! 1,8
-contains
-    subroutine c_sub; end subroutine ! 3,16
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4.f90
deleted file mode 100644
index b678a6e..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program MyProgram ! 1,9
-  include "rename4a.fh" ! Some include
-  print *, hello ! 3,12
-  include "rename4b.fh"
-end
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4a.fh b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4a.fh
deleted file mode 100644
index 9900890..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4a.fh
+++ /dev/null
@@ -1,2 +0,0 @@
-integer :: hello   ! 1,12
-integer :: goodbye ! 2, 12
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4b.fh b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4b.fh
deleted file mode 100644
index f32f18b..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename4b.fh
+++ /dev/null
@@ -1 +0,0 @@
-print *, hello ! 1,10
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename5.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename5.f90
deleted file mode 100644
index ce018ef..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename5.f90
+++ /dev/null
@@ -1,47 +0,0 @@
-!            14                             45     52
-pure integer(selected_int_kind(3)) function thrice(n)
-  intent(in) :: n ! 17    n should be implicitly declared, NOT resolve to the outer n
-  thrice=-999 ! 3
-end function thrice ! 14
-
-  type type ! 8
-    integer :: a ! 16
-  end type type ! 12
-
-! 3      10     17  
-! thrice(n) = 3*n ! Statement function, shadows outer function
-! 3
-  n = 1 ! Different n than statement function parameter
-
-  !        12         23     30  34  38    44
-  print *, thrice(6), thrice(n), n,  f(1), f(3)
-  ! Expect 18.0       3.0        1.0 1.0   3.0
-  stop
-
-contains
-                           ! 30 33
-  recursive integer function f (a)
-    !          16
-    integer :: a ! Different a than derived type component
-    !    10       19
-    type(type) :: x
-    !    10                28   33
-    type(type), pointer :: p => null()
-    
-    target :: x ! 15
-    intent(in) :: a ! 19
-
-!   5 7   11
-    x%a = a ! Assign local a to component
-!   5   9    14
-    x = type(a) ! Structure ctor assigning local a to component a
-!   5    10
-    p => x
-    !p => null() does not parse
-
-!   5
-    f = 1
-!       9      16  20     2729
-    if (a > 1) f = thrice(f(f-1))
-  end function f ! 16
-end
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename6.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename6.f90
deleted file mode 100644
index 5784c10..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename6.f90
+++ /dev/null
@@ -1,29 +0,0 @@
-implicit none; type outer ! outer 21
-  integer :: i
-  type(outer), pointer :: inner ! outer 8
-end type
-integer :: j ! j 12
-integer, parameter :: i = 2   ! i 23
-character(len=i), save :: hi = 'hi', bye = 'bye' ! i 15 hi 27 bye 38
-!type(outer) :: type
-type(outer) :: ty ! outer 6 ty 16
-integer :: array(5) ! array 12
-
-!type%i = type%inner%i - i ! i 25
-
-!2      9            22
- ty%i = ty%inner%i - i
-
-!         11   16  20   25   30   35   40
-namelist /nl1/ hi, bye /nl2/ hi, /nl3/ bye
-read (5, nml=nl1) ! nl1 14
-
-!    6  9   13               30
-data hi,bye,ty%i /'Hi','Bye',i/
-!    6       14
-data array/5*i/
-!    6     12
-data array(i) /3/
-!     7     13  17    23    29
-data (array(j), j=1,5,i) /3*i/
-end
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename7.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename7.f90
deleted file mode 100644
index e8e0b9d..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename7.f90
+++ /dev/null
@@ -1,15 +0,0 @@
-!          12
-block data bdn
-
-implicit none
-!          12  16  20  24  28
-integer :: v1, v2, v3, v4, v5
-!       9        18  22    28  32       41  45
-common /common1/ v1, v2/zz/v3,          v4, v5 ! Replacing /zz/ with // causes parse error    Adding /common1/ at 31 causes semantic error
-!     7
-save /common1/
-!    6   10
-data v1, v2 /3, 4/
-!              16
-end block data bdn
-end
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename8.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename8.f90
deleted file mode 100644
index c07b925..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename8.f90
+++ /dev/null
@@ -1,30 +0,0 @@
-end
-! f : (((double -> char(3)), double) -> char(3)) -> char(*)
-!        1012        22
-function f(g) result(q)
-  implicit none
-  !                   23
-  character(len=*) :: q
-  interface
-    ! g : ((double -> char(3)), double) -> char(3)
-    !                         3133 36
-    character(len=3) function g(h, x)
-      interface
-        ! h : double -> char(3)
-        !                         3537
-        character(len=3) function h(x)
-          !                               43
-          double precision, intent(in) :: x
-        end function h !<<< 22
-      end interface
-      !                               39
-      double precision, intent(in) :: x
-    !            18
-    end function g
-  end interface
-! 3
-  q = 'This is terrible'
-!            14
-end function f
-!                18   23                  43
-integer function g(); g = 3; end function g
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9.f90
deleted file mode 100644
index 9b5a100..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9.f90
+++ /dev/null
@@ -1,40 +0,0 @@
-module M1
-  implicit none
-  integer :: i1 !3,14
-  integer, private :: j1 !4,23
-  private :: k1 !5,14
-  interface
-    character(len=3) function k1(z) !7,31
-      real, intent(in) :: z
-    end function
-  end interface
-contains
-  integer function f1(); f1 = 1; end function !12,20 12,26
-end module M1
-
-module M2
-  implicit none
-  integer :: i2 !17,14
-  integer, public :: j2
-  private
-  public :: k2 !20,13
-  interface
-    character(len=3) function k2(i2) !22,31
-      doubleprecision, intent(in) :: i2
-    end function
-  end interface
-contains
-  integer function f2(); f2 = 1; end function !27,20 27,26
-end module M2
-
-program p
-  use M1
-  use M2
-!implicit none ! Uncomment to see compile errors (to determine which are implicits)
-  ! j1 k1 z implicit
-  !        12  16  20  24    30
-  print *, i1, j1, k1, f1(), z
-  ! i2 f2 implicit
-  !        12  16  20       29
-  print *, i2, j2, k2(3d0), f2
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9a.f90 b/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9a.f90
deleted file mode 100644
index a09dbc9..0000000
--- a/org.eclipse.photran.core.vpg.tests/rename-test-code/rename9a.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-character(len=3) function k2(i)
-  real, intent(in) :: i
-  k2 = 'Bye'
-end function
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-1-initial.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-1-initial.f90
deleted file mode 100644
index 28819a2..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-1-initial.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  subroutine q
-  end
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-2-proggie-shorter.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-2-proggie-shorter.f90
deleted file mode 100644
index 1153ad5..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-2-proggie-shorter.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program p ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  subroutine q
-  end
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-3-proggie-longer.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-3-proggie-longer.f90
deleted file mode 100644
index 37a8bf0..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-3-proggie-longer.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggiedoggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  subroutine q
-  end
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-4-q-cut.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-4-q-cut.f90
deleted file mode 100644
index 80be11c..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-4-q-cut.f90
+++ /dev/null
@@ -1,19 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-5-q-pasted.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-5-q-pasted.f90
deleted file mode 100644
index 7b5c1a2..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-5-q-pasted.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-  subroutine q
-  end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-6-q-pasted-at-bottom.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-6-q-pasted-at-bottom.f90
deleted file mode 100644
index 19d94da..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-6-q-pasted-at-bottom.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
-  subroutine q
-  end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-7-q-pasted-formatted.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-7-q-pasted-formatted.f90
deleted file mode 100644
index df092d0..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-7-q-pasted-formatted.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-subroutine q
-end
-
-subroutine t
-end subroutine ! EOF comment
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-8-q-pasted-at-bottom-formatted.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-8-q-pasted-at-bottom-formatted.f90
deleted file mode 100644
index e48bad7..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-8-q-pasted-at-bottom-formatted.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
-
-subroutine t
-end subroutine ! EOF comment
-subroutine q
-end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-9-t-above-q.f90 b/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-9-t-above-q.f90
deleted file mode 100644
index f1031ae..0000000
--- a/org.eclipse.photran.core.vpg.tests/source-editor-test-code/hello-9-t-above-q.f90
+++ /dev/null
@@ -1,21 +0,0 @@
-! This is a Fortran file
-! for testing
-program proggie ! Yes, a program
-	integer, parameter :: TWENTY = 20 ! a constant
-	print *, "Kon'nichiwa, Photran refactoring engine!"
-contains
-
-    subroutine t
-    end subroutine ! EOF comment
-  subroutine q
-  end
-  
-  ! Subroutine comment
-  subroutine s(x) ! sub sub
-    real, intent(in) :: x ! This is x
-    print *, x ! Printing
-  end subroutine
-  
-  subroutine r
-  end
-end
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/ArrayReferenceTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/ArrayReferenceTest.java
deleted file mode 100644
index e8bd424..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/ArrayReferenceTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.analysis.dependence;
-
-import org.eclipse.photran.internal.core.analysis.dependence.VariableReference;
-
-/**
- * 
- * @author Jeff Overbey
- */
-public class ArrayReferenceTest extends BaseTestCase
-{
-    public void test1DLHS() throws Exception
-    {
-        assertEquals("a(2*i+3)", VariableReference.fromLHS(assignment("a(2* i  +3) = 0")).toString());
-        assertEquals("a(2*i+3)", VariableReference.fromLHS(assignment("A(2* i  +3) = 0")).toString());
-        assertEquals("a(1*i+2)", VariableReference.fromLHS(assignment("a(i + 2) = 0")).toString());
-        assertEquals("a(3)",     VariableReference.fromLHS(assignment("a(3) = 0")).toString());
-        assertEquals("a(1*i+0)", VariableReference.fromLHS(assignment("a(i) = 0")).toString());
-        assertEquals("a(2*i+0)", VariableReference.fromLHS(assignment("a(2* i) = 0")).toString());
-        assertEquals("a",        VariableReference.fromLHS(assignment("a(s(n/3)) = 0")).toString());
-        assertEquals("a(2*i+5)", VariableReference.fromLHS(assignment("a(5+2*i) = 0")).toString());
-        assertEquals("a(1*i+5)", VariableReference.fromLHS(assignment("a(5+i) = 0")).toString());
-        assertEquals("a(-1*i+5)", VariableReference.fromLHS(assignment("a(-i+5) = 0")).toString());
-        assertEquals("a(-1*i+0)", VariableReference.fromLHS(assignment("a(-i) = 0")).toString());
-        //assertEquals("a(-1*i+5)", VariableReference.fromLHS(assignment("a(5+-i) = 0")).toString());
-    }
-
-    public void test3DLHS() throws Exception
-    {
-        assertEquals("a(2*i+0, 6, 1*j+10)", VariableReference.fromLHS(assignment("a ( 2*i, 6 , j + 10 ) = 0")).toString());
-    }
-
-    public void testRHS() throws Exception
-    {
-        assertEquals("[b(3), c(6*i+0), i, d, a]",
-            VariableReference.fromRHS(assignment("a ( 2*i, 6 , j + 10 ) = b(3) + c(6*i) + 3 * d * a")).toString());
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/BaseTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/BaseTestCase.java
deleted file mode 100644
index 191d6f9..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/BaseTestCase.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.analysis.dependence;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.internal.core.SyntaxException;
-import org.eclipse.photran.internal.core.analysis.dependence.LoopDependences;
-import org.eclipse.photran.internal.core.analysis.dependence.GCDTest;
-import org.eclipse.photran.internal.core.analysis.loops.ASTProperLoopConstructNode;
-import org.eclipse.photran.internal.core.analysis.loops.LoopReplacer;
-import org.eclipse.photran.internal.core.lexer.LexerException;
-import org.eclipse.photran.internal.core.lexer.LexerFactory;
-import org.eclipse.photran.internal.core.lexer.SourceForm;
-import org.eclipse.photran.internal.core.parser.ASTAssignmentStmtNode;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTMainProgramNode;
-import org.eclipse.photran.internal.core.parser.IBodyConstruct;
-import org.eclipse.photran.internal.core.parser.Parser;
-
-/**
- * Base class for unit tests for dependence testing classes.
- * 
- * @author Jeff Overbey
- */
-abstract class BaseTestCase extends TestCase
-{
-    protected LoopDependences dependences(String loop) throws IOException, LexerException, SyntaxException
-    {
-        return LoopDependences.computeFor(loop(loop), new GCDTest());
-    }
-    
-    protected ASTProperLoopConstructNode loop(String stmt) throws IOException, LexerException, SyntaxException
-    {
-        ASTProperLoopConstructNode result = parseStmt(stmt);
-        assertNotNull(result);
-        return result;
-    }
-    
-    protected ASTAssignmentStmtNode assignment(String stmt) throws IOException, LexerException, SyntaxException
-    {
-        ASTAssignmentStmtNode result = parseStmt(stmt);
-        assertNotNull(result);
-        return result;
-    }
-    
-    @SuppressWarnings("unchecked")
-    protected <T extends IBodyConstruct> T parseStmt(String stmt) throws IOException, LexerException, SyntaxException
-    {
-        String program = stmt + "\nend program\n";
-        InputStream in = new ByteArrayInputStream(program.getBytes());
-        ASTExecutableProgramNode ast = new Parser().parse(LexerFactory.createLexer(in, null, null, SourceForm.UNPREPROCESSED_FREE_FORM, true));
-        assertTrue(ast != null);
-        LoopReplacer.replaceAllLoopsIn(ast);
-        return (T)((ASTMainProgramNode)ast.getProgramUnitList().get(0)).getBody().get(0);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/DependencesTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/DependencesTest.java
deleted file mode 100644
index 34cb16c..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/DependencesTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.analysis.dependence;
-
-import org.eclipse.photran.internal.core.analysis.dependence.LoopDependences;
-
-/**
- * Unit tests for the Dependences class, which collects array dependences in a perfect loop nest.
- * 
- * @author Jeff Overbey
- */
-public class DependencesTest extends BaseTestCase
-{
-    public void testPage38() throws Exception
-    {
-        LoopDependences deps = dependences(
-            "DO I = 1, N\n" +
-            "    A(I + 1) = A(I) + B(I)     ! S1\n" +
-            "ENDDO\n");
-        
-        assertEquals("[a(1*i+1)]", deps.getWrites().toString());
-        assertEquals("[a(1*i+0), i, b(1*i+0), i]", deps.getReads().toString());
-        
-        assertEquals("[Anti-dependence from a(1*i+0) to a(1*i+1), Flow dependence from a(1*i+1) to a(1*i+0)]",
-            deps.getDependences().toString());
-    }
-
-    public void testPage39() throws Exception
-    {
-        LoopDependences deps = dependences(
-            "DO I = 1, N\n" +
-            "    A(I + 2) = A(I) + B(I)     ! S1\n" +
-            "ENDDO\n");
-        
-        assertEquals("[a(1*i+2)]", deps.getWrites().toString());
-        assertEquals("[a(1*i+0), i, b(1*i+0), i]", deps.getReads().toString());
-        
-        assertEquals("[Anti-dependence from a(1*i+0) to a(1*i+2), Flow dependence from a(1*i+2) to a(1*i+0)]",
-            deps.getDependences().toString());
-    }
-
-    public void testFalse1() throws Exception
-    {
-        LoopDependences deps = dependences(
-            "DO I = 1, N\n" +
-            "    A(2*I) = A(2*I + 1)\n" +
-            "ENDDO\n");
-        
-        assertEquals("[a(2*i+0)]", deps.getWrites().toString());
-        assertEquals("[a(2*i+1), i]", deps.getReads().toString());
-        
-        assertTrue(deps.getDependences().isEmpty());
-    }
-
-    public void testPage49() throws Exception
-    {
-        LoopDependences deps = dependences(
-            "DO I = 1, N\n" +
-            "    A(I + 1) = F(I)     ! S1\n" +
-            "    F(I + 1) = A(I)     ! S2\n" +
-            "ENDDO\n");
-        
-        assertEquals("[a(1*i+1), f(1*i+1)]", deps.getWrites().toString());
-        assertEquals("[f(1*i+0), i, a(1*i+0), i]", deps.getReads().toString());
-        
-        assertEquals("[Anti-dependence from f(1*i+0) to f(1*i+1), " +
-                      "Flow dependence from a(1*i+1) to a(1*i+0), " +
-                      "Anti-dependence from a(1*i+0) to a(1*i+1), " +
-                      "Flow dependence from f(1*i+1) to f(1*i+0)]",
-            deps.getDependences().toString());
-    }
-
-    /*
-    public void testFalse2() throws Exception
-    {
-        LoopDependences deps = dependences(
-            "DO I = 1, N\n" +
-            "    A(-1*I) = A(I)\n" +
-            "ENDDO\n");
-        
-        assertEquals("[a(-1*i+0)]", deps.getWrites().toString());
-        assertEquals("[a(1*i+0), i]", deps.getReads().toString());
-        
-        assertTrue(deps.getDependences().isEmpty());
-    }
-    */
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/GCDTestTest.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/GCDTestTest.java
deleted file mode 100644
index b06d8c0..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/GCDTestTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.analysis.dependence;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.internal.core.analysis.dependence.GCDTest;
-
-/**
- * 
- * @author Jeff Overbey
- */
-public class GCDTestTest extends TestCase
-{
-    /**
-     * DO I = 1, N
-     *     A(I + 1) = A(I) + B(I)     ! S1
-     * ENDDO
-     */
-    public void testPage38()
-    {
-        assertTrue(test(
-            1,
-            //          Constant term
-            //          |  Coefficient of I
-            //          |  |
-            //          V  V
-            new int[] { 1, 1 },
-            new int[] { 0, 1 }));
-    }
-    
-    /**
-     * DO I = 1, N
-     *     A(I + 2) = A(I) + B(I)     ! S1
-     * ENDDO
-     */
-    public void testPage39()
-    {
-        assertTrue(test(
-            1,
-            //          Constant term
-            //          |  Coefficient of I
-            //          |  |
-            //          V  V
-            new int[] { 2, 1 },
-            new int[] { 0, 1 }));
-    }
-    
-    /**
-     * DO I = 1, N
-     *     A(2*I) = A(2*I + 1)
-     * ENDDO
-     */
-    public void testFalse()
-    {
-        assertFalse(test(
-            1,
-            //          Constant term
-            //          |  Coefficient of I
-            //          |  |
-            //          V  V
-            new int[] { 0, 2 },
-            new int[] { 1, 2 }));
-    }
-    
-    private boolean test(int n, int[] a, int[] b)
-    {
-        return new GCDTest().test(n, null, null, a, b, null);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/TestSeparatedListRemoval.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/TestSeparatedListRemoval.java
deleted file mode 100644
index bd14432..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/analysis/dependence/TestSeparatedListRemoval.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.analysis.dependence;
-
-import java.io.IOException;
-
-import org.eclipse.photran.internal.core.SyntaxException;
-import org.eclipse.photran.internal.core.lexer.LexerException;
-import org.eclipse.photran.internal.core.parser.ASTEntityDeclNode;
-import org.eclipse.photran.internal.core.parser.ASTTypeDeclarationStmtNode;
-import org.eclipse.photran.internal.core.parser.Parser.IASTListNode;
-
-/**
- * Test to verify that ASTSeparatedListNode#remove correctly removes commas
- * 
- * @author Jeff Overbey
- */
-public class TestSeparatedListRemoval extends BaseTestCase
-{
-    public void testSeparatedListRemoval() throws IOException, LexerException, SyntaxException
-    {
-        ASTTypeDeclarationStmtNode stmt = parseStmt("integer a, b, c, d, e");
-        IASTListNode<ASTEntityDeclNode> decls = stmt.getEntityDeclList();
-        decls.remove(0);
-        assertEquals("integer b, c, d, e", stmt.toString().trim());
-        ASTEntityDeclNode b = decls.get(0);
-        decls.remove(b);
-        assertEquals("integer c, d, e", stmt.toString().trim());
-        decls.remove(1);
-        assertEquals("integer c, e", stmt.toString().trim());
-        decls.remove(1);
-        assertEquals("integer c", stmt.toString().trim());
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestCase.java
deleted file mode 100644
index e979252..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestCase.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.ComparisonFailure;
-import junit.framework.TestCase;
-
-import org.eclipse.photran.core.vpg.util.SemanticError;
-import org.eclipse.photran.internal.core.lexer.LexerFactory;
-import org.eclipse.photran.internal.core.lexer.SourceForm;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.parser.Parser;
-
-/**
- * A test case for parsing a single file.  Created by <code>ParserTestSuite</code>.
- * 
- * @author joverbey
- */
-public abstract class AbstractParserTestCase extends TestCase
-{
-    protected File file = null;
-    protected boolean isFixedForm = false;
-    protected String fileDescription = null;
-
-    /**
-     * Constructor
-     * 
-     * @param filename the file to parse
-     * @param isFixedForm true iff the file is in fixed format
-     */
-    public AbstractParserTestCase(File file, boolean isFixedForm, String testCaseDescription)
-    {
-        super("test"); // name of method to run
-        this.file = file;
-        this.isFixedForm = isFixedForm;
-        this.fileDescription = testCaseDescription;
-    }
-    
-    /**
-     * Method called by JUnit: Parses the given file.
-     * 
-     * @throws Exception
-     */
-    public final void test() throws Exception
-    {
-        if (file == null) return; // for when JUnit invokes the no-arguments constructor and reflectively invokes this method
-        
-        try
-        {
-            SourceForm sourceForm = createSourceForm();
-            ASTExecutableProgramNode ast = new Parser().parse(LexerFactory.createLexer(file, sourceForm, true));
-            assertTrue(ast != null);
-            handleAST(ast);
-        }
-        catch (ComparisonFailure f)
-        {
-            throw f;
-        }
-        catch (Throwable t)
-        {
-            System.err.println(file.getName());
-            throw new Exception(fileDescription, t);
-        }
-    }
-
-    protected SourceForm createSourceForm()
-    {
-        SourceForm sourceForm = (isFixedForm ? SourceForm.FIXED_FORM : SourceForm.UNPREPROCESSED_FREE_FORM); /*SourceForm.preprocessedFreeForm(new IncludeLoaderCallback(null)
-        {
-            @Override public InputStream getIncludedFileAsStream(String fileToInclude) throws FileNotFoundException
-            {
-                throw new FileNotFoundException("INCLUDE lines not supported in JUnit tests");
-            }
-        }));*/
-        return sourceForm;
-    }
-
-    /**
-     * Subclasses can override this method to do something interesting with the AST
-     * 
-     * @param ast The abstract syntax tree for the Fortran file that was parsed
-     * @throws IOException 
-     */
-    protected abstract void handleAST(ASTExecutableProgramNode ast) throws IOException, SemanticError;
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestSuite.java
deleted file mode 100644
index 5411edf..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractParserTestSuite.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.TestSuite;
-
-/**
- * Attempts to parse all of the Fortran source code found in the subdirectories of a particular directory.
- * Created by the various classes in org.eclipse.photran.internal.core.tests.parser.
- * 
- * @author joverbey
- */
-public abstract class AbstractParserTestSuite extends TestSuite
-{
-    public static final String TEST_ROOT = "../org.eclipse.photran.core.vpg.tests/parser-test-code/";
-    
-    protected String directory;
-    protected boolean isFixedForm;
-    
-    public AbstractParserTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        this.directory = getFullPath(directorySuffix);
-        this.isFixedForm = isFixedForm;
-
-        setName(getDescription(directorySuffix, isFixedForm, mustExist));
-
-        File dir = new File(directory);
-        if (dir.exists()) processDirectory(dir, getFilesToSkip(dir));
-    }
-
-    protected String getDescription(String directorySuffix, boolean isFixedForm, boolean mustExist)
-    {
-        String dir = getFullPath(directorySuffix);
-        
-        StringBuffer sb = new StringBuffer(256);
-        sb.append(describeTestAction());
-        sb.append(" ");
-        sb.append(directorySuffix);
-        sb.append(isFixedForm ? " (fixed format)" : " (free format)");
-        String message = sb.toString();
-        
-        if (!new File(dir).exists())
-        {
-            if (mustExist)
-                throw new Error("Unable to find directory " + dir + " (working directory is " + getWorkingDirectory() + ")");
-            else
-                message = "NOTE: Confidential parser tests are not installed on this system: " + dir + " does not exist";
-        }
-        
-        return message;
-    }
-
-    private String getWorkingDirectory()
-    {
-        try
-        {
-            return new File(".").getCanonicalPath();
-        }
-        catch (IOException e)
-        {
-            return "???";
-        }
-    }
-
-    protected abstract String describeTestAction();
-
-    private static String getFullPath(String directorySuffix)
-    {
-        return TEST_ROOT + directorySuffix + (directorySuffix.endsWith("/") ? "" : "/");
-    }
-
-    protected Set<String> getFilesToSkip(File dir)
-    {
-        File list = new File(dir, "PHOTRAN-PARSER-ERRORS.txt");
-        if (list.exists() && list.canRead())
-            return filesListedIn(list);
-        else
-            return Collections.<String>emptySet();
-    }
-
-    protected Set<String> filesListedIn(File list)
-    {
-        try
-        {
-            Set<String> result = new HashSet<String>();
-            
-            BufferedReader r = new BufferedReader(new FileReader(list));
-            for (String line = r.readLine(); line != null; line = r.readLine())
-            {
-                line = line.trim().toLowerCase();
-                if (!line.equals(""))
-                    result.add(line.trim().toLowerCase());
-            }
-            
-            return result;
-        }
-        catch (IOException e)
-        {
-            throw new Error(e);
-        }
-    }
-
-    private void processDirectory(File dir, Set<String> filenamesToSkip)
-    {
-        addTestsFor(
-            dir.listFiles(isFixedForm ? FIXED_FORM_FILENAME_FILTER : FREE_FORM_FILENAME_FILTER),
-            filenamesToSkip);
-        
-        for (File subdir : dir.listFiles(DIRECTORY_FILTER))
-            processDirectory(subdir, filenamesToSkip);
-    }
-    
-    private void addTestsFor(File[] filesInDirectory, Set<String> filenamesToSkip)
-    {
-        for (File file : filesInDirectory)
-            if (!shouldSkip(file, filenamesToSkip))
-                addTest(createTestFor(file, isFixedForm, describe(file)));
-    }
-
-    protected boolean shouldSkip(File file, Set<String> filenamesToSkip)
-    {
-        return filenamesToSkip.contains(file.getName().toLowerCase());
-    }
-
-    protected abstract AbstractParserTestCase createTestFor(File file, boolean isFixedForm, String fileDescription);
-    
-    private String describe(File file)
-    {
-        return file.getAbsolutePath().substring(directory.length());
-    }
-
-    private static FilenameFilter FREE_FORM_FILENAME_FILTER = new FilenameFilter()
-    {
-        public boolean accept(File dir, String name)
-        {
-            return (name.endsWith(".f90")
-                || name.endsWith(".f03")
-                || name.endsWith(".F90")
-                || name.endsWith(".F03")
-                || name.endsWith(".FRE")) && !name.startsWith("XXX");
-        }
-    };
-
-    private static FilenameFilter FIXED_FORM_FILENAME_FILTER = new FilenameFilter()
-    {
-        public boolean accept(File dir, String name)
-        {
-            return (name.endsWith(".f")
-                || name.endsWith(".FIX")) && !name.startsWith("XXX");
-        }
-    };
-
-    private static FileFilter DIRECTORY_FILTER = new FileFilter()
-    {
-        public boolean accept(File f)
-        {
-            return f.isDirectory() && !f.getName().startsWith("XXX");
-        }
-    };
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractSourceEditorTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractSourceEditorTestCase.java
deleted file mode 100644
index 88bcdcc..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/AbstractSourceEditorTestCase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.core.vpg.util.SemanticError;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.SourcePrinter;
-
-public abstract class AbstractSourceEditorTestCase extends TestCase
-{
-    private ASTExecutableProgramNode result = null;
-    
-    /**
-     * Parses the given file as free form Fortran source code 
-     */
-    public ASTExecutableProgramNode load(String filename) throws Exception
-    {
-        new AbstractParserTestCase(new File("../org.eclipse.photran.core.vpg.tests/source-editor-test-code/" + filename), false, AbstractSourceEditorTestCase.class.getName())
-        {
-            @Override
-            protected void handleAST(ASTExecutableProgramNode ast) throws IOException, SemanticError
-            {
-                result = ast;
-            }
-        }.test();
-        
-        if (result == null) throw new Exception("Unable to parse " + filename);
-        return result;
-    }
-    
-    /**
-     * Checks whether two ASTs produce identical source code
-     */
-    protected void assertEquals(ASTExecutableProgramNode expected, ASTExecutableProgramNode actual)
-    {
-        assertEquals(SourcePrinter.getSourceCodeFromAST(expected),
-                     SourcePrinter.getSourceCodeFromAST(actual));
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/FailingParserTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/FailingParserTestSuite.java
deleted file mode 100644
index 96b5b67..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/FailingParserTestSuite.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Set;
-
-/**
- * This is a special instance of {@link ParserTestSuite} which attempts to parse only files listed
- * in a PHOTRAN-PARSER-ERRORS.txt file in the project's directory.
- * 
- * @author joverbey
- */
-public abstract class FailingParserTestSuite extends ParserTestSuite
-{
-    public FailingParserTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        super(directorySuffix, isFixedForm, mustExist);
-    }
-
-    @Override protected boolean shouldSkip(File file, Set<String> filenamesToSkip)
-    {
-        return !super.shouldSkip(file, filenamesToSkip);
-    }
-
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestCase.java
deleted file mode 100644
index 05b160c..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestCase.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-
-import org.eclipse.photran.internal.core.analysis.loops.LoopReplacer;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-
-public class LoopReplacerSRTestCase extends SourceReproductionTestCase
-{
-    private long elapsedTime = 0L;
-    
-    public LoopReplacerSRTestCase(File file, boolean isFixedForm, String testCaseDescription)
-    {
-        super(file, isFixedForm, testCaseDescription);
-    }
-
-    @Override protected void transform(ASTExecutableProgramNode ast)
-    {
-        long start = System.currentTimeMillis();
-        
-        LoopReplacer.replaceAllLoopsIn(ast);
-        
-        elapsedTime = System.currentTimeMillis() - start;
-    }
-    
-    public void testPerformance()
-    {
-        assertTrue("Loop replacer must complete in less than 5 seconds ("
-            + (this.file == null ? "???" : this.file.getName())
-            + " took "
-            + ((elapsedTime/1000) + (elapsedTime%1000 > 500 ? 1 : 0))
-            + " seconds)",
-            elapsedTime < 5000);
-    }
-
-    public LoopReplacerSRTestCase() { super(null, false, ""); } // to keep JUnit quiet
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestSuite.java
deleted file mode 100644
index 4c1288b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/LoopReplacerSRTestSuite.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-public abstract class LoopReplacerSRTestSuite extends AbstractParserTestSuite
-{
-    public LoopReplacerSRTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        super(directorySuffix, isFixedForm, mustExist);
-    }
-
-    @Override
-    protected String describeTestAction()
-    {
-        return "Replace loops and reproduce source code for";
-    }
-
-    @Override
-    protected AbstractParserTestCase createTestFor(File file, boolean isFixedForm, String fileDescription)
-    {
-        return new LoopReplacerSRTestCase(file, isFixedForm, fileDescription);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/MultiTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/MultiTestSuite.java
deleted file mode 100644
index 616eff5..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/MultiTestSuite.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.TestSuite;
-
-/**
- * An aggregate test suite that tests the parser, source reproducer, and loop replacer.
- * 
- * @author Jeff Overbey
- */
-public class MultiTestSuite extends TestSuite
-{
-    public MultiTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        setName("Running multiple tests on " + directorySuffix);
-        
-        addTest(new ParserTestSuite(directorySuffix, isFixedForm, mustExist) {});
-        
-        if (!isFixedForm)
-        {
-            addTest(new SourceReproductionTestSuite(directorySuffix, isFixedForm, mustExist) {});
-            addTest(new LoopReplacerSRTestSuite(directorySuffix, isFixedForm, mustExist) {});
-        }
-    }
-    
-    public MultiTestSuite() {;} // to keep JUnit quiet
-    public void test() {} // to keep JUnit quiet
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestCase.java
deleted file mode 100644
index 2ab0089..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestCase.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-
-/**
- * A test case which runs the parser over a file, expecting a successful parse.
- * Created by {@link ParserTestSuite}.
- * 
- * @author joverbey
- */
-public class ParserTestCase extends AbstractParserTestCase
-{
-    public ParserTestCase(File file, boolean isFixedForm, String testCaseDescription)
-    {
-        super(file, isFixedForm, testCaseDescription);
-    }
-
-    @Override
-    protected void handleAST(ASTExecutableProgramNode ast)
-    {
-        ;
-    }
-    
-    public ParserTestCase() { super(null, false, ""); } // to keep JUnit quiet
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestSuite.java
deleted file mode 100644
index 527698b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/ParserTestSuite.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-/**
- * Creates a suite of {@link ParserTestCase} tests from Fortran source files in a particular directory.
- * 
- * @author joverbey
- */
-public abstract class ParserTestSuite extends AbstractParserTestSuite
-{
-    public ParserTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        super(directorySuffix, isFixedForm, mustExist);
-    }
-
-    @Override
-    protected String describeTestAction()
-    {
-        return "Parse";
-    }
-
-    @Override
-    protected AbstractParserTestCase createTestFor(File file, boolean isFixedForm, String fileDescription)
-    {
-        return new ParserTestCase(file, isFixedForm, fileDescription);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestCase.java
deleted file mode 100644
index 2f4e734..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestCase.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.SourcePrinter;
-
-public class SourceReproductionTestCase extends AbstractParserTestCase
-{
-    public SourceReproductionTestCase(File file, boolean isFixedForm, String testCaseDescription)
-    {
-        super(file, isFixedForm, testCaseDescription);
-    }
-
-    @Override
-    protected void handleAST(ASTExecutableProgramNode ast) throws IOException
-    {
-        String originalSourceCode = getSourceCodeFromFile(file);
-        transform(ast);
-        String reproducedSourceCode = getSourceCodeFromAST(ast);
-        assertEquals(originalSourceCode, reproducedSourceCode);
-    }
-
-    protected void transform(ASTExecutableProgramNode ast)
-    {
-        // Subclass and override to transform AST first
-    }
-
-    private String getSourceCodeFromFile(File file) throws IOException
-    {
-        StringBuffer sb = new StringBuffer(4096);
-        BufferedReader in = new BufferedReader(new FileReader(file));
-        for (int ch = in.read(); ch >= 0; ch = in.read())
-            sb.append((char)ch);
-        in.close();
-        return sb.toString();
-    }
-    
-    private String getSourceCodeFromAST(ASTExecutableProgramNode ast)
-    {
-        return SourcePrinter.getSourceCodeFromAST(ast);
-    }
-
-    public SourceReproductionTestCase() { super(null, false, ""); } // to keep JUnit quiet
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestSuite.java
deleted file mode 100644
index cd60d3e..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/SourceReproductionTestSuite.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-public abstract class SourceReproductionTestSuite extends AbstractParserTestSuite
-{
-    public SourceReproductionTestSuite(String directorySuffix, boolean isFixedForm, boolean mustExist) throws FileNotFoundException, IOException
-    {
-        super(directorySuffix, isFixedForm, mustExist);
-    }
-
-    @Override
-    protected String describeTestAction()
-    {
-        return "Reproduce source code for";
-    }
-
-    @Override
-    protected AbstractParserTestCase createTestFor(File file, boolean isFixedForm, String fileDescription)
-    {
-        return new SourceReproductionTestCase(file, isFixedForm, fileDescription);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestChangeText.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestChangeText.java
deleted file mode 100644
index d0e396c..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestChangeText.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.f_source_editing;
-
-import org.eclipse.photran.internal.core.lexer.Token;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTMainProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTProgramNameNode;
-import org.eclipse.photran.internal.core.parser.ASTProgramStmtNode;
-import org.eclipse.photran.internal.core.parser.IProgramUnit;
-import org.eclipse.photran.internal.core.tests.AbstractSourceEditorTestCase;
-
-public class TestChangeText extends AbstractSourceEditorTestCase
-{
-    public void testChangeProggie() throws Exception
-    {
-        ASTExecutableProgramNode ast = load("hello-1-initial.f90");
-        IProgramUnit programUnit1 = ast.getProgramUnitList().get(0);
-        ASTMainProgramNode mainProgram = (ASTMainProgramNode)programUnit1;
-        ASTProgramStmtNode programStmt = mainProgram.getProgramStmt();
-        ASTProgramNameNode programName = programStmt.getProgramName();
-        Token proggie = programName.getProgramName();
-        
-        proggie.setText("p");
-        assertEquals(load("hello-2-proggie-shorter.f90"), ast);
-        
-        proggie.setText("proggiedoggie");
-        assertEquals(load("hello-3-proggie-longer.f90"), ast);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestRemove.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestRemove.java
deleted file mode 100644
index df98866..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/f_source_editing/TestRemove.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.f_source_editing;
-
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTMainProgramNode;
-import org.eclipse.photran.internal.core.parser.IInternalSubprogram;
-import org.eclipse.photran.internal.core.parser.Parser.IASTListNode;
-import org.eclipse.photran.internal.core.tests.AbstractSourceEditorTestCase;
-
-public class TestRemove extends AbstractSourceEditorTestCase
-{
-    public void testRemoveQ() throws Exception
-    {
-        ASTExecutableProgramNode ast = load("hello-1-initial.f90");
-        IASTListNode<IInternalSubprogram> subprograms = ((ASTMainProgramNode)ast.getProgramUnitList().get(0)).getInternalSubprograms();
-        subprograms.remove(0);
-        assertEquals(load("hello-4-q-cut.f90"), ast);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/g_type_check/TypeCheckerTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/g_type_check/TypeCheckerTestCase.java
deleted file mode 100644
index ea2fb74..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/g_type_check/TypeCheckerTestCase.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.g_type_check;
-
-import java.io.ByteArrayInputStream;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.internal.core.analysis.types.Type;
-import org.eclipse.photran.internal.core.analysis.types.TypeChecker;
-import org.eclipse.photran.internal.core.lexer.LexerFactory;
-import org.eclipse.photran.internal.core.lexer.SourceForm;
-import org.eclipse.photran.internal.core.parser.ASTAssignmentStmtNode;
-import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTMainProgramNode;
-import org.eclipse.photran.internal.core.parser.IExpr;
-import org.eclipse.photran.internal.core.parser.Parser;
-
-/**
- * Fortran type checker unit tests
- * 
- * @author Stoyan Gaydarov
- */
-public class TypeCheckerTestCase extends TestCase
-{
-    
-    /** Parses a Fortran expression.  Does not bind identifiers, etc. */
-    private Type getType(String expression) throws Exception
-    {
-        // We can only parse entire programs, so we embed the expression in
-        // a parseable program, then extract the expression from the program's AST
-        
-        String program = "a = " + expression + "\nend";
-        ASTExecutableProgramNode ast = new Parser().parse(LexerFactory.createLexer(new ByteArrayInputStream(program.getBytes()), null, "<literal text>", SourceForm.UNPREPROCESSED_FREE_FORM, false));
-        assertNotNull(ast);
-        ASTMainProgramNode mainProg = (ASTMainProgramNode)ast.getProgramUnitList().get(0);
-        ASTAssignmentStmtNode assignmentStmt = (ASTAssignmentStmtNode)mainProg.getBody().get(0);
-        IExpr exprNode = assignmentStmt.getRhs();
-        return TypeChecker.getTypeOf(exprNode);
-    }
-    
-    private String character = "\"Stoyan\""; // used for character type 
-    
-    public void testConstantExpressionTypes() throws Exception
-    {
-        assertEquals(Type.INTEGER, getType("3"));
-        assertEquals(Type.REAL, getType("3.0"));
-        assertEquals(Type.CHARACTER, getType(character));
-        assertEquals(Type.DOUBLEPRECISION, getType("3.0D+00"));
-        assertEquals(Type.COMPLEX, getType("(3,3)"));
-        assertEquals(Type.LOGICAL, getType(".true."));
-    }
-    
-    public void testUnaryExpressionTypes() throws Exception
-    {
-        assertEquals(Type.INTEGER, getType("-3"));
-        assertEquals(Type.INTEGER, getType("+3"));
-        assertEquals(Type.TYPE_ERROR, getType(".NOT. 3"));
-        
-        assertEquals(Type.REAL, getType("-3.0"));
-        assertEquals(Type.REAL, getType("+3.0"));
-        assertEquals(Type.TYPE_ERROR, getType(".NOT. 3.0"));
-        
-        assertEquals(Type.DOUBLEPRECISION, getType("-3.0D+00"));
-        assertEquals(Type.DOUBLEPRECISION, getType("+3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType(".NOT. 3.0D+00"));
-        
-        assertEquals(Type.COMPLEX, getType("-(3,3)"));
-        assertEquals(Type.COMPLEX, getType("+(3,3)"));
-        assertEquals(Type.TYPE_ERROR, getType(".NOT. (3,3)"));
-        
-        assertEquals(Type.TYPE_ERROR, getType("-" + character)); //??
-        assertEquals(Type.TYPE_ERROR, getType("+" + character)); //??
-        assertEquals(Type.TYPE_ERROR, getType(".NOT. " + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType("-.true."));
-        assertEquals(Type.TYPE_ERROR, getType("+.true."));
-        assertEquals(Type.LOGICAL, getType(".NOT. .true."));
-    }
-    
-    public void testConcatOperations() throws Exception
-    {
-        assertEquals(Type.UNKNOWN, getType(character + " // " + "1"));
-        assertEquals(Type.UNKNOWN, getType(character + " // " + "3.2"));
-        assertEquals(Type.UNKNOWN, getType(character + " // " + "43.3D+00"));
-        assertEquals(Type.UNKNOWN, getType(character + " // " + "(6,7)"));
-        assertEquals(Type.UNKNOWN, getType(character + " // " + ".true."));
-        assertEquals(Type.CHARACTER, getType(character + " // " + character));
-    }
-    
-    public void testGEOperator() throws Exception
-    {
-        testComparasonOperations(" .GE. ");
-    }
-    
-    public void testGTOperator() throws Exception
-    {
-        testComparasonOperations(" .GT. ");
-    }
-    
-    public void testLEOperator() throws Exception
-    {
-        testComparasonOperations(" .LE. ");
-    }
-    
-    public void testLTOperator() throws Exception
-    {
-        testComparasonOperations(" .LT. ");
-    }
-    
-    public void testNEOperator() throws Exception
-    {
-        testComparasonOperations(" .NE. ");
-    }
-    
-    public void testEQOperator() throws Exception
-    {
-        testComparasonOperations(" .EQ. ");
-    }
-    
-    private void testComparasonOperations(String op) throws Exception
-    {
-        if(op.equals(" .EQ. ") || op.equals(" .NE. "))
-        {
-            assertEquals(Type.LOGICAL, getType("8" + op + "(4,5)"));
-            assertEquals(Type.LOGICAL, getType("3.6" + op + "(3,8)"));
-            assertEquals(Type.LOGICAL, getType("3.2D+00" + op + "(4,9)"));
-            assertEquals(Type.LOGICAL, getType("(4,8)" + op + "7"));
-            assertEquals(Type.LOGICAL, getType("(4,3)" + op + "5.4"));
-            assertEquals(Type.LOGICAL, getType("(4,6)" + op + "(4,9)"));
-            assertEquals(Type.LOGICAL, getType("(3,0)" + op + "3.0D+00"));
-        }
-        else
-        {
-            assertEquals(Type.TYPE_ERROR, getType("8" + op + "(4,5)"));
-            assertEquals(Type.TYPE_ERROR, getType("3.6" + op + "(3,8)"));
-            assertEquals(Type.TYPE_ERROR, getType("3.2D+00" + op + "(4,9)"));
-            assertEquals(Type.TYPE_ERROR, getType("(4,8)" + op + "7"));
-            assertEquals(Type.TYPE_ERROR, getType("(4,3)" + op + "5.4"));
-            assertEquals(Type.TYPE_ERROR, getType("(4,6)" + op + "(4,9)"));
-            assertEquals(Type.TYPE_ERROR, getType("(3,0)" + op + "3.0D+00"));
-        }
-        
-        assertEquals(Type.LOGICAL, getType("9" + op + "3"));
-        assertEquals(Type.LOGICAL, getType("5" + op + "3.0"));
-        assertEquals(Type.LOGICAL, getType("4" + op + "2.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("1" + op + character));
-        
-        assertEquals(Type.LOGICAL, getType("3.0" + op + "7"));
-        assertEquals(Type.LOGICAL, getType("3.3" + op + "3.5"));
-        assertEquals(Type.LOGICAL, getType("4.0" + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3.2" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.1" + op + character));
-        
-        assertEquals(Type.LOGICAL, getType("3.1D+00" + op + "7"));
-        assertEquals(Type.LOGICAL, getType("4.0D+00" + op + "5.4"));
-        assertEquals(Type.LOGICAL, getType("5.0D+00" + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3.8D+00" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("2.1D+00" + op + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType("(3,3)" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("(2,1)" + op + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "7"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "5.4"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "(4,9)"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "7"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "5.4"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "(4,9)"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "c"));
-        
-    }
-    
-    public void testLogicalOperations() throws Exception
-    {
-        
-        assertEquals(Type.LOGICAL, getType(".true. .AND. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("1 .AND. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.3 .AND. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.2D+00 .AND. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("(3,4) .AND. .true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + " .AND. .true."));
-        
-        assertEquals(Type.LOGICAL, getType(".true. .OR. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("1 .OR. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.3 .OR. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.2D+00 .OR. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("(3,4) .OR. .true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + " .OR. .true."));
-        
-        assertEquals(Type.LOGICAL, getType(".true. .EQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("1 .EQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.3 .EQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.2D+00 .EQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("(3,4) .EQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + " .EQV. .true."));
-        
-        assertEquals(Type.LOGICAL, getType(".true. .NEQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("1 .NEQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.3 .NEQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.2D+00 .NEQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType("(3,4) .NEQV. .true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + " .NEQV. .true."));
-        
-    }
-    
-    public void testAddExpressionTypes() throws Exception
-    {
-        testOpExpressionTypes("+");
-    }
-    
-    public void testSubtractExpressionTypes() throws Exception
-    {
-        testOpExpressionTypes("-");
-    }
-    
-    public void testMultiplyExpressionTypes() throws Exception
-    {
-        testOpExpressionTypes("*");
-    }
-    
-    public void testDivisionExpressionTypes() throws Exception
-    {
-        testOpExpressionTypes("/");
-    }
-    
-    public void testPowerExpressionTypes() throws Exception
-    {
-        testOpExpressionTypes("**");
-    }
-    
-    private void testOpExpressionTypes(String op) throws Exception
-    {
-        
-        assertEquals(Type.INTEGER, getType("9" + op + "3"));
-        assertEquals(Type.REAL, getType("5" + op + "3.0"));
-        assertEquals(Type.COMPLEX, getType("8" + op + "(4,5)"));
-        assertEquals(Type.DOUBLEPRECISION, getType("4" + op + "2.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("1" + op + character));
-        
-        assertEquals(Type.REAL, getType("3.0" + op + "7"));
-        assertEquals(Type.REAL, getType("3.3" + op + "3.5"));
-        assertEquals(Type.COMPLEX, getType("3.6" + op + "(3,8)"));
-        assertEquals(Type.DOUBLEPRECISION, getType("4.0" + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3.2" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("4.1" + op + character));
-        
-        assertEquals(Type.COMPLEX, getType("(4,8)" + op + "7"));
-        assertEquals(Type.COMPLEX, getType("(4,3)" + op + "5.4"));
-        assertEquals(Type.COMPLEX, getType("(4,6)" + op + "(4,9)"));
-        assertEquals(Type.COMPLEX, getType("(3,0)" + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("(3,3)" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("(2,1)" + op + character));
-        
-        assertEquals(Type.DOUBLEPRECISION, getType("3.1D+00" + op + "7"));
-        assertEquals(Type.DOUBLEPRECISION, getType("4.0D+00" + op + "5.4"));
-        assertEquals(Type.COMPLEX, getType("3.2D+00" + op + "(4,9)"));
-        assertEquals(Type.DOUBLEPRECISION, getType("5.0D+00" + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType("3.8D+00" + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType("2.1D+00" + op + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "7"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "5.4"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "(4,9)"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType(".true." + op + character));
-        
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "7"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "5.4"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "(4,9)"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "3.0D+00"));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + ".true."));
-        assertEquals(Type.TYPE_ERROR, getType(character + op + "c"));
-        
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/h_interface_links/InterfaceLinkTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/h_interface_links/InterfaceLinkTestCase.java
deleted file mode 100644
index 2d4afbb..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/h_interface_links/InterfaceLinkTestCase.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.h_interface_links;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.photran.core.IFortranAST;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.internal.core.analysis.binding.Definition;
-import org.eclipse.photran.internal.core.lexer.Token;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * Unit tests for {@link Definition#resolveInterfaceBinding()}
- * and {@link Definition#findMatchingDeclarationsInInterfaces()}
- * 
- * @author Jeff Overbey
- */
-public class InterfaceLinkTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "interface-test-code";
-
-    private IFile interface1;
-    private IFile definition1;
-    private IFile definition2;
-    private IFile interface2;
-    
-    private Definition if1;
-    private Definition if2;
-    private Definition if3;
-    private Definition if4;
-    private Definition def1;
-    private Definition def2;
-    private Definition def3;
-
-    @Override public void setUp() throws Exception
-    {
-        super.setUp();
-        
-        /* The four files are imported in this order so that
-         * the INTERFACE block in the first file is seen /before/
-         * all of the corresponding subprogram declarations,
-         * while the INTERFACE block in the last file is seen
-         * /after/ all of the corresponding subprograms. 
-         */
-        
-        interface1 = importFile(DIR, "interface1.f90");
-        definition1 = importFile(DIR, "definition1.f90");
-        definition2 = importFile(DIR, "definition2.f90");
-        interface2 = importFile(DIR, "interface2.f90");
-        //                    File      Line  Column
-        if1  = findDefinition(interface1,  2, 20); // Ordinary INTERFACE block
-        if2  = findDefinition(interface1, 10, 24); // INTERFACE block for a subprogram parameter
-        if3  = findDefinition(interface1, 17, 24); // Ordinary INTERFACE block
-        if4  = findDefinition(interface2,  2, 20); // Ordinary INTERFACE block
-        def1 = findDefinition(interface1, 24, 18);
-        def2 = findDefinition(definition1, 1, 18);
-        def3 = findDefinition(definition2, 1, 18);
-    }
-
-    public void testResolveInterfaceBinding() throws Exception
-    {
-        checkContainsAllDefinitions(if1.resolveInterfaceBinding());
-        assertTrue(if2.resolveInterfaceBinding().isEmpty()); // Interface for subprogram parameter
-        checkContainsAllDefinitions(if3.resolveInterfaceBinding());
-        checkContainsAllDefinitions(if4.resolveInterfaceBinding());
-    }
-
-    public void testFindMatchingDeclarationsInInterfaces() throws Exception
-    {
-        checkContainsAllInterfaces(def1.findMatchingDeclarationsInInterfaces());
-        checkContainsAllInterfaces(def2.findMatchingDeclarationsInInterfaces());
-        checkContainsAllInterfaces(def3.findMatchingDeclarationsInInterfaces());
-    }
-
-    private void checkContainsAllDefinitions(Collection<Definition> defs)
-    {
-        assertEquals(3, defs.size());
-        assertTrue(defs.contains(def1));
-        assertTrue(defs.contains(def2));
-        assertTrue(defs.contains(def3));
-    }
-
-    private void checkContainsAllInterfaces(Collection<Definition> defs)
-    {
-        assertEquals(3, defs.size());
-        assertTrue(defs.contains(if1));
-        assertFalse(defs.contains(if2)); // Interface for subprogram parameter
-        assertTrue(defs.contains(if3));
-        assertTrue(defs.contains(if4));
-    }
-    
-    private Definition findDefinition(IFile file, int line, int col)
-    {
-        IFortranAST ast = PhotranVPG.getInstance().acquireTransientAST(file); assertNotNull(ast);
-        Token token = findTokenByLineCol(ast, line, col); assertNotNull(token);
-        List<Definition> defs = token.resolveBinding(); assertEquals(1, defs.size());
-        Definition def = defs.get(0);
-        assertEquals(file, def.getTokenRef().getFile());
-        assertEquals(token.getFileOffset(), def.getTokenRef().getOffset());
-        return def;
-    }
-
-    private Token findTokenByLineCol(IFortranAST ast, int line, int col)
-    {
-        for (Token token : ast)
-            if (token.getLine() == line && token.getCol() == col)
-                return token;
-        
-        return null;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/HugeFile.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/HugeFile.java
deleted file mode 100644
index 4886d19..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/HugeFile.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.ByteArrayInputStream;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.internal.core.lexer.IAccumulatingLexer;
-import org.eclipse.photran.internal.core.lexer.LexerFactory;
-import org.eclipse.photran.internal.core.lexer.SourceForm;
-import org.eclipse.photran.internal.core.lexer.Terminal;
-import org.eclipse.photran.internal.core.lexer.preprocessor.fortran_include.IncludeLoaderCallback;
-import org.eclipse.photran.internal.core.parser.Parser;
-
-/**
- * These are meant to be used as performance tests.  When this one of the test methods in this class is run standalone with
- * JVM arguments such as
- * <pre>-Xmx512M -Xrunhprof:cpu=samples,depth=5,file=/Users/joverbey/Desktop/java.hprof.txt</pre>,
- * the profile can be used to find bottlenecks in the lexer or parser code.
- * 
- * @author Jeff Overbey
- */
-public class HugeFile extends TestCase
-{
-    private String hugeFile = null;
-    
-    public void test() { /* Uncomment below */ }
-    
-//    public void setUp()
-//    {
-//        long start = System.currentTimeMillis();
-//        StringBuilder sb = new StringBuilder();
-//        sb.append("program p\n");
-//        for (int i = 0; i < 30000; i++)
-//            sb.append("    print *, 3+4*5\n");
-//            //sb.append("    print *, \"----+----|----+----|----+----|----+----|----+----|----+----|----+----|----+----|\"\n");
-//        sb.append("end");
-//        hugeFile = sb.toString();
-//        System.out.println("String building: " + (System.currentTimeMillis() - start));
-//    }
-//
-//    public void testLexHugeFile() throws Exception
-//    {
-//        ByteArrayInputStream in = new ByteArrayInputStream(hugeFile.getBytes());
-//
-//        long start = System.currentTimeMillis();
-//        IAccumulatingLexer lexer = LexerFactory.createLexer(in, "<stdin>", SourceForm.preprocessedFreeForm(new IncludeLoaderCallback(null)), true);
-//        while (lexer.yylex().getTerminal() != Terminal.END_OF_INPUT)
-//            ;
-//        System.out.println("Lexing: " + (System.currentTimeMillis() - start));
-//    }
-//
-//    public void testParseHugeFile() throws Exception
-//    {
-//        ByteArrayInputStream in = new ByteArrayInputStream(hugeFile.getBytes());
-//
-//        long start = System.currentTimeMillis();
-//        IAccumulatingLexer lexer = LexerFactory.createLexer(in, "<stdin>", SourceForm.preprocessedFreeForm(new IncludeLoaderCallback(null)), true);
-//        new Parser().parse(lexer);
-//        System.out.println("Parsing: " + (System.currentTimeMillis() - start));
-//    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseFortran2003TestFiles.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseFortran2003TestFiles.java
deleted file mode 100644
index 7f3f4ea..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseFortran2003TestFiles.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseFortran2003TestFiles
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("fortran2003_tests", false, true) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectCollections.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectCollections.java
deleted file mode 100644
index 194f9c9..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectCollections.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectCollections
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.collections", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialArjanVanDijkAtmos.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialArjanVanDijkAtmos.java
deleted file mode 100644
index 6820af9..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialArjanVanDijkAtmos.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialArjanVanDijkAtmos
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.arjan-van-dijk-atmos", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialAsteroids.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialAsteroids.java
deleted file mode 100644
index 0752f55..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialAsteroids.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialAsteroids
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.asteroids", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFMLIB.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFMLIB.java
deleted file mode 100644
index f6510c1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFMLIB.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialFMLIB
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.fmlib", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFromTheWWW.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFromTheWWW.java
deleted file mode 100644
index 200adbc..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialFromTheWWW.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialFromTheWWW
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.from-the-www", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialIBEAMCppMod.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialIBEAMCppMod.java
deleted file mode 100644
index 02458bc..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialIBEAMCppMod.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialIBEAMCppMod
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.ibeam-cpp-mod", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialLAPACK.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialLAPACK.java
deleted file mode 100644
index af7dcff..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialLAPACK.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialLAPACK
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.lapack", true, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialNagleFortran2003.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialNagleFortran2003.java
deleted file mode 100644
index 8316c13..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialNagleFortran2003.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialNagleFortran2003
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.nagle-fortran2003", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialPOP.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialPOP.java
deleted file mode 100644
index bd5a06b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialPOP.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialPOP
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.pop", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdFortran2003.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdFortran2003.java
deleted file mode 100644
index f528887..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdFortran2003.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdFortran2003
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-fortran2003", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java
deleted file mode 100644
index 7624881..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFixed.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdTestSuiteFixed
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-test-suite",
-            true, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java
deleted file mode 100644
index 62392b0..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWaltBrainerdTestSuiteFree.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectConfidentialWaltBrainerdTestSuiteFree
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.walt-brainerd-test-suite",
-            false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectString.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectString.java
deleted file mode 100644
index 62c2df2..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectString.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseProjectString
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.string", false, false) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRefactoringTestFiles.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRefactoringTestFiles.java
deleted file mode 100644
index 58e40a1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRefactoringTestFiles.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseRefactoringTestFiles
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("refactoring_test_files", false, true) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRegressionTests.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRegressionTests.java
deleted file mode 100644
index 3556c33..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseRegressionTests.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseRegressionTests
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("reg_tests", false, true) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseSamples.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseSamples.java
deleted file mode 100644
index 4e9f698..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseSamples.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.projects;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.internal.core.tests.MultiTestSuite;
-
-public class ParseSamples
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-samples", false, true) {};
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/serialization/TestVPGSerializer.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/serialization/TestVPGSerializer.java
deleted file mode 100644
index a036b55..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/serialization/TestVPGSerializer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.serialization;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.Serializable;
-
-import junit.framework.TestCase;
-
-import org.eclipse.photran.core.vpg.PhotranTokenRef;
-import org.eclipse.photran.core.vpg.PhotranVPGSerializer;
-import org.eclipse.photran.internal.core.analysis.binding.Definition;
-import org.eclipse.photran.internal.core.analysis.binding.Definition.Classification;
-import org.eclipse.photran.internal.core.analysis.types.DerivedType;
-import org.eclipse.photran.internal.core.analysis.types.FunctionType;
-import org.eclipse.photran.internal.core.analysis.types.Type;
-
-/**
- * Tests serialization and deserialization using the {@link PhotranVPGSerializer}
- * 
- * @author Jeff Overbey
- */
-public class TestVPGSerializer extends TestCase
-{
-    public void test() throws IOException
-    {
-        check(null);
-
-        check("Hello");
-        check("");
-        
-        check(3);
-        check(100);
-        check(-999);
-        check(Integer.MAX_VALUE);
-        check(Integer.MIN_VALUE);
-        
-        check(Type.INTEGER);
-        check(Type.REAL);
-        check(Type.DOUBLEPRECISION);
-        check(Type.COMPLEX);
-        check(Type.LOGICAL);
-        check(Type.CHARACTER);
-        check(Type.UNKNOWN);
-        check(Type.VOID);
-        check(Type.TYPE_ERROR);
-        check(new PhotranTokenRef("/your/place/a.f90", -1, 0));
-        check(new PhotranTokenRef("Test", 3, 5));
-        check(new Definition("declaredName", new PhotranTokenRef("", -1, 0), Classification.ENUMERATOR, Type.INTEGER));
-        check(new DerivedType("my_type"));
-        check(new DerivedType("AnotherType"));
-        check(new FunctionType("a_function"));
-        check(new FunctionType("f"));
-    }
-    
-    private void check(Serializable object) throws IOException
-    {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-        PhotranVPGSerializer.serialize(object, out);
-        
-        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-        Serializable deserializedObject = PhotranVPGSerializer.deserialize(in);
-        
-        assertEquals(object, deserializedObject);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/x_cpreprocessor/CPreprocessorTests.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/x_cpreprocessor/CPreprocessorTests.java
deleted file mode 100644
index 3f61415..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/x_cpreprocessor/CPreprocessorTests.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.internal.core.tests.x_cpreprocessor;
-
-import java.util.ArrayList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.cdt.core.dom.ast.IASTComment;
-import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
-import org.eclipse.cdt.core.dom.ast.IASTImageLocation;
-import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroExpansion;
-import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement;
-import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration;
-import org.eclipse.cdt.core.parser.CodeReader;
-import org.eclipse.cdt.core.parser.EndOfFileException;
-import org.eclipse.cdt.core.parser.IToken;
-import org.eclipse.cdt.core.parser.NullLogService;
-import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
-import org.eclipse.cdt.core.parser.ParserLanguage;
-import org.eclipse.cdt.core.parser.ScannerInfo;
-import org.eclipse.cdt.internal.core.dom.NullCodeReaderFactory;
-import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
-import org.eclipse.cdt.internal.core.parser.scanner.ILocationResolver;
-
-/**
- * 
- * @author joverbey
- */
-@SuppressWarnings("restriction")
-public class CPreprocessorTests extends TestCase
-{
-    private static class MyToken
-    {
-        IToken token;
-        boolean isPreprocessed;
-    }
-    
-    public void test1() throws OffsetLimitReachedException
-    {
-//        String source =
-//         "q\n#define HELLO w\n" +
-//        	"// Try this\n" +
-//        	"HELLO/* */ hh \"wo\" \"rld\" ??( HELLO ??)\n" +
-//        	"  # define W(Z) #Z\n" +
-//        	"a W(bc) d e";
-//        
-//        CPreprocessor cpp = createCPP(source);
-//        //cpp.setComputeImageLocations(true);
-//        ArrayList<MyToken> toks = collectTokens(cpp);
-//        
-//        for (MyToken t : toks)
-//            describe(cpp, t.token);
-//
-//        for (IASTPreprocessorStatement s : cpp.getLocationMap().getAllPreprocessorStatements())
-//            System.out.println(s + " - " + s.getFileLocation());
-//        
-//        int lastOffset = 0;
-//        for (MyToken t : toks)
-//        {
-//            if (!t.isPreprocessed)
-//            {
-//                // This offset is actually a "sequence number" (which is affected
-//                // by macro expansions and so forth)...
-//                int midOffset = t.token.getOffset();
-//                int nextOffset = t.token.getEndOffset();
-//
-//                // ...which we have to map back to a location in the original file
-//                IASTFileLocation fl = cpp.getLocationResolver().getMappedFileLocation(midOffset, nextOffset-midOffset);
-//                midOffset  = fl.getNodeOffset();
-//                nextOffset = midOffset + fl.getNodeLength();
-//                
-//                System.err.print("[");
-//                System.err.print(source.substring(lastOffset, midOffset));
-//                System.err.print("|");
-//                String textFromFile = source.substring(midOffset, nextOffset);
-//                if (t.token.getImage().equals(textFromFile))
-//                    System.err.print(textFromFile);
-//                else
-//                    System.err.print(textFromFile + "/" + t.token.getImage());
-//                System.err.print("]");
-//                lastOffset = nextOffset;
-//            }
-//        }
-//        System.err.println();
-//
-//        for (MyToken t : toks)
-//            System.out.print(t.token.getImage() + " ");
-//    }
-//
-//    private ArrayList<MyToken> collectTokens(CPreprocessor cpp) throws OffsetLimitReachedException
-//    {
-//        ArrayList<MyToken> toks = new ArrayList<MyToken>();
-//        for (;;)
-//        {
-//            MyToken t = new MyToken();
-//            t.token = cpp.nextTokenRaw(); // gcc -E does not concatenate adjacent string literals
-//            
-//            if (t.token.getType() == IToken.tEND_OF_INPUT)
-//                break;
-//            
-//            if (!cpp.isOnTopContext() || cpp.getLocationMap().getImageLocation(t.token.getOffset(), t.token.getLength()) == null)
-//                t.isPreprocessed = true;
-//            else
-//                t.isPreprocessed = false;
-//            
-//            toks.add(t);
-//        }
-//        return toks;
-//    }
-//
-//    private void describe(CPreprocessor cpp, final IToken t)
-//    {
-//        System.out.println(t.getImage() + " --- " + t.getOffset() + "/" + t.getLength() + " --- " + t.getType() + " --- " + t.getClass().getName());
-//        
-//        ILocationResolver locMap = cpp.getLocationMap();
-//        IASTImageLocation imgLoc = locMap.getImageLocation(t.getOffset(), t.getLength());
-//        if (imgLoc != null)
-//            System.out.println(imgLoc.getFileName() + " " + imgLoc.getNodeOffset() + "/" + imgLoc.getNodeLength() + " -- " + describeImageLocationKind(imgLoc.getLocationKind()));
-//            
-//        System.out.println(locMap.getUnpreprocessedSignature(imgLoc));
-//    }
-//
-//    private String describeImageLocationKind(int k)
-//    {
-//        switch (k)
-//        {
-//            case IASTImageLocation.REGULAR_CODE: return "REGULAR_CODE";
-//            case IASTImageLocation.MACRO_DEFINITION: return "MACRO_DEFINITION";
-//            case IASTImageLocation.ARGUMENT_TO_MACRO_EXPANSION: return "ARGUMENT_TO_MACRO_EXPANSION";
-//            default: return Integer.toString(k);
-//        }
-//    }
-//
-//    private CPreprocessor createCPP(String source)
-//    {
-//        return new CPreprocessor(new CodeReader(source.toCharArray()),
-//            new ScannerInfo(), ParserLanguage.C, new NullLogService(), 
-//            new GCCScannerExtensionConfiguration(), NullCodeReaderFactory.getInstance());
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/Activator.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/Activator.java
deleted file mode 100644
index 69486e1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/Activator.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends Plugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.photran.core.vpg.tests";
-
-	// The shared instance
-	private static Activator plugin;
-	
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-		plugin = this;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/BaseTestFramework.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/BaseTestFramework.java
deleted file mode 100644
index 5ee3917..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/BaseTestFramework.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Markus Schorn (Wind River Systems)
- *******************************************************************************/
-
-/*
- * Created on Oct 4, 2004
- */
-package org.eclipse.photran.refactoring.tests;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-import junit.framework.TestCase;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.dom.IPDOMManager;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.core.testplugin.CProjectHelper;
-import org.eclipse.cdt.core.testplugin.FileManager;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-
-/**
- * Copied and modified from org.eclipse.cdt.core.tests.BaseTestFramework
- * 
- * @author aniefer
- * @author Jeff Overbey - Modified so that every test case creates a new project
- *                        (hack to resolve weird file deletion problems in Windows)
- */
-abstract public class BaseTestFramework extends TestCase {
-    static protected NullProgressMonitor	monitor;
-    static protected IWorkspace 			workspace;
-    static protected IProject 				project;
-    static protected ICProject				cproject;
-    static protected FileManager 			fileManager;
-	static protected boolean				indexDisabled=false;
-	
-	static int n = 0;
-	
-	static void initProject() {
-		if (project != null) {
-			return;
-		}
-        if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
-			//(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
-			monitor = new NullProgressMonitor();
-			
-			workspace = ResourcesPlugin.getWorkspace();
-			
-	        try {
-	            cproject = CProjectHelper.createCCProject("PhotranTestProject" + (++n), "bin", IPDOMManager.ID_NO_INDEXER); //$NON-NLS-1$ //$NON-NLS-2$
-	        
-	            project = cproject.getProject();
-	            
-	            /*project.setSessionProperty(SourceIndexer.activationKey, Boolean.FALSE );
-	        	//Set the id of the source indexer extension point as a session property to allow
-	    		//index manager to instantiate it
-	    		project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);*/
-	    		
-	 
-	    		
-	        } catch ( CoreException e ) {
-	            /*boo*/
-	        }
-			if (project == null)
-				fail("Unable to create project"); //$NON-NLS-1$
-	
-			//Create file manager
-			fileManager = new FileManager();
-        }
-	}
-            
-    public BaseTestFramework()
-    {
-        super();
-    }
-    /**
-     * @param name
-     */
-    public BaseTestFramework(String name)
-    {
-        super(name);
-    }
-      
-    public void cleanupProject() throws Exception {
-        try{
-	        project.delete( true, false, monitor );
-	    } catch( Throwable e ){
-	        /*boo*/
-	    } finally {
-	    	project= null;
-	    }
-    }
-    
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-		initProject();
-	}
-
-	protected void tearDown() throws Exception {
-        if( project == null || !project.exists() )
-            return;
-        
-//        IResource [] members = project.members();
-//        for( int i = 0; i < members.length; i++ ){
-//            if( members[i].getName().equals( ".project" ) || members[i].getName().equals( ".cproject" ) ) //$NON-NLS-1$ //$NON-NLS-2$
-//                continue;
-//            if (members[i].getName().equals(".settings"))
-//            	continue;
-//            try{
-//                members[i].delete( false, monitor );
-//            } catch( Throwable e ){
-//                /*boo*/
-//            }
-//        }
-        
-        try {
-            project.delete(true, true, new NullProgressMonitor());
-        } catch( Throwable e ){
-            /* boo */
-            project.close(new NullProgressMonitor());
-            // To speed things up a bit and conserve memory...
-            PhotranVPG.getInstance().releaseAllASTs();
-            PhotranVPG.getDatabase().clearDatabase();
-        }
-        project = null;
-	}
-    protected IFile importFile(String fileName, String contents ) throws Exception{
-		//Obtain file handle
-		IFile file = project.getProject().getFile(fileName);
-		
-		InputStream stream = new ByteArrayInputStream( contents.getBytes() );
-		//Create file input stream
-		if( file.exists() )
-		    file.setContents( stream, false, false, monitor );
-		else
-			file.create( stream, false, monitor );
-		
-		fileManager.addFile(file);
-		
-		return file;
-	}
-
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/RefactoringTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/RefactoringTestCase.java
deleted file mode 100644
index a35d47f..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/RefactoringTestCase.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public abstract class RefactoringTestCase extends BaseTestFramework
-{
-    private static HashMap<String, ArrayList<Integer>> lineMaps = new HashMap<String, ArrayList<Integer>>();
-    
-    public RefactoringTestCase()
-    {
-    	if (!PhotranVPG.inTestingMode()) fail("WHEN RUNNING JUNIT TESTS, THE \"TESTING\" ENVIRONMENT VARIABLE MUST BE SET");
-    }
-    
-    protected IFile importFile(String srcDir, String filename) throws Exception
-    {
-        //project.getProject().getFile(filename).delete(true, new NullProgressMonitor());
-        IFile result = super.importFile(filename, readTestFile(srcDir, filename));
-        //project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        return result;
-    }
-
-    protected String readTestFile(String srcDir, String filename) throws IOException, URISyntaxException
-    {
-        ArrayList<Integer> lineMap = new ArrayList<Integer>(50);
-        lineMaps.put(filename, lineMap);
-        lineMap.add(0); // Offset of line 1
-        return readStream(lineMap, Activator.getDefault().getBundle().getResource(srcDir + "/" + filename).openStream());
-    }
-    
-    protected String readStream(ArrayList<Integer> lineMap, InputStream inputStream) throws IOException
-    {
-        StringBuffer sb = new StringBuffer(4096);
-        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
-        for (int offset = 0, ch = in.read(); ch >= 0; ch = in.read())
-        {
-            sb.append((char)ch);
-            offset++;
-            
-            if (ch == '\n' && lineMap != null)
-            {
-                //System.out.println("Line " + (lineMap.size()+1) + " starts at offset " + offset);
-                lineMap.add(offset);
-            }
-        }
-        in.close();
-        return sb.toString();
-    }
-
-    protected String readStream(InputStream inputStream) throws IOException
-    {
-        return readStream(null, inputStream);
-    }
-
-    protected String readWorkspaceFile(String filename) throws IOException, CoreException
-    {
-        return readStream(project.getFile(filename).getContents());
-    }
-
-    /**
-     * @param filename
-     * @param line line number, starting at 1
-     * @param col column number, starting at 1
-     */
-    protected int getLineColOffset(String filename, LineCol lineCol)
-    {
-        return lineMaps.get(filename).get(lineCol.getLine()-1) + (lineCol.getCol()-1);
-    }
-    
-    public void testLevenshtein()
-    {
-        assertEquals(0, levenshteinDistance("", ""));
-        assertEquals(0, levenshteinDistance("kitten", "kitten"));
-        assertEquals(6, levenshteinDistance("", "kitten"));
-        assertEquals(6, levenshteinDistance("kitten", ""));
-        assertEquals(3, levenshteinDistance("kitten", "sitting"));
-        assertEquals(3, levenshteinDistance("kitten", "kit"));
-        assertEquals(1, levenshteinDistance("kitten", "kittten"));
-        assertEquals(2, levenshteinDistance("kitten", "kien"));
-    }
-    
-    /**
-     * Computes the Levenshtein distance between two strings.
-     * 
-     * Based on pseudocode from http://en.wikipedia.org/wiki/Levenshtein_distance
-     * 
-     * @return the Levenshtein distance between <code>s</code> and <code>t</code>
-     */
-    protected int levenshteinDistance(String s, String t)
-    {
-        int m = s.length(), n = t.length();
-        
-        int[][] d = new int[m+1][n+1];
-      
-        for (int i = 1; i <= m; i++)
-            d[i][0] = i;
-        for (int j = 1; j <= n; j++)
-            d[0][j] = j;
-      
-        for (int i = 1; i <= m; i++)
-        {
-            for (int j = 1; j <= n; j++)
-            {
-                int cost = s.charAt(i-1) == t.charAt(j-1) ? 0 : 1;
-                d[i][j] = min(d[i-1][j] + 1,       // deletion
-                              d[i][j-1] + 1,       // insertion
-                              d[i-1][j-1] + cost); // substitution
-            }
-        }
-      
-        return d[m][n];
-    }
-    
-    private int min(int a, int b, int c)
-    {
-        return Math.min(Math.min(a, b), c);
-    }
-    
-    protected void assertLevDist(String errorMessage, int expected, String s, String t)
-    {
-        int actual = levenshteinDistance(s, t);
-        
-        if (actual != expected)
-        {
-            // Use assertEquals so that JUnit will pop up a comparison viewer
-            assertEquals("Unexpected Levenshtein distance " + actual + " (expected " + expected + ") " + errorMessage,
-                         s,
-                         t);
-        }
-    }
-    
-    /**
-     * If the environment variables COMPILER and EXECUTABLE are set during the JUnit run,
-     * compiles and runs the Fortran program being refactored and returns the output of
-     * the compilation and execution.  Otherwise, returns the empty string.
-     * <p>
-     * (This is intended to allow developers creating refactorings to test their refactorings
-     * by actually compiling the code, while not forcing other developers to do so, since
-     * it can be time-consuming.  Tests should NOT assume that a compiler is available.)
-     * <p>
-     * This will compile the file(s) that are currently being refactored (i.e., the files
-     * imported into the test project using {@link #importFile(String, String)}) into a
-     * single executable, and then run that executable.  This can be invoked before and
-     * after a refactoring is performed to make sure runtime behavior is actually preserved
-     * for the test program.
-     * <p>
-     * COMPILER must be set to the path of your Fortran compiler, e.g.,
-     * /usr/local/gfortran/bin/gfortran
-     * <p>
-     * EXECUTABLE gives a path for the generated executable, e.g.,
-     * /Users/joverbey/fortran-test-program.exe
-     * <p>
-     * The actual command line that is invoked is printed to standard output.
-     * <p>
-     * NOTE: Occasionally, the last part of the output from the Fortran program may seem to
-     * be missing.  (This may be a gfortran-specific problem.)  You should include a
-     * statement to manually flush the output to ensure that your test cases always pass.
-     * In gfortran, you can "CALL FLUSH" to invoke the (proprietary) flush intrinsic; or
-     * there is also a FLUSH statement in Fortran 2003.
-     * 
-     * @return the output from the compiler and executable
-     * @throws Exception
-     */
-    protected String compileAndRunFortranProgram() throws Exception
-    {
-        String compiler = System.getenv("COMPILER");
-        if (compiler == null) return "";
-        
-        String exe = System.getenv("EXECUTABLE");
-        if (exe == null) return "";
-        
-        ArrayList<String> args = new ArrayList<String>(8);
-        args.add(compiler);
-        args.add("-o");
-        args.add(exe);
-        for (IResource res : project.members())
-            if (res instanceof IFile && res.getFileExtension().startsWith("f"))
-                args.add(res.getName());
-        
-        System.out.println(toString(args));
-        
-        ProcessBuilder builder = new ProcessBuilder(args);
-        builder.directory(project.getLocation().toFile());
-        builder.redirectErrorStream(true);
-        Process process = builder.start();
-        ConcurrentReader output = new ConcurrentReader(process.getInputStream());
-        synchronized (output)
-        {
-            output.start();
-            int exitCode = process.waitFor();
-            if (exitCode != 0)
-                fail("Compilation exited abnormally with exit code " + exitCode + "\n" + output.toString());
-            waitFor(output);
-        }
-        
-        builder = new ProcessBuilder(exe);
-        builder.directory(project.getLocation().toFile());
-        builder.redirectErrorStream(true);
-        process = builder.start();
-        ConcurrentReader output2 = new ConcurrentReader(process.getInputStream());
-        synchronized (output2)
-        {
-            output2.start();
-            int exitCode = process.waitFor();
-            if (exitCode != 0)
-                fail("Compilation succeeded, but execution exited abnormally with exit code " + exitCode + "\n" + output.toString() + "\n" + output2.toString());
-            waitFor(output2);
-        }
-        
-        return output.toString() + "\n" + output2.toString();
-    }
-
-    private void waitFor(ConcurrentReader output)
-    {
-        try
-        {
-            output.wait();
-        }
-        catch (InterruptedException e)
-        {
-        }
-    }
-
-    private String toString(ArrayList<String> args)
-    {
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < args.size(); i++)
-            sb.append((i == 0 ? "" : " ") + args.get(i));
-        return sb.toString();
-    }
-    
-    private static class ConcurrentReader extends Thread
-    {
-        private InputStream stdout;
-        private StringBuilder sb;
-        
-        public ConcurrentReader(InputStream stdout)
-        {
-            this.stdout = stdout;
-            this.sb = new StringBuilder();
-        }
-        
-        @Override public void run()
-        {
-            BufferedReader in = new BufferedReader(new InputStreamReader(stdout));
-            try
-            {
-                for (String line = in.readLine(); line != null; line = in.readLine())
-                {
-                    sb.append(line);
-                    sb.append('\n');
-                }
-                done();
-            }
-            catch (IOException e)
-            {
-                sb.append(e.toString());
-            }
-            finally
-            {
-                try
-                {
-                    in.close();
-                }
-                catch (IOException e)
-                {
-                    sb.append(e.toString());
-                }
-            }
-        }
-        
-        private synchronized void done()
-        {
-            notifyAll();
-        }
-        
-        @Override public String toString()
-        {
-            return sb.toString();
-        }
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableFailTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableFailTestCase.java
deleted file mode 100644
index a2c7772..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableFailTestCase.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.encapsulatevariable;
-
-import java.util.ArrayList;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.util.LineCol;
-import org.eclipse.photran.internal.core.refactoring.EncapsulateVariableRefactoring;
-
-/**
- * 
- * @author Tim
- */
-public class EncapsulateVariableFailTestCase extends EncapsulateVariableTestCase
-{
-    private ArrayList<String> myFailFilenames;
-    private String failSelectionFile;
-    private ITextSelection failSelection;
-    private boolean isFatal;
-    
-    public EncapsulateVariableFailTestCase(){;}
-    
-    public EncapsulateVariableFailTestCase(ArrayList<String> fNames, String selectionfName, boolean isFatal, Object ignore)
-    {
-        super(fNames, selectionfName, ignore);
-        myFailFilenames = fNames;
-        failSelectionFile = selectionfName;
-        this.isFatal = isFatal;
-    }
-    
-    @Override
-    protected void setSelection(String fContent, String filename)
-    {        
-        int startOffset = fContent.indexOf("!") + 1;
-        int endOffset = fContent.indexOf(System.getProperty("line.separator"), startOffset);
-        if(endOffset <= 0)
-            endOffset = fContent.indexOf("\n", startOffset);
-        
-        String infoString = fContent.substring(startOffset, endOffset);
-        String [] res = infoString.split(",");
-        
-        if(res.length < 3 || res.length > 3)
-            throw new Error("Malformed test case");
-        
-        int line = Integer.parseInt(res[0]);
-        int col = Integer.parseInt(res[1]);
-        int length = Integer.parseInt(res[2]);
-        
-        LineCol lineCol = new LineCol(line, col);
-        
-        int actualOffset = getLineColOffset(filename, lineCol);
-        
-        failSelection = new TextSelection(actualOffset, length);
-    }
-    
-    @Override
-    protected void doRefactoring() throws Exception
-    {
-        IFile selFile = getFileAndSetSelection(DIR, failSelectionFile);
-        
-        for(String fName : myFailFilenames)
-        {
-            getFile(DIR, fName);
-        }
-
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        String before = compileAndRunFortranProgram();
-
-        EncapsulateVariableRefactoring refactoring = new EncapsulateVariableRefactoring(selFile, failSelection);
-        
-        String description = "Attempt to encapsulate variables in " + failSelectionFile;
-       
-        RefactoringStatus status = refactoring.checkAllConditions(new NullProgressMonitor());
-        if(isFatal)
-            assertTrue(status.hasFatalError());
-        else
-            assertTrue(status.hasError());
-    }
-    
-    public void test() throws Exception
-    {
-        if(myFailFilenames == null) 
-            return;
-        
-        doRefactoring();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestCase.java
deleted file mode 100644
index bc26cc9..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestCase.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.encapsulatevariable;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.util.LineCol;
-import org.eclipse.photran.internal.core.refactoring.EncapsulateVariableRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * 
- * @author Tim
- */
-public class EncapsulateVariableTestCase extends RefactoringTestCase
-{
-    private ArrayList<String> myFilenames;
-    private String selectionFile;
-    public static final String DIR = "encapsulate-variable-test-code";
-    private ITextSelection selection;
-    private NullProgressMonitor pm = new NullProgressMonitor();
-    
-    public EncapsulateVariableTestCase(){;}
-    
-    public EncapsulateVariableTestCase(ArrayList<String> fNames, String selectionfName, Object ignore)
-    {
-        myFilenames = fNames;
-        selectionFile = selectionfName;
-        this.setName("test");
-    }
-    
-    protected void doRefactoring() throws Exception
-    {
-        IFile selFile = getFileAndSetSelection(DIR, selectionFile);
-        
-        for(String fName : myFilenames)
-        {
-            getFile(DIR, fName);
-        }
-
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        String before = compileAndRunFortranProgram();
-
-        EncapsulateVariableRefactoring refactoring = new EncapsulateVariableRefactoring(selFile, selection);
-        
-        String description = "Attempt to encapsulate variables in " + selectionFile;
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, pm);
-        
-        String after = compileAndRunFortranProgram();
-        System.out.println(after);
-        assertEquals(before, after);
-    }
-
-    protected IFile getFile(String dir, String fName) throws Exception
-    {
-        String text = super.readTestFile(DIR, fName);
-        return importFile(dir, fName);
-    }
-    
-    protected IFile getFileAndSetSelection(String dir, String fName) throws Exception
-    {
-        String text = super.readTestFile(DIR, fName);
-        setSelection(text, fName);
-        return importFile(dir, fName);
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-    
-    protected void setSelection(String fContent, String filename)
-    {        
-        int startOffset = fContent.indexOf("!") + 1;
-        int endOffset = fContent.indexOf(System.getProperty("line.separator"), startOffset);
-        if(endOffset <= 0)
-            endOffset = fContent.indexOf("\n", startOffset);
-        
-        String infoString = fContent.substring(startOffset, endOffset);
-        String [] res = infoString.split(",");
-        
-        if(res.length < 3 || res.length > 3)
-            throw new Error("Malformed test case");
-        
-        int line = Integer.parseInt(res[0]);
-        int col = Integer.parseInt(res[1]);
-        int length = Integer.parseInt(res[2]);
-        
-        LineCol lineCol = new LineCol(line, col);
-        
-        int actualOffset = getLineColOffset(filename, lineCol);
-        
-        selection = new TextSelection(actualOffset, length);
-    }
-    
-    /*protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }*/
-    
-    public void test() throws Exception
-    {
-        if (myFilenames == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        String expected = readTestFile(selectionFile + ".result");
-        String actual = readWorkspaceFile(selectionFile);
-       
-        assertEquals(sanitize(expected), sanitize(actual));
-        
-        for(String fName : myFilenames)
-        {
-            String loopExpected = readTestFile(fName + ".result");
-            String loopActual = readWorkspaceFile(fName);
-            assertEquals(sanitize(loopExpected), sanitize(loopActual));
-        }
-    }
-    
-    public String sanitize(String dirtyString)
-    {
-        return dirtyString.replaceAll("\r", "");
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestSuite.java
deleted file mode 100644
index 60a0bb0..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/encapsulatevariable/EncapsulateVariableTestSuite.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.encapsulatevariable;
-
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * 
- * @author Tim
- */
-public class EncapsulateVariableTestSuite extends TestSuite
-{
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite();
-        ArrayList<String> lst1 = new ArrayList<String>();
-        lst1.add("module1.f90");
-        
-        ArrayList<String> emptyList = new ArrayList<String>();
-
-        //Pass pass
-        suite.addTest(getSuiteFor(lst1, "test-simple01.f90"));
-        suite.addTest(getSuiteFor(emptyList, "test-encap-01a-basic-integer.f90"));
-        suite.addTest(getSuiteFor(emptyList, "test-encap-01b-basic-real.f90"));
-        suite.addTest(getSuiteFor(emptyList, "test-encap-01c-basic-dt.f90"));
-        suite.addTest(getSuiteFor(emptyList, "test-encap-02-contains.f90"));
-        suite.addTest(getSuiteFor(emptyList, "test-encap-03-expr.f90"));
-        
-        //Fail pass
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-04-nosetter-parameter.f90"));
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-06a-fail-array.f90"));
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-06c-fail-allocatable1.f90"));
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-06d-fail-allocatable2.f90"));
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-06b-fail-pointer.f90"));
-        suite.addTest(getFatalFailSuite(emptyList, "test-encap-06e-fail-target.f90"));
-        suite.addTest(getNonFatalFailSuite(emptyList, "test-encap-05a-fail-conflict.f90"));
-        
-        
-        return suite;
-    }
-    
-    public static TestSuite getSuiteFor(ArrayList<String> fNames, String selectionFile)
-    {
-        TestSuite subSuite = new TestSuite("Encapsulate variable in " + selectionFile);
-        subSuite.addTest(new EncapsulateVariableTestCase(fNames, selectionFile, null));
-        return subSuite;
-    }
-    
-    public static TestSuite getFatalFailSuite(ArrayList<String> fNames, String selectionFile)
-    {
-        TestSuite subSuite = new TestSuite("Encapsulate variable in " + selectionFile);
-        subSuite.addTest(new EncapsulateVariableFailTestCase(fNames, selectionFile, true, null));
-        return subSuite;
-    }
-    
-    public static TestSuite getNonFatalFailSuite(ArrayList<String> fNames, String selectionFile)
-    {
-        TestSuite subSuite = new TestSuite("Encapsulate variable in " + selectionFile);
-        subSuite.addTest(new EncapsulateVariableFailTestCase(fNames, selectionFile, false, null));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestCase.java
deleted file mode 100644
index f244f92..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestCase.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.extractprocedure;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.internal.core.refactoring.ExtractProcedureRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-public class ExtractProcTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "extract-proc-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String filename = null;
-    protected ITextSelection selectionToExtract = null;
-
-    public ExtractProcTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-
-    public ExtractProcTestCase(String filename, Object ignored) // avoid JUnit constructor
-    {
-        this.filename = filename;
-        this.setName("test");
-    }
-
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempt to extract procedure from " + filename;
-        
-        ExtractProcedureRefactoring refactoring = createRefactoring(filename);
-
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        String before = compileAndRunFortranProgram();
-
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        refactoring.setName("new_procedure");
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        
-        String after = compileAndRunFortranProgram();
-        System.out.println(after);
-        assertEquals(before, after);
-    }
-
-    private ExtractProcedureRefactoring createRefactoring(final String filename) throws Exception
-    {
-        final IFile thisFile = importFile(DIR, filename);
-        return new ExtractProcedureRefactoring(thisFile, selectionToExtract);
-    }
-
-    @Override protected String readTestFile(String srcDir, String filename) throws IOException, URISyntaxException
-    {
-        String result = super.readTestFile(srcDir, filename);
-        
-        int startOffset = result.lastIndexOf('\n', result.indexOf("!<<<<<START")) + 1;
-        int endOffset = result.indexOf("!<<<<<END");
-        if (startOffset <= 0 || endOffset < 0 || endOffset <= startOffset)
-            throw new Error("Malformed test case");
-        
-        selectionToExtract = new TextSelection(startOffset, endOffset-startOffset);
-        
-        return result;
-    }
-
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    /**
-     * Given an array with all of the positions of identifiers that should be renamed together, try applying the Rename refactoring to
-     * each, and make sure all the others change with it. 
-     */
-    public void test() throws Exception
-    {
-        if (filename == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        assertEquals(
-            readTestFile(filename + ".result").replaceAll("\\r", ""), // expected result
-            readWorkspaceFile(filename).replaceAll("\\r", ""));       // actual refactored file
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestSuite.java
deleted file mode 100644
index 590ce69..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/extractprocedure/ExtractProcTestSuite.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.extractprocedure;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class ExtractProcTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("test01-simple.f90"));
-        suite.addTest(getSuiteFor("test02-locals.f90"));
-        suite.addTest(getSuiteFor("test03-locals2.f90"));
-        suite.addTest(getSuiteFor("test04-in-loop.f90"));
-        suite.addTest(getSuiteFor("test05-parameter.f90"));
-        suite.addTest(getSuiteFor("test06-parameter.f90"));
-        suite.addTest(getSuiteFor("test07-attribs.f90"));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Extracting Procedures from " + baseFilename);
-        subSuite.addTest(new ExtractProcTestCase(baseFilename, null));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestCase.java
deleted file mode 100644
index e8c0366..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestCase.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.infrastructure;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.photran.core.IFortranAST;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.Reindenter;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.SourcePrinter;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.Reindenter.Strategy;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-public class ReindenterTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "reindenter-test-code";
-    
-    protected String filename = null;
-    protected Strategy strategy;
-    private int fromLine;
-    private int thruLine;
-
-    public ReindenterTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-
-    public ReindenterTestCase(String filename, Strategy strategy)
-    {
-        this.filename = filename;
-        this.strategy = strategy;
-        this.setName("test");
-    }
-
-    public void test() throws Exception
-    {
-        if (filename == null) return; // when JUnit invokes this outside a test suite
-
-        final IFile thisFile = importFile(DIR, filename);
-        
-        IFortranAST ast = PhotranVPG.getInstance().acquireTransientAST(thisFile);
-        assertNotNull(ast);
-        
-        Reindenter.reindent(fromLine, thruLine, ast, strategy);
-        
-        thisFile.setContents(
-            new ByteArrayInputStream(SourcePrinter.getSourceCodeFromAST(ast).getBytes()),
-            true,
-            false,
-            new NullProgressMonitor());
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        
-        assertEquals(
-            readTestFile(filename + ".result"), // expected result
-            readWorkspaceFile(filename));       // actual refactored file
-    }
-
-    @Override protected String readTestFile(String srcDir, String filename) throws IOException, URISyntaxException
-    {
-        String result = super.readTestFile(srcDir, filename);
-        
-        int startOffset = result.lastIndexOf('\n', result.indexOf("!<<<<<START")) + 1;
-        int endOffset = result.indexOf("!<<<<<END");
-        if (startOffset < 0 || endOffset < 0 || endOffset <= startOffset)
-            throw new Error("Malformed test case");
-        
-        determineLinesFromOffsets(result, startOffset, endOffset);
-        
-        return result;
-    }
-
-    private void determineLinesFromOffsets(String result, int startOffset, int endOffset)
-    {
-        int line = 1;
-        
-        for (int i = 0; i < result.length(); i++)
-        {
-            if (i == startOffset)
-                this.fromLine = line;
-            
-            if (i == endOffset)
-                this.thruLine = line;
-                
-            if (result.charAt(i) == '\n')
-                line++;
-        }
-    }
-
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestSuite.java
deleted file mode 100644
index d88fc9d..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/ReindenterTestSuite.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.infrastructure;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.internal.core.refactoring.infrastructure.Reindenter.Strategy;
-
-public class ReindenterTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("01-simple.f90", Strategy.SHIFT_ENTIRE_BLOCK));
-        suite.addTest(getSuiteFor("02-end-after.f90", Strategy.SHIFT_ENTIRE_BLOCK));
-        suite.addTest(getSuiteFor("03-blank-after.f90", Strategy.SHIFT_ENTIRE_BLOCK));
-        suite.addTest(getSuiteFor("04-guess-indent.f90", Strategy.SHIFT_ENTIRE_BLOCK));
-        suite.addTest(getSuiteFor("05-eachline-test.f90", Strategy.REINDENT_EACH_LINE));
-        //suite.addTest(getSuiteFor("0.f90", Strategy));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename, Strategy strategy)
-    {
-        TestSuite subSuite = new TestSuite("Reindenting " + baseFilename);
-        subSuite.addTest(new ReindenterTestCase(baseFilename, strategy));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestCase.java
deleted file mode 100644
index 6f209ce..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestCase.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.interchangeloops;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.internal.core.refactoring.ExtractProcedureRefactoring;
-import org.eclipse.photran.internal.core.refactoring.InterchangeLoopsRefactoring;
-import org.eclipse.photran.internal.core.refactoring.IntroImplicitNoneRefactoring;
-import org.eclipse.photran.internal.core.refactoring.RenameRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * 
- * @author Tim
- */
-public class InterchangeLoopsTestCase extends RefactoringTestCase
-{
-    private String myFilename = null;
-    private NullProgressMonitor pm = new NullProgressMonitor();
-    private ITextSelection selection = null;
-    private static final String DIR = "interchange-loops-test-code";
-    
-    public InterchangeLoopsTestCase(){;}
-    
-    public InterchangeLoopsTestCase(String filename, Object ignore)
-    {
-        this.myFilename = filename;
-        this.setName("test");
-    }
-    
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempt to interchange loops in " + myFilename;
-            
-        InterchangeLoopsRefactoring refactoring = createRefactoring(myFilename);
-        
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-    }
-    
-    protected InterchangeLoopsRefactoring createRefactoring(String filename) throws Exception
-    {
-        final IFile thisFile = importFile(DIR, filename);
-        return new InterchangeLoopsRefactoring(thisFile, selection);
-    }
-    
-    @Override protected String readTestFile(String srcDir, String filename) throws IOException, URISyntaxException
-    {
-        String result = super.readTestFile(srcDir, filename);
-        
-        int startOffset = result.lastIndexOf('\n', result.indexOf("!<<<<<START")) + 1;
-        int endOffset = result.indexOf("!<<<<<END");
-        if (startOffset <= 0 || endOffset < 0 || endOffset <= startOffset)
-            throw new Error("Malformed test case");
-        
-        selection = new TextSelection(startOffset, endOffset-startOffset);
-        
-        return result;
-    }
-
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-    
-    public void test() throws Exception
-    {
-        if (myFilename == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        assertEquals(
-            readTestFile(myFilename + ".result").replaceAll("\\r", ""), // expected result
-            readWorkspaceFile(myFilename).replaceAll("\\r", ""));       // actual refactored file
-    }
-    
-    public static class InterchangeLoopsFailureTest extends InterchangeLoopsTestCase
-    {
-        private static String failFilename;
-        
-        public InterchangeLoopsFailureTest(){;}
-        
-        public InterchangeLoopsFailureTest(String filename, Object ignore)
-        {
-            super(filename, ignore);
-            failFilename = filename;
-        }
-        
-        @Override
-        protected void doRefactoring() throws Exception
-        {
-            String description = "Attempt to interchange loops in " + failFilename;
-                
-            InterchangeLoopsRefactoring refactoring = createRefactoring(failFilename);
-            
-            RefactoringStatus status = refactoring.checkInitialConditions(new NullProgressMonitor());
-            assertTrue(status.hasFatalError());
-        }
-
-        @Override
-        public void test() throws Exception
-        {
-            doRefactoring();
-        }   
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestSuite.java
deleted file mode 100644
index a1afbe6..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/interchangeloops/InterchangeLoopsTestSuite.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.interchangeloops;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * 
- * @author Tim
- */
-public class InterchangeLoopsTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("test01-simple.f90"));
-        suite.addTest(getSuiteFor("test02-simple.f90"));
-        suite.addTest(getFailSuiteFor("test-single-loop.f90"));
-        suite.addTest(getSuiteFor("test-triple-loop.f90"));
-        suite.addTest(getSuiteFor("test-triple-loop2.f90"));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Interchanging loops in " + baseFilename);
-        subSuite.addTest(new InterchangeLoopsTestCase(baseFilename, null));
-        return subSuite;
-    }
-    
-    private static TestSuite getFailSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Interchanging loops in " + baseFilename);
-        subSuite.addTest(new InterchangeLoopsTestCase.InterchangeLoopsFailureTest(baseFilename, null));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestCase.java
deleted file mode 100644
index f5702ed..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestCase.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.introimplicitnone;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.util.LineCol;
-import org.eclipse.photran.internal.core.refactoring.IntroImplicitNoneRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-public class IntroImplicitTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "intro-implicit-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String filename;
-    protected LineCol lineCol;
-
-    public IntroImplicitTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-
-    public IntroImplicitTestCase(String filename, LineCol lineCol)
-    {
-        this.filename = filename;
-        this.lineCol = lineCol;
-        this.setName("test");
-    }
-
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempt to introduce implicit none at " + lineCol;
-            
-        IntroImplicitNoneRefactoring refactoring = createRefactoring(filename, lineCol);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        String before = compileAndRunFortranProgram();
-
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        
-        String after = compileAndRunFortranProgram();
-        System.out.println(after);
-        assertEquals(before, after);
-    }
-
-    private IntroImplicitNoneRefactoring createRefactoring(final String filename, final LineCol lineCol) throws Exception
-    {
-        final IFile thisFile = importFile(DIR, filename);
-        
-        //project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); // Runs in separate thread... grrr...
-        ArrayList<IFile> files = new ArrayList<IFile>();
-        files.add(thisFile);
-        return new IntroImplicitNoneRefactoring(files);//thisFile, new TextSelection(getLineColOffset(filename, lineCol), 0));
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    /**
-     * Given an array with all of the positions of identifiers that should be renamed together, try applying the Rename refactoring to
-     * each, and make sure all the others change with it. 
-     */
-    public void test() throws Exception
-    {
-        if (filename == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        assertEquals(
-            readTestFile(filename + ".result"), // expected result
-            readWorkspaceFile(filename));       // actual refactored file
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java
deleted file mode 100644
index d538e36..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.introimplicitnone;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class IntroImplicitTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("bigexpression.f90"));
-        suite.addTest(getSuiteFor("fortran.f90"));
-        suite.addTest(getSuiteFor("crazyimplicits.f90"));
-        suite.addTest(getSuiteFor("crazyimplicits.f90", "fortran.f90"));
-        suite.addTest(getSuiteFor("crazyimplicits.f90", "fortran.f90", "bigexpression.f90"));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Introducing Implicit None in " + baseFilename);
-        subSuite.addTest(new IntroImplicitTestCase(baseFilename, new LineCol(1, 9)));
-        return subSuite;
-    }
-    
-    private static TestSuite getSuiteFor(String... filenames)
-    {
-        TestSuite subSuite = new TestSuite("Introducing Implicit None in selected files");
-        for(String filename : filenames)
-        {
-            subSuite.addTest(new IntroImplicitTestCase(filename, new LineCol(1, 9)));
-        }
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestCase.java
deleted file mode 100644
index 0e2c841..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestCase.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.keyword;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.internal.core.refactoring.KeywordCaseRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * Test cases for Keyword Case Refactoring
- * @author Kurt Hendle
- */
-public class KeywordCaseTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "keyword-case-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String filename;
-    protected boolean lowerCase;
-    
-    public KeywordCaseTestCase() {;} // when JUnit invokes a subclass outside a test suite
-    
-    public KeywordCaseTestCase(String filename, boolean lowerCase)
-    {
-        this.filename = filename;
-        this.lowerCase = lowerCase;
-        this.setName("test");
-    }
-    
-    /** Borrowed from IntroImplicitTestCase.java */
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempt to upcase keywords in " + filename;
-        
-        KeywordCaseRefactoring refactoring = createRefactoring(filename);
-        refactoring.setLowerCase(lowerCase);
-        
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-    }
-    
-    private KeywordCaseRefactoring createRefactoring(final String filename) throws Exception
-    {
-        final IFile thisFile = importFile(DIR, filename);
-        
-        ArrayList<IFile> files = new ArrayList<IFile>();
-        files.add(thisFile);
-        
-        return new KeywordCaseRefactoring(files);
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    /** 
-     * Borrowed from IntroImplicitTestCase.java *
-     * 
-     * Given an array with all of the positions of identifiers that should be renamed together, try applying the Rename refactoring to
-     * each, and make sure all the others change with it. 
-     */
-    public void test() throws Exception
-    {
-        if (filename == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        assertEquals(
-            readTestFile(filename + ".result").replaceAll("\\r", ""), // expected result
-            readWorkspaceFile(filename).replaceAll("\\r", ""));       // actual refactored file
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestSuite.java
deleted file mode 100644
index 1525ce4..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/keyword/KeywordCaseTestSuite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.keyword;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test Suite for Keyword Case Refactoring
- * @author Kurt Hendle
- */
-public class KeywordCaseTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        
-        suite.addTest(getSuiteFor("01-simple.f90"));
-        suite.addTest(getSuiteFor("01-simple.f90", "02-end-after.f90"));
-        
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        TestSuite subSuite = new TestSuite("Upcasing all keywords in " + baseFilename);
-        subSuite.addTest(new KeywordCaseTestCase(baseFilename, false));
-        return subSuite;
-    }
-    
-    private static TestSuite getSuiteFor(String... filenames)
-    {
-        TestSuite subSuite = new TestSuite("Upcasing all keywords in selected files");
-        for(String filename : filenames)
-        {
-            subSuite.addTest(new KeywordCaseTestCase(filename, false));
-        }
-        return subSuite;
-    }
-}
-
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestCase.java
deleted file mode 100644
index a6f2ae1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestCase.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.movesavedtocommonblock;
-
-/**
- * 
- * @author Stas Negara
- */
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.util.LineCol;
-import org.eclipse.photran.internal.core.refactoring.MoveSavedToCommonBlockRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-public class MoveSavedToCommonBlockTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "move-saved-to-common-block-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String filename;
-    protected LineCol lineCol;
-
-    public MoveSavedToCommonBlockTestCase() {}  // when JUnit invokes a subclass outside a test suite
-
-    public MoveSavedToCommonBlockTestCase(String filename, LineCol lineCol)
-    {
-        this.filename = filename;
-        this.lineCol = lineCol;
-        this.setName("test");
-    }
-
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempt to apply MoveSavedToCommonBlockRefactoring at " + lineCol;
-            
-        MoveSavedToCommonBlockRefactoring moveSavedToCommonBlockRefactoring = createRefactoring(filename, lineCol);
-        
-        RefactoringStatus status = moveSavedToCommonBlockRefactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        status = moveSavedToCommonBlockRefactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = moveSavedToCommonBlockRefactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-    }
-
-    private MoveSavedToCommonBlockRefactoring createRefactoring(final String filename, final LineCol lineCol) throws Exception
-    {
-        final IFile thisFile = importFile(DIR, filename);
-        
-        return new MoveSavedToCommonBlockRefactoring(thisFile, new TextSelection(getLineColOffset(filename, lineCol), 0));
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    public void test() throws Exception
-    {
-        if (filename == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        assertEquals(
-            readTestFile(filename + ".result"), // expected result
-            readWorkspaceFile(filename));       // actual refactored file
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestSuite.java
deleted file mode 100644
index 4c808e3..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/movesavedtocommonblock/MoveSavedToCommonBlockTestSuite.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.movesavedtocommonblock;
-
-/**
- * 
- * @author Stas Negara
- */
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class MoveSavedToCommonBlockTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        suite.addTest(getSuiteFor("test1.f90", new LineCol(29, 10)));
-        suite.addTest(getSuiteFor("test2.f90", new LineCol(65, 10)));
-        return suite;
-    }
-    
-    private static TestSuite getSuiteFor(String baseFilename, LineCol lineCol)
-    {
-        TestSuite subSuite = new TestSuite("Move Saved To Common Block in file " + baseFilename);
-        subSuite.addTest(new MoveSavedToCommonBlockTestCase(baseFilename, lineCol));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename1.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename1.java
deleted file mode 100644
index 70b384b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename1.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename1 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME1.F90, AND
-    // GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String filename = "rename1.f90";
-    
-    private Ident intInMain = var(filename, "int", new LineCol[] { lc(11,10), lc(17,16), lc(23,20) });
-    private Ident subInMain = var(filename, "sub", new LineCol[] { lc(24,16), lc(25,20) });
-    
-    private Ident[] mainVars = new Ident[] {
-        var(filename, "two", new LineCol[] { lc(2,27), lc(7,40), lc(9,23) }),
-        var(filename, "three", new LineCol[] { lc(3,27), lc(4,23), lc(5,13), lc(6,15), lc(7,33), lc(7,66), lc(9,28) }),
-        var(filename, "a", new LineCol[] { lc(4,16), lc(9,14) }),
-        var(filename, "b", new LineCol[] { lc(4,19), lc(9,17) }),
-        var(filename, "not_shadowed", new LineCol[] { lc(5,23), lc(9,35), lc(21,16) }),
-        var(filename, "c", new LineCol[] { lc(6,25), lc(9,20) }),
-        var(filename, "shadow_this_1", new LineCol[] { lc(7,16), lc(9,49) }),
-        var(filename, "shadow_this_2", new LineCol[] { lc(7,46), lc(9,64) }),
-        var(filename, "implicit", new LineCol[] { lc(8,5), lc(9,79), lc(21,64) }),
-        intInMain
-    };
-    
-    private Ident shadowThis1IntShadow = var(filename, "shadow_this_1", new LineCol[] { lc(18,18), lc(21,30) });
-    private Ident shadowThis2IntShadow = var(filename, "shadow_this_2", new LineCol[] { lc(19,18), lc(21,45) });
-    
-    private Ident main = var(filename, "Main", new LineCol[] { lc(1,9), lc(26,13) });
-    private Ident ext = var(filename, "ext", new LineCol[] { lc(12,10), lc(22,12), lc(27,12), lc(33,16) });
-    
-    private Ident twoInExt = var(filename, "two", new LineCol[] { lc(28,14), lc(31,18) });
-    
-    private Ident intContained = var(filename, "int", new LineCol[] { lc(30,16), lc(32,20) });
-    
-    private Ident[] otherVars = new Ident[] { shadowThis1IntShadow, shadowThis2IntShadow, main, ext, twoInExt, intContained };
-    
-    private Ident intrinsic = var(filename, "selected_real_kind", new LineCol[] { lc(3,35) });
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename1();
-    }
-    
-    public Rename1() throws Exception
-    {
-        addSuccessTests();
-        addFailNotAnIdentifier();
-        addFailIntrinsicProcedure();
-        addFailConflictInSameScope();
-        addFailConflictInReference();
-    }
-    
-    public void addSuccessTests()
-    {
-        startTests("Renaming local variables in main program");
-        for (Ident v : mainVars)
-        {
-            addSuccessTests(v, v.getName() + v.getName());
-            addSuccessTests(v, "z");
-            addSuccessTests(v, "if");
-        }
-        endTests();
-        
-        startTests("Renaming variables outside main program");
-        for (Ident v : otherVars)
-        {
-            addSuccessTests(v, v.getName() + v.getName());
-            addSuccessTests(v, "z");
-            addSuccessTests(v, "if");
-        }
-        endTests();
-    }
-
-    public void addFailNotAnIdentifier() throws Exception
-    {
-        startTests("Check: Not an identifier");
-        for (Ident v : mainVars)
-        {
-            addPreconditionTests(v, "");
-            addPreconditionTests(v, "\u0080"); // Euro symbol
-            addPreconditionTests(v, "3");
-            addPreconditionTests(v, "hello world");
-            addPreconditionTests(v, "\"hello world\"");
-        }
-        endTests();
-    }
-    
-    public void addFailIntrinsicProcedure() throws Exception
-    {
-        startTests("Check: Cannot rename intrinsic procedures");
-        addPreconditionTests(intrinsic, "new_name");
-        endTests();
-    }
-    
-    public void addFailConflictInSameScope() throws Exception
-    {
-        startTests("Check: Local variable name conflicts in local scope (main program)");
-        for (int i = 0; i < mainVars.length; i++)
-            addPreconditionTests(mainVars[i], mainVars[Math.max(i-1, 0)].getName());
-        endTests();
-
-        startTests("Check: Local variable name conflicts with capitalization changed");
-        for (int i = 0; i < mainVars.length; i++)
-            addPreconditionTests(mainVars[i], mainVars[Math.max(i-1, 0)].getName().toUpperCase());
-        endTests();
-    }
-    
-    public void addFailConflictInReference() throws Exception
-    {
-        startTests("Check: Conflicts outside local scope");
-        addPreconditionTests(main, "int"); // FIXME: Bug -- should be addPreconditionTests
-        addPreconditionTests(main, "ext");
-        addPreconditionTests(intInMain, "Main");
-        addPreconditionTests(intInMain, "ext");
-        addPreconditionTests(subInMain, "int");
-        addPreconditionTests(subInMain, "ext");
-        addPreconditionTests(ext, "int"); // conflict due to reference in Main
-        addPreconditionTests(ext, "sub"); // will change interpretation of ext call in Main
-        addPreconditionTests(ext, "Main");
-        addSuccessTests(intContained, "sub");
-        addSuccessTests(intContained, "Main");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename2.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename2.java
deleted file mode 100644
index 367faf4..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename2.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename2 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME2.F90, AND
-    // GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String filename = "rename2.f90";
-    
-    private Ident[] vars = new Ident[]
-    {
-        var(filename, "Main", new LineCol[] { lc(2,9), lc(27,13) }),
-        var(filename, "one", new LineCol[] { lc(4,16), lc(12,14), lc(16,11), lc(20,11) }),
-        var(filename, "two", new LineCol[] { lc(5,27), lc(10,13), lc(13,14), lc(17,14) }),
-        var(filename, "three", new LineCol[] { lc(6,16), lc(14,9), lc(18,9) }),
-        var(filename, "four", new LineCol[] { lc(10,21), lc(15,14), lc(19,14) })
-    };
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename2();
-    }
-    
-    public Rename2() throws Exception
-    {
-        startTests("Renaming program with comments and line continuations");
-        for (String name : new String[] { "z", "a_really_really_long_name" })
-            for (Ident var : vars)
-                addSuccessTests(var, name);
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename3.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename3.java
deleted file mode 100644
index a288c9b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename3.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename3 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME3*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "rename3.f90";
-    private String filea = "rename3a.f90";
-    private String fileb = "rename3b.f90";
-    private String filec = "rename3c.f90";
-
-    private Ident myProgram = var("MyProgram");
-    private Ident aRenamed3 = var("a_renamed3");
-    private Ident bRenamed3 = var("b_renamed3");
-    private Ident contained = var("contained");
-    private Ident external = var("external");
-    
-    private Ident moduleA = var("module_a");
-    private Ident aSub1of3 = var("a_sub1of3");
-    private Ident aSub2of3 = var("a_sub2of3");
-    private Ident aSub3of3 = var("a_sub3of3");
-    
-    private Ident moduleB = var("module_b");
-    private Ident bSub1of3 = var("b_sub1of3");
-    private Ident bSub2of3 = var("b_sub2of3");
-    private Ident bSub3of3 = var("b_sub3of3");
-    
-    private Ident moduleC = var("module_c");
-    private Ident cSub = var("c_sub");
-    
-    // Note that the order here determines the order in the expectSuccess matrix below
-    private Ident[] allVars = new Ident[]
-    {
-        myProgram, aRenamed3, bRenamed3, contained, external,
-        moduleA, aSub1of3, aSub2of3, aSub3of3,
-        moduleB, bSub1of3, bSub2of3, bSub3of3,
-        moduleC, cSub
-    };
-    
-    private boolean[][] expectSuccess = new boolean[][]
-    {
-        // IMPORTANT:
-        // * Modules can't be renamed, hence the rows of "false" for moduleA, moduleB, and moduleC
-        // * The rename refactoring requires that the new name not be identical to the old name, hence "false" along the diagonal
-        
-        /* vvv can be renamed to >>>    myProgram, aRenamed3, bRenamed3, contained, external, moduleA, aSub1of3, aSub2of3, aSub3of3, moduleB, bSub1of3, bSub2of3, bSub3of3, moduleC, cSub
-        /* myProgram */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     true,    true,     false,    true,     true,    true  },
-        /* aRenamed3 */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     true,    true,     false,    true,     true,    true  },
-        /* bRenamed3 */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     true,    true,     false,    true,     true,    true  },
-        /* contained */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     true,    true,     false,    true,     true,    true  },
-        /* external  */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     true,    true,     false,    true,     true,    true  },
-        /* moduleA   */ new boolean[] { false,     false,     false,     false,     false,    false,   false,    false,    false,    false,   false,    false,    false,    false,   false },
-        /* aSub1of3  */ new boolean[] { false,     false,     false,     false,     false,    false,   false,    false,    false,    true,    true,     false,    true,     true,    true  },
-        /* aSub2of3  */ new boolean[] { false,     false,     false,     false,     false,    false,   false,    false,    false,    true,    true,     false,    true,     true,    true  },
-        /* aSub3of3  */ new boolean[] { true,      true,      true,      true,      true,     false,   false,    false,    false,    true,    true,     true,     true,     true,    true  },
-        /* moduleB   */ new boolean[] { false,     false,     false,     false,     false,    false,   false,    false,    false,    false,   false,    false,    false,    false,   false },
-        /* bSub1of3  */ new boolean[] { true,      true,      true,      true,      true,     true,    true,     true,     true,     false,   false,    false,    false,    true,    false },
-        /* bSub2of3  */ new boolean[] { false,     false,     false,     false,     false,    true,    false,    false,    true,     false,   false,    false,    false,    true,    false,},
-        /* bSub3of3  */ new boolean[] { true,      true,      true,      true,      true,     true,    true,     true,     true,     false,   false,    false,    false,    true,    false },
-        /* moduleC   */ new boolean[] { false,     false,     false,     false,     false,    false,   false,    false,    false,    false,   false,    false,    false,    false,   false },
-        /* cSub      */ new boolean[] { true,      true,      true,      true,      true,     true,    true,     true,     true,     false,   false,    false,    false,    false,   false },
-    };
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename3();
-    }
-    
-    public Rename3() throws Exception
-    {
-        myProgram.addReferences(file, new LineCol[] { lc(1,9) });
-        aRenamed3.addReferences(file, new LineCol[] { lc(2,17), lc(9,8) });
-        bRenamed3.addReferences(file, new LineCol[] { lc(3,34), lc(11,8) });
-        contained.addReferences(file, new LineCol[] { lc(15,14), lc(12,8) });
-        external.addReferences(file, new LineCol[] { lc(18,12), lc(13,8) });
-        moduleA.addReferences(file, new LineCol[] { lc(2,7) });
-        aSub1of3.addReferences(file, new LineCol[] { lc(7,8) });
-        aSub2of3.addReferences(file, new LineCol[] { lc(8,8) });
-        aSub3of3.addReferences(file, new LineCol[] { lc(2,31) });
-        moduleB.addReferences(file, new LineCol[] { lc(3,7) });
-        bSub1of3.addReferences(file, new LineCol[] {});
-        bSub2of3.addReferences(file, new LineCol[] { lc(3, 23), lc(10,8) });
-        bSub3of3.addReferences(file, new LineCol[] { lc(3,48) });
-        moduleC.addReferences(file, new LineCol[] {});
-        cSub.addReferences(file, new LineCol[] {});
-        
-        myProgram.addReferences(filea, new LineCol[] {});
-        aRenamed3.addReferences(filea, new LineCol[] {});
-        bRenamed3.addReferences(filea, new LineCol[] {});
-        contained.addReferences(filea, new LineCol[] {});
-        external.addReferences(filea, new LineCol[] {});
-        moduleA.addReferences(filea, new LineCol[] { lc(1,8) });
-        aSub1of3.addReferences(filea, new LineCol[] { lc(3,16) });
-        aSub2of3.addReferences(filea, new LineCol[] { lc(4,16) });
-        aSub3of3.addReferences(filea, new LineCol[] { lc(5,16) });
-        moduleB.addReferences(filea, new LineCol[] {});
-        bSub1of3.addReferences(filea, new LineCol[] {});
-        bSub2of3.addReferences(filea, new LineCol[] {});
-        bSub3of3.addReferences(filea, new LineCol[] {});
-        moduleC.addReferences(filea, new LineCol[] {});
-        cSub.addReferences(filea, new LineCol[] {});
-        
-        myProgram.addReferences(fileb, new LineCol[] {});
-        aRenamed3.addReferences(fileb, new LineCol[] {});
-        bRenamed3.addReferences(fileb, new LineCol[] {});
-        contained.addReferences(fileb, new LineCol[] {});
-        external.addReferences(fileb, new LineCol[] {});
-        moduleA.addReferences(fileb, new LineCol[] {});
-        aSub1of3.addReferences(fileb, new LineCol[] {});
-        aSub2of3.addReferences(fileb, new LineCol[] {});
-        aSub3of3.addReferences(fileb, new LineCol[] {});
-        moduleB.addReferences(fileb, new LineCol[] { lc(1,8) });
-        bSub1of3.addReferences(fileb, new LineCol[] { lc(4,16) });
-        bSub2of3.addReferences(fileb, new LineCol[] { lc(5,16) });
-        bSub3of3.addReferences(fileb, new LineCol[] { lc(6,16) });
-        moduleC.addReferences(fileb, new LineCol[] { lc(2,9) });
-        cSub.addReferences(fileb, new LineCol[] { lc(7,12) });
-        
-        myProgram.addReferences(filec, new LineCol[] {});
-        aRenamed3.addReferences(filec, new LineCol[] {});
-        bRenamed3.addReferences(filec, new LineCol[] {});
-        contained.addReferences(filec, new LineCol[] {});
-        external.addReferences(filec, new LineCol[] {});
-        moduleA.addReferences(filec, new LineCol[] {});
-        aSub1of3.addReferences(filec, new LineCol[] {});
-        aSub2of3.addReferences(filec, new LineCol[] {});
-        aSub3of3.addReferences(filec, new LineCol[] {});
-        moduleB.addReferences(filec, new LineCol[] {});
-        bSub1of3.addReferences(filec, new LineCol[] {});
-        bSub2of3.addReferences(filec, new LineCol[] {});
-        bSub3of3.addReferences(filec, new LineCol[] {});
-        moduleC.addReferences(filec, new LineCol[] { lc(1,8) });
-        cSub.addReferences(filec, new LineCol[] { lc(3,16) });
-
-        startTests("Renaming subroutines imported from modules");
-        for (int i = 0; i < allVars.length; i++)
-        {
-            for (int j = 0; j < allVars.length; j++)
-            {
-//        for (int i = 6; i == 6; i++)
-//        {
-//            for (int j = 1; j == 1; j++)
-//            {
-                if (expectSuccess[i][j])
-                    addSuccessTests(allVars[i], allVars[j].getName());
-                else
-                    addPreconditionTests(allVars[i], allVars[j].getName());
-            }
-        }
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename4.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename4.java
deleted file mode 100644
index f27cd2b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename4.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename4 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME4*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "rename4.f90";
-    private String filea = "rename4a.fh";
-    private String fileb = "rename4b.fh";
-
-    private Ident myProgram = var("MyProgram");
-    private Ident hello = var("hello");
-    private Ident goodbye = var("goodbye");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename4();
-    }
-    
-    public Rename4() throws Exception
-    {
-        myProgram.addReferences(file, new LineCol[] { lc(1,9) });
-        hello.addReferences(file, new LineCol[] { lc(3,12) });
-        goodbye.addReferences(file, new LineCol[] {});
-        
-        myProgram.addReferences(filea, new LineCol[] {});
-        hello.addReferences(filea, new LineCol[] { lc(1,12) });
-        goodbye.addReferences(filea, new LineCol[] { lc(2,12) });
-        
-        myProgram.addReferences(fileb, new LineCol[] {});
-        hello.addReferences(fileb, new LineCol[] { lc(1,10) });
-        goodbye.addReferences(fileb, new LineCol[] {});
-
-        startTests("Renaming file with Fortran INCLUDE lines");
-        addSuccessTests(myProgram, "ziggySockyZiggySockyHoyHoyHoy");
-        addPreconditionTests(myProgram, "hello");
-        addPreconditionTests(hello, "Goodbye");
-        addPreconditionTests(hello, "MyProgram");
-        addPreconditionTests(hello, "ziggySockyZiggySockyHoyHoyHoy");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename5.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename5.java
deleted file mode 100644
index 70fd3af..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename5.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename5 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME3.F90, AND
-    // GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String filename = "rename5.f90";
-    
-    private Ident intrinsic1 = var(filename, "selected_int_kind", new LineCol[] { lc(2,14) });
-    private Ident intrinsic2 = var(filename, "null", new LineCol[] { lc(29,33) });
-    
-    //private Ident outerThrice = var(filename, "thrice", new LineCol[] { lc(2,45) });
-    //private Ident outerThriceImpliedResult = var(filename, "thrice", new LineCol[] { lc(4,3) });
-    private Ident outerThriceFunctionAndResult = var(filename, "thrice", new LineCol[] { lc(2,45), lc(4,3), lc(5,14),
-        lc(17,12), lc(17,23), lc(45,20)}); // If statement function removed
-    private Ident outerThriceParam = var(filename, "n", new LineCol[] { lc(2,52), lc(3,17) });
-    
-    private Ident typeType = var(filename, "type", new LineCol[] { lc(7,8), lc(9,12), lc(27,10), lc(29,10), lc(37,9) });
-    private Ident typeComponent = var(filename, "a", new LineCol[] { lc(8,16), lc(35,7), lc(45,9) });
-    
-    //private Ident innerThrice = var(filename, "thrice", new LineCol[] { lc(12,3), lc(17,12), lc(17,23), lc(45,20) });
-    //private Ident innerThriceParam = var(filename, "n", new LineCol[] { lc(12,10), lc(12,17) });
-    
-    private Ident localN = var(filename, "n", new LineCol[] { lc(14,3), lc(17,30), lc(17,34) });
-    
-    //private Ident fFunction = var(filename, "f", new LineCol[] { lc(17,38), lc(17,44), lc(23,30), lc(45,27), lc(46,16) });
-    //private Ident fResult = var(filename, "f", new LineCol[] { lc(47,5), lc(45,16), lc(45,29) });
-    private Ident fFunctionAndResult = var(filename, "f", new LineCol[] { lc(17,38), lc(17,44), lc(23,30), lc(45,27), lc(46,16), lc(43,5), lc(45,16), lc(45,29) });
-    private Ident fParam = var(filename, "a", new LineCol[] { lc(23,33), lc(25,16), lc(32,19), lc(35,11), lc(37,14) });
-    private Ident fx = var(filename, "x", new LineCol[] { lc(27,19), lc(31,15), lc(35,5), lc(37,5), lc(39,10) });
-    private Ident fp = var(filename, "p", new LineCol[] { lc(29,28), lc(39,5) });
-    
-    private Ident[] notRenameable = new Ident[]
-    {
-        intrinsic1, intrinsic2,
-        outerThriceParam, /*innerThriceParam,*/ fParam,
-        typeComponent,
-    };
-    
-    private Ident[] renameable = new Ident[]
-    {
-        outerThriceFunctionAndResult,
-        typeType,
-        /*innerThrice,*/
-        localN,
-        fFunctionAndResult,
-        fx,
-        fp,
-    };
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename5();
-    }
-    
-    public Rename5() throws Exception
-    {
-        //startTests("Renaming program with a shadowing statement function, implied results, and pointers");
-        startTests("Renaming program with implied results and pointers");
-        for (Ident var : notRenameable)
-            addPreconditionTests(var, "z");
-        for (Ident var : renameable)
-            addSuccessTests(var, "z");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename6.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename6.java
deleted file mode 100644
index 8373836..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename6.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename6 extends RenameTestSuite
-{
-    private String filename = "rename6.f90";
-    
-    private Ident[] vars = new Ident[] {
-        var(filename, "outer", new LineCol[] { lc(1,21), lc(3,8), lc(9,6) }),
-        var(filename, "i", new LineCol[] { lc(6,23), lc(7,15), lc(15,22), lc(22,30), lc(24,14), lc(26,12), lc(28,23), lc(28,29) }),
-        var(filename, "hi", new LineCol[] { lc(7,27), lc(18,16), lc(18,30), lc(22,6) }),
-        var(filename, "bye", new LineCol[] { lc(7,38), lc(18,20), lc(18,40), lc(22,9) }),
-        var(filename, "ty", new LineCol[] { lc(15,2), lc(15,2), lc(15,9), lc(22,13) }),
-        var(filename, "array", new LineCol[] { lc(10,12), lc(24,6), lc(26,6), lc(28,7) }),
-        var(filename, "nl1", new LineCol[] { lc(18,11), lc(19,14) }),
-        var(filename, "nl2", new LineCol[] { lc(18,25) }),
-        var(filename, "nl3", new LineCol[] { lc(18,35) }),
-        var(filename, "j", new LineCol[] { lc(5,12), lc(28,13), lc(28,17) }),
-    };
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename6();
-    }
-    
-    public Rename6() throws Exception
-    {
-        startTests("Renaming local variables: nested derived type and namelists");
-        for (Ident v : vars)
-            addSuccessTests(v, "zzzzz");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename7.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename7.java
deleted file mode 100644
index 8c1d832..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename7.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename7 extends RenameTestSuite
-{
-    private String filename = "rename7.f90";
-    
-    private Ident[] vars = new Ident[] {
-        var(filename, "v1", new LineCol[] { lc(6,12), lc(8,18), lc(12,6) }),
-        var(filename, "v2", new LineCol[] { lc(6,16), lc(8,22), lc(12,10) }),
-        var(filename, "v3", new LineCol[] { lc(6,20), lc(8,28) }),
-        var(filename, "v4", new LineCol[] { lc(6,24), lc(8,41) }),
-        var(filename, "v5", new LineCol[] { lc(6,28), lc(8,45) }),
-        var(filename, "common1", new LineCol[] { lc(8,9), /*lc(8,32),*/ lc(10,7) }),
-    };
-    
-    private Ident bdn = var(filename, "bdn", new LineCol[] { lc(2,12), lc(14,16) });
-    
-    public static Test suite() throws Exception
-    {
-        return new Rename7();
-    }
-    
-    public Rename7() throws Exception
-    {
-        startTests("Renaming local variables: common blocks and block data");
-        
-        addSuccessTests(bdn, "zzzzz");
-        for (Ident v : vars)
-        	addSuccessTests(bdn, v.getName());
-
-        for (Ident v1 : vars)
-        {
-            addSuccessTests(v1, "zzzzz");
-            
-            for (Ident v2 : vars)
-            	addPreconditionTests(v1, v2.getName());
-        }
-
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename8.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename8.java
deleted file mode 100644
index 81c1c16..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename8.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename8 extends RenameTestSuite
-{
-    private String filename = "rename8.f90";
-    
-    private Ident f = var(filename, "f", new LineCol[] { lc(4,10), lc(28,14) });
-    private Ident g_paramOfF = var(filename, "g", new LineCol[] { lc(4,12), lc(11,31), lc(23,18) });
-    private Ident q = var(filename, "q", new LineCol[] { lc(4,22), lc(7,23), lc(26,3) });
-    private Ident h = var(filename, "h", new LineCol[] { lc(11,33), lc(15,35), lc(18,22) });
-    private Ident x_paramOfG = var(filename, "x", new LineCol[] { lc(11,36), lc(21,39) });
-    private Ident x_paramOfH = var(filename, "x", new LineCol[] { lc(15,37), lc(17,43) });
-    private Ident g_function = var(filename, "g", new LineCol[] { lc(30,18), lc(30,23), lc(30,43) });
-    
-    // Note that the order here determines the order in the expectSuccess matrix below
-    private Ident[] allVars = new Ident[]
-    {
-        f, g_paramOfF, q, h, x_paramOfG, x_paramOfH, g_function
-    };
-
-    private boolean[][] expectSuccess = new boolean[][]
-      {
-          // IMPORTANT:
-          // * Subprogram arguments cannot be renamed
-          // * x cannot be renamed to x
-          
-          /* vvv can be renamed to >>>     f      g_paramOfF q      h      x_paramOfG x_paramOfH g_function   
-          /* f          */ new boolean[] { false, false,     false, true,  true,      true,      false },
-          /* g_paramOfF */ new boolean[] { false, false,     false, false, false,     false,     false },
-          /* q          */ new boolean[] { false, false,     false, true,  true,      true,      false },
-          /* h          */ new boolean[] { false, false,     false, false, false,     false,     false },
-          /* x_paramOfG */ new boolean[] { false, false,     false, false, false,     false,     false },
-          /* x_paramOfH */ new boolean[] { false, false,     false, false, false,     false,     false },
-          /* g_function */ new boolean[] { false, false,     true,  true,  true,      true,      false },
-      };
-
-    public static Test suite() throws Exception
-    {
-        return new Rename8();
-    }
-    
-    public Rename8() throws Exception
-    {
-        startTests("Renaming subroutine arguments");
-        for (int i = 0; i < allVars.length; i++)
-        {
-            for (int j = 0; j < allVars.length; j++)
-            {
-                if (expectSuccess[i][j])
-                    addSuccessTests(allVars[i], allVars[j].getName());
-                else
-                    addPreconditionTests(allVars[i], allVars[j].getName());
-            }
-        }
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename9.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename9.java
deleted file mode 100644
index 86e056a..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/Rename9.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class Rename9 extends RenameTestSuite
-{
-    private String filename = "rename9.f90";
-    
-    private Ident i1 = var(filename, "i1", new LineCol[] { lc(3,14), lc(36,12) });
-    private Ident j1 = var(filename, "j1", new LineCol[] { lc(4,23) });
-    private Ident k1 = var(filename, "k1", new LineCol[] { lc(5,14), lc(7,31) });
-    private Ident f1 = var(filename, "f1", new LineCol[] { lc(12,20), lc(12,26), lc(36,24) });
-    private Ident i2 = var(filename, "i2", new LineCol[] { lc(17,14) });
-    private Ident j2 = var(filename, "j2", new LineCol[] { lc(18,22), lc(39,16) });
-    private Ident k2 = var(filename, "k2", new LineCol[] { lc(20,13), lc(22,31), lc(39,20) });
-    private Ident f2 = var(filename, "f2", new LineCol[] { lc(27,20), lc(27,26) });
-    private Ident j1implicit = var(filename, "j1", new LineCol[] { lc(36,16) });
-    private Ident k1implicit = var(filename, "k1", new LineCol[] { lc(36,20) });
-    private Ident zimplicit = var(filename, "z", new LineCol[] { lc(36,30) });
-    private Ident i2implicit = var(filename, "i2", new LineCol[] { lc(39,12) });
-    private Ident f2implicit = var(filename, "f2", new LineCol[] { lc(39,29) });
-    
-    // Note that the order here determines the order in the expectSuccess matrix below
-    private Ident[] allVars = new Ident[]
-    {
-        i1, j1, k1, f1, i2, j2, k2, f2, j1implicit, k1implicit, zimplicit, i2implicit, f2implicit
-    };
-
-    private boolean[][] expectSuccess = new boolean[][]
-      {
-          // IMPORTANT:
-          // * Subprogram arguments cannot be renamed
-          // * x cannot be renamed to x
-          // * j1 and j1implicit have the SAME NAME, so their columns should be identical (same for k1, etc.)
-          
-          /* vvv can be renamed to >>>     i1     j1     k1     f1     i2     j2     k2     f2     j1implicit k1implicit zimplicit i2implicit f2implicit   
-          /* i1         */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* j1         */ new boolean[] { false, false, false, false, true,  true,  true,  true,  false,     false,     true,     true,      true  },
-          /* k1         */ new boolean[] { false, false, false, false, true,  true,  true,  true,  false,     false,     false,    true,      true  },
-          /* f1         */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* i2         */ new boolean[] { true,  true,  true,  true,  false, false, false, false, true,      true,      true,     false,     false },
-          /* j2         */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* k2         */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* f2         */ new boolean[] { true,  true,  true,  true,  false, false, false, false, true,      true,      true,     false,     false },
-          /* j1implicit */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* k1implicit */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* zimplicit  */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* i2implicit */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-          /* f2implicit */ new boolean[] { false, false, false, false, false, false, false, false, false,     false,     false,    false,     false },
-      };
-
-    public static Test suite() throws Exception
-    {
-        return new Rename9();
-    }
-    
-    public Rename9() throws Exception
-    {
-        startTests("Renaming in module with interfaces and visibilities");
-        for (int i = 0; i < allVars.length; i++)
-        {
-            addSuccessTests(allVars[i], "something_different");
-            for (int j = 0; j < allVars.length; j++)
-            {
-                if (expectSuccess[i][j])
-                    addSuccessTests(allVars[i], allVars[j].getName());
-                else
-                    addPreconditionTests(allVars[i], allVars[j].getName());
-            }
-        }
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278103.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278103.java
deleted file mode 100644
index 2cd6943..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278103.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class RenameBug278103 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN BUG278103-*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String filem = "bug278103-mod.f90";
-    private String filep = "bug278103-prog.f90";
-    private String files = "bug278103-subs.f90";
-
-    private Ident dim = var("DIM");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameBug278103();
-    }
-    
-    public RenameBug278103() throws Exception
-    {
-        dim.addReferences(filem, new LineCol[] { lc(3,27), lc(11,22) });
-        dim.addReferences(filep, new LineCol[] { lc(14,24), lc(16,22) });
-        dim.addReferences(files, new LineCol[] { lc(5,22), lc(9,14), lc(11,23) });
-
-        startTests("Renaming file exercising Bug 278103");
-        addSuccessTests(dim, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278106_Visibility.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278106_Visibility.java
deleted file mode 100644
index ced4a94..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278106_Visibility.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class RenameBug278106_Visibility extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN BUG278106.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "bug278106-visibility.f90";
-
-    private Ident m1_m1a = var("m1a");
-    private Ident m1_m1b = var("m1b");
-    
-    private Ident s1_m1b = var("m1b");
-
-    private Ident s2_m1a = var("m1a");
-    private Ident s2_m1b = var("m1b");
-    
-    private Ident s3_m1b = var("m1b");
-
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameBug278106_Visibility();
-    }
-    
-    public RenameBug278106_Visibility() throws Exception
-    {
-        m1_m1a.addReferences(file, new LineCol[] { lc(2,14), lc(14,12), lc(32,13), lc(39,12) });
-        m1_m1b.addReferences(file, new LineCol[] { lc(2,19), lc(7,14) });
-        
-        s1_m1b.addReferences(file, new LineCol[] { lc(13,14), lc(14,17) });
-
-        s2_m1a.addReferences(file, new LineCol[] { lc(24,14), lc(26,12) });
-        s2_m1b.addReferences(file, new LineCol[] { lc(25,14), lc(26,17) });
-        
-        s3_m1b.addReferences(file, new LineCol[] { lc(38,14), lc(39,17) });
-
-        startTests("Renaming file exercising Bug 278324");
-        addSuccessTests(m1_m1a, "something_else");
-        addSuccessTests(m1_m1b, "something_else");
-        addSuccessTests(s1_m1b, "something_else");
-        addSuccessTests(s2_m1a, "something_else");
-        addSuccessTests(s2_m1b, "something_else");
-        addSuccessTests(s3_m1b, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278320.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278320.java
deleted file mode 100644
index a5bb453..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278320.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class RenameBug278320 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITION OF MODULE_ARRAY IN BUG278320-*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String prog_file = "bug278320-prog.f90";
-    private String mod_file = "bug278320-mod.f90";
-
-    private Ident module_array = var("module_array");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameBug278320();
-    }
-    
-    public RenameBug278320() throws Exception
-    {
-        module_array.addReferences(prog_file, new LineCol[] { lc(5,5), lc(6,17) });
-        module_array.addReferences(mod_file, new LineCol[] { lc(3,28) });
-
-        startTests("Renaming file exercising Bug 278320");
-        addSuccessTests(module_array, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278324.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278324.java
deleted file mode 100644
index dcc4fe5..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameBug278324.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class RenameBug278324 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN BUG278324.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "bug278324.f90";
-
-    private Ident parmValFormat = var("parmValFormat");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameBug278324();
-    }
-    
-    public RenameBug278324() throws Exception
-    {
-        parmValFormat.addReferences(file, new LineCol[] { lc(3,25), lc(5,11), lc(6,15) });
-
-        startTests("Renaming file exercising Bug 278324");
-        addSuccessTests(parmValFormat, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameExtSub1.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameExtSub1.java
deleted file mode 100644
index b1a278a..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameExtSub1.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-/**
- * Rename refactoring tests ensuring that renaming external subprograms also
- * updates references in other files and in INTERFACE blocks
- * 
- * @author Jeff Overbey
- */
-public class RenameExtSub1 extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF SUBPROGRAM IDENTIFIERS IN RENAME-EXTSUB1-*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file1 = "rename-extsub1-a.f90";
-    private String file2 = "rename-extsub1-b.f90";
-
-    private Ident ext1 = var("ext1");
-    private Ident ext2 = var("ext2");
-    private Ident ext3 = var("ext3");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameExtSub1();
-    }
-    
-    public RenameExtSub1() throws Exception
-    {
-        ext1.addReferences(file1, new LineCol[] { lc(1,12), lc(2,16), lc(6,16), lc(7,20), lc(17,8) });
-        
-        ext2.addReferences(file1, new LineCol[] { lc(9,31), lc(11,18), lc(18,12) });
-        ext2.addReferences(file2, new LineCol[] { lc(1,27), lc(6,3), lc(7,14) });
-        
-        ext3.addReferences(file1, new LineCol[] { lc(13,22), lc(14,18), lc(19,12), lc(23,10), lc(25,14) });
-        ext3.addReferences(file2, new LineCol[] { lc(3,12), lc(5,7) });
-
-        startTests("Renaming file testing aggressive external subprogram binding resolution");
-        addSuccessTests(ext1, "something_else");
-        addSuccessTests(ext2, "something_else");
-        addSuccessTests(ext3, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameFnResult.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameFnResult.java
deleted file mode 100644
index 4acbf2b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameFnResult.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public class RenameFnResult extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME-FN-RESULT.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "rename-fn-result.f90";
-
-    private Ident f = var("f");
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameFnResult();
-    }
-    
-    public RenameFnResult() throws Exception
-    {
-        f.addReferences(file, new LineCol[] { lc(1,12), lc(3,12), lc(4,16), lc(5,5), lc(6,16) });
-
-        startTests("Renaming function and implied result variable simultaneously");
-        addSuccessTests(f, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameOverloads.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameOverloads.java
deleted file mode 100644
index d67551e..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameOverloads.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.eclipse.photran.refactoring.tests.rename;
-
-import junit.framework.Test;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-/**
- * Rename refactoring tests ensuring that renaming external subprograms also
- * updates references in other files and in INTERFACE blocks
- * 
- * @author Jeff Overbey
- */
-public class RenameOverloads extends RenameTestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF SUBPROGRAM IDENTIFIERS IN RENAME-EXTSUB1-*.F90
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    private String file = "rename-overloads.f90";
-
-    private Ident module_overload = var("module_overload");
-    private Ident overload_int = var("overload_int");
-    private Ident mp_overload_char = var("overload_char");
-    private Ident ext_overload_char = var("overload_char");
-
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // TEST CASES
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    public static Test suite() throws Exception
-    {
-        return new RenameOverloads();
-    }
-    
-    public RenameOverloads() throws Exception
-    {
-        module_overload.addReferences(file, new LineCol[] { lc(2,13), lc(7,17), lc(39,10), lc(40,10) });
-        overload_int.addReferences(file, new LineCol[] { lc(3,16), lc(5,20), lc(15,12), lc(18,16), lc(22,16), lc(24,20), lc(33,8), lc(41,10) });
-        mp_overload_char.addReferences(file, new LineCol[] { lc(6,22), lc(9,14), lc(12,18), lc(42,10) });
-        ext_overload_char.addReferences(file, new LineCol[] { lc(26,16), lc(28,20), lc(34,8), lc(46,12), lc(49,16) });
-
-        startTests("Renaming file testing bindings in overload declarations");
-        addSuccessTests(module_overload, "something_else");
-        addSuccessTests(overload_int, "something_else");
-        addSuccessTests(mp_overload_char, "something_else");
-        addSuccessTests(ext_overload_char, "something_else");
-        endTests();
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestCase.java
deleted file mode 100644
index 368ce3f..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestCase.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.TextSelection;
-import org.eclipse.ltk.core.refactoring.Change;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.core.vpg.util.LineCol;
-import org.eclipse.photran.internal.core.refactoring.RenameRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-import org.eclipse.photran.refactoring.tests.rename.RenameTestSuite.Ident;
-
-public abstract class RenameTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "rename-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String filename;
-    protected Ident variable;
-    protected LineCol position;
-    protected String newName;
-
-    public RenameTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-
-    public RenameTestCase(String filename, Ident variable, LineCol position, String newName)
-    {
-        this.filename = filename;
-        this.variable = variable;
-        this.newName = newName;
-        this.position = position;
-        this.setName("test");
-    }
-
-    /**
-     * Renames the identifier at the given position in the given workspace file to the given new name.  Files in the workspace
-     * are updated accordingly.
-     */
-    protected void doRename(String filename, LineCol lineCol, String newName, Set<String> allFiles) throws Exception
-    {
-        String description = "Attempt to rename identifier at " + lineCol;
-        
-        RenameRefactoring refactoring = createRefactoring(filename, lineCol, allFiles);
-        
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
-        
-        refactoring.setNewNameForIdentifier(newName);
-        
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-        
-        Change change = refactoring.createChange(pm);
-        assertNotNull(description + " returned null Change object", change);
-        assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
-        change.perform(pm);
-        
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-    }
-    
-    /**
-     * Attempts to renames the identifier at the given position in the given workspace file to the given new name, with
-     * the expectation that at least one precondition will fail.  Returns the first failing status.  Does not actually
-     * perform the refactoring.
-     */
-    protected RefactoringStatus attemptRename(String filename, LineCol lineCol, String newName, Set<String> allFiles) throws Exception
-    {
-        RenameRefactoring refactoring = createRefactoring(filename, lineCol, allFiles);
-        
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        if (status.hasError()) return status;
-        
-        refactoring.setNewNameForIdentifier(newName);
-        
-        status = refactoring.checkFinalConditions(pm);
-        return status;
-    }
-
-    private RenameRefactoring createRefactoring(final String filename, final LineCol lineCol, final Set<String> allFiles) throws Exception
-    {
-    	PhotranVPG.getDatabase().clearDatabase();
-    	
-        final IFile thisFile = importFile(DIR, filename);
-        for (String f : allFiles)
-            importFile(DIR, f);
-
-        // Originally, we called acquireTransientAST on each IFile
-        PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor());
-        //project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); // Runs in separate thread... grrr...
-
-//        System.out.println(filename);
-//        for (String f : allFiles)
-//            System.out.println(f);
-//        PhotranVPG.getInstance().db.printOn(System.out);
-        
-        return new RenameRefactoring(thisFile, new TextSelection(getLineColOffset(filename, lineCol), 0));
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-    
-    public static class ExpectSuccess extends RenameTestCase
-    {
-        public ExpectSuccess() {;}  // when JUnit invokes this outside a test suite
-        
-        public ExpectSuccess(String filename, Ident variable, LineCol position, String newName)
-        {
-            super(filename, variable, position, newName);
-        }
-
-        /**
-         * Given an array with all of the positions of identifiers that should be renamed together, try applying the Rename refactoring to
-         * each, and make sure all the others change with it. 
-         */
-        public void test() throws Exception
-        {
-            if (filename == null || variable == null || newName == null) return; // when JUnit invokes this outside a test suite
-            //System.out.println("***** " + variable.getName() + " ==> " + newName + " *****");
-            
-            doRename(filename, position, newName, variable.getFiles());
-            for (String filename : variable.getFiles())
-            {
-                int totalLevDist = variable.getReferences(filename).length * levenshteinDistance(variable.getName(), newName);
-                assertLevDist("renaming " + variable.getName() + " to " + newName + " (" + position + " - " + variable.getReferences(filename).length + " occurrences)",
-                              totalLevDist,
-                              readTestFile(filename), // original file
-                              readWorkspaceFile(filename)); // refactored file
-            }
-        }
-    }
-
-    public static class ExpectFailure extends RenameTestCase
-    {
-        public ExpectFailure() {;}  // when JUnit invokes this outside a test suite
-        
-        public ExpectFailure(String filename, Ident variable, LineCol position, String newName)
-        {
-            super(filename, variable, position, newName);
-        }
-
-        /**
-         * Given an array with all of the positions of identifiers that should be renamed together, try applying the Rename refactoring to
-         * each, and make sure a precondition failure is raised. 
-         * @throws Exception 
-         */
-        public void test() throws Exception
-        {
-            if (filename == null || variable == null || newName == null) return; // when JUnit invokes this outside a test suite
-            //System.out.println("***** " + variable.getName() + " ==> " + newName + " *****");
-            
-            RefactoringStatus status = attemptRename(filename, position, newName, variable.getFiles());
-            assertTrue("Attempting to rename " + variable.getName() + " to " + newName + " in " + filename
-                           + " (" + position + " - " + variable.getReferences(filename).length + " occurrences) "
-                           + "should have failed precondition checking.",
-                       status.hasError());
-        }
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestSuite.java
deleted file mode 100644
index 6b56bf1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/rename/RenameTestSuite.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 University of Illinois at Urbana-Champaign and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     UIUC - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.photran.refactoring.tests.rename;
-
-import java.util.HashMap;
-import java.util.Set;
-
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-public abstract class RenameTestSuite extends TestSuite
-{
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME1.F90, AND
-    // GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
-    //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    protected static class Ident
-    {
-        private String name;
-        private HashMap<String, LineCol[]> references;
-        
-        public Ident(String name)
-        {
-            this.name = name;
-            this.references = new HashMap<String, LineCol[]>();
-        }
-        
-        public Ident(String filename, String name, LineCol[] referencesInFile)
-        {
-            this(name);
-            addReferences(filename, referencesInFile);
-        }
-        
-        public void addReferences(String filename, LineCol[] referencesInFile)
-        {
-            this.references.put(filename, referencesInFile);
-        }
-
-        public String getName()
-        {
-            return this.name;
-        }
-
-        public Set<String> getFiles()
-        {
-            return this.references.keySet();
-        }
-        
-        public LineCol[] getReferences(String filename)
-        {
-            return this.references.get(filename);
-        }
-    }
-
-    protected Ident var(String name) { return new Ident(name); }
-    protected Ident var(String filename, String name, LineCol[] refs) { return new Ident(filename, name, refs); }
-    protected LineCol lc(int line, int col) { return new LineCol(line, col); }
-    
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // SUITE BUILDING
-    //
-    ///////////////////////////////////////////////////////////////////////////
-
-    private TestSuite currentSubSuite = null;
-    
-    protected void startTests(String description)
-    {
-        currentSubSuite = new TestSuite();
-        currentSubSuite.setName(description);
-    }
-    
-    protected void addSuccessTests(Ident ident, String newName)
-    {
-        TestSuite subSubSuite = new TestSuite();
-        subSubSuite.setName("Renaming " + describe(ident, newName));
-        
-        for (String filename : ident.getFiles())
-            for (LineCol position : ident.getReferences(filename))
-                subSubSuite.addTest(new RenameTestCase.ExpectSuccess(filename, ident, position, newName));
-        
-        currentSubSuite.addTest(subSubSuite);
-    }
-
-    protected void addPreconditionTests(Ident ident, String newName)
-    {
-        TestSuite subSubSuite = new TestSuite();
-        subSubSuite.setName("Attempting to rename " + describe(ident, newName));
-        
-        for (String filename : ident.getFiles())
-            for (LineCol position : ident.getReferences(filename))
-                subSubSuite.addTest(new RenameTestCase.ExpectFailure(filename, ident, position, newName));
-        
-        currentSubSuite.addTest(subSubSuite);
-    }
-    
-    private String describe(Ident ident, String newName)
-    {
-        return ident.name + " to " + newName;
-    }
-    
-    protected void endTests()
-    {
-        addTest(currentSubSuite);
-        currentSubSuite = null;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/ManualSearchPageTests.txt b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/ManualSearchPageTests.txt
deleted file mode 100644
index 81cf5a8..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/ManualSearchPageTests.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-Fortran Search is displayed in the Fortran perspective:
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search from the menu bar
-4: "Fortran Search" should be in the dropdown menu.
-
-
-Fortran Search is among the choices in the Search Page
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search from the menu bar
-4: Select Search from the dropdown menu
-5: "Fortran Search" should be one of the tabs listed in the Search dialog
-
-
-Search Button is disallowed for empty strings
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Delete any text in the "Search pattern" text box
-5: The search button should be disabled
-
-
-Search Button is disallowed if no types are specified
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Enter any characters into the "Search Pattern" text box
-5: Uncheck all check boxes in the "Search for" area 
-   (Common block, Function, Subroutine, Module, Variable, Program)
-6: The "Search" button should be disabled
-
-
-Checked Regular Expression checkbox hides glob string instructions
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Check the Regular Expression checkbox
-5: The "glob string instructions" (* = any string, ? = any character) should be hidden
-
-
-Unchecked Regular Expression checkbox shows glob string instructions
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Uncheck the Regular Expression checkbox
-5: The "glob string instructions" (* = any string, ? = any character) 
-   should be visible under the search box
-
-
-Search box saves last search settings
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Select any desired search criteria which will allow for a search
-5: Perform the search (it does not matter if the search fails)
-6: Select Search-> Fortran Search
-7: The settings from the previous search should be enabled, and the string used in 
-   the last search should be in the drop-down menu for the text box
-   
-
-Search button activates a search
-1: Launch eclipse with the Photran plugin.
-2: Ensure that the workspace is in the Fortran Perspective 
-   (Window->Open Perspective-> Other-> Fortran)
-3: Select Search-> Fortran Search
-4: Select any desired search criteria which will allow for a search
-5: Click the Search button
-6: Ensure that the Search tab becomes active, indicating that the search command 
-   was executed
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestCase.java
deleted file mode 100644
index e858272..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestCase.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.eclipse.photran.search.tests;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Scanner;
-
-import org.eclipse.cdt.core.tests.BaseTestFramework;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.photran.internal.ui.search.ReferenceSearchResult;
-import org.eclipse.photran.internal.ui.search.VPGSearchMatch;
-import org.eclipse.photran.internal.ui.search.VPGSearchQuery;
-import org.eclipse.photran.refactoring.tests.Activator;
-import org.eclipse.search.ui.IQueryListener;
-import org.eclipse.search.ui.ISearchQuery;
-import org.eclipse.search.ui.ISearchResult;
-import org.eclipse.search.ui.NewSearchUI;
-import org.eclipse.search.ui.text.Match;
-
-/**
- * A single test case for the Prototype Fortran Search
- * Parameters include filenames, scope, and the string to search for
- * 
- * @author Jeff Dammeyer, Andrew Deason, Joe Digiovanna, Nick Sexmith
- */
-public class VPGSearchTestCase extends BaseTestFramework
-{
-    private static final String DIR = "vpg-search-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String searchString;
-    protected int searchFlags;
-    protected ArrayList<VPGSearchMatch> matches;
-    protected ArrayList<Match> initMatches;
-    protected boolean isRegex;
-    protected ArrayList<IResource> scope;
-
-    public VPGSearchTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-    
-    
-    public VPGSearchTestCase(String searchString, int searchFlags, 
-        ArrayList<Match> matches, boolean isRegex)
-    {
-        this.setName("test");
-        this.searchString = searchString;
-        this.searchFlags = searchFlags;
-        this.isRegex = isRegex;
-        this.matches = new ArrayList<VPGSearchMatch>(matches.size());
-        scope = new ArrayList<IResource>();
-        initMatches = matches;
-        
-        
-    }
-    
-    
-    private IFile getFile(String filename) throws Exception {
-        Scanner sc = new Scanner(Activator.getDefault().getBundle().getResource(DIR + "/" + filename).openStream());
-        sc.useDelimiter("\\A");
-        String contents = sc.next();
-        sc.close();
-        return super.importFile(filename, contents);
-    }
-    
-    @Override
-    protected void setUp() throws Exception {
-        if (searchString == null) return; // when JUnit invokes this outside a test suite
-        super.setUp();
-        convertMatches();
-        createProject();
-    }
-   
-    private void convertMatches() throws Exception { 
-        for (Match m : initMatches)
-        {
-            IFile file = getFile((String)(m.getElement()));
-            matches.add(new VPGSearchMatch(file, m.getOffset(), m.getLength()));    
-           
-            
-        }   
-    }
-    
-    private void createProject(){
-        try{
-            scope.add(getFile("foo.f90"));
-            scope.add(getFile("implicitTest.f90")); 
-        } catch (Exception e){
-            System.out.println("Error in createProject(): "+e);
-        }
-    }
-    
-    private ReferenceSearchResult runQuery(VPGSearchQuery job){
-        
-        final ISearchResult result[]= new ISearchResult[1];
-        
-        IQueryListener listener= new IQueryListener() {
-            public void queryAdded(ISearchQuery query) {}
-            public void queryFinished(ISearchQuery query) {
-                result[0]= query.getSearchResult();
-            }
-            public void queryRemoved(ISearchQuery query) {}
-            public void queryStarting(ISearchQuery query) {}
-        };
-        
-        NewSearchUI.addQueryListener(listener);
-        NewSearchUI.runQueryInForeground(new IRunnableContext() {
-            public void run(boolean fork, boolean cancelable,
-                    IRunnableWithProgress runnable)
-                    throws InvocationTargetException, InterruptedException {
-                runnable.run(pm);
-            }
-        }, job);
-        
-        assertTrue(result[0] instanceof ReferenceSearchResult);
-        return (ReferenceSearchResult)result[0];
-    }
-
-    public void test() throws Exception
-    {
-        if (searchString == null) return; // when JUnit invokes this outside a test suite
-        
-        VPGSearchQuery job = new VPGSearchQuery(scope, "Scope description", searchString, 
-            searchFlags, isRegex);
-        
-        ReferenceSearchResult res = runQuery(job);
-        int count = 0;
-        for(Object obj : res.getElements()) {
-            for (Match m : res.getMatches(obj)) {
-                if (matches.contains((VPGSearchMatch)m))
-                {
-                    count++;
-                }
-                
-            }
-        }
-        assertEquals(matches.size(),count);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java
deleted file mode 100644
index ae50145..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/search/tests/VPGSearchTestSuite.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.eclipse.photran.search.tests;
-
-import java.util.ArrayList;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.photran.internal.ui.search.VPGSearchQuery;
-import org.eclipse.search.ui.text.Match;
-
-/**
- * The suite of tests for testing search functionality
- * 
- * @author Jeff Dammeyer, Andrew Deason, Joe Digiovanna, Nick Sexmith
- */
-public class VPGSearchTestSuite extends TestSuite
-{   
-    /**
-     * Adds all the tests to the suite for searching tests
-     */
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        ArrayList<Match> matches = new ArrayList<Match>();
-        
-        
-        //test 1
-        //Does a basic test across two different files
-        matches.add(new Match("foo.f90",23,1));
-        matches.add(new Match("foo.f90",30,1));
-        matches.add(new Match("implicitTest.f90",22,1));
-        suite.addTest(getSuiteFor("testOne", new VPGSearchTestCase("a",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_ALL_TYPES, matches, false)));
-        
-        //test 2
-        //Same as 2 except different search string
-        matches = new ArrayList<Match>();
-        matches.add(new Match("foo.f90",26,1));
-        matches.add(new Match("implicitTest.f90",67,1));
-        suite.addTest(getSuiteFor("testTwo", new VPGSearchTestCase("b",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_ALL_TYPES, matches, false)));
-
-        //test 3
-        //Tests FIND_DECLARATIONS to make sure it is different from FIND_ALL_OCCURANCES
-        matches = new ArrayList<Match>();
-        matches.add(new Match("foo.f90",23,1));
-        suite.addTest(getSuiteFor("testThree", new VPGSearchTestCase("a",
-            VPGSearchQuery.FIND_DECLARATIONS | VPGSearchQuery.FIND_ALL_TYPES, matches, false)));
-        
-//        //test 4
-//        //Tests FIND_REFERENCES
-//        matches = new ArrayList<Match>();
-//        matches.add(new Match("foo.f90",30,1));
-//        matches.add(new Match("implicitTest.f90",22,1));
-//        suite.addTest(getSuiteFor("testFour", new VPGSearchTestCase("a",
-//            VPGSearchQuery.FIND_REFERENCES | VPGSearchQuery.FIND_ALL_TYPES, matches, false)));
-        
-        //test 5
-        //Tests FIND_FUNCTION to make sure it is different from test 6
-        matches = new ArrayList<Match>();
-        suite.addTest(getSuiteFor("testFive", new VPGSearchTestCase("main",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_FUNCTION, matches, false)));
-        
-        
-        //test 6
-        //Tests FIND_PROGRAM so it's not the same as FIND_FUNCTION
-        matches = new ArrayList<Match>();
-        matches.add(new Match("foo.f90",8,4));
-        suite.addTest(getSuiteFor("testSix", new VPGSearchTestCase("main",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_PROGRAM, matches, false)));
-        
-        //test 7
-        //Tests the glob '?'
-        suite.addTest(getSuiteFor("testSeven", new VPGSearchTestCase("ma?n",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_PROGRAM, matches, false)));
-        
-        //test 8
-        //Tests the glob '*'
-        suite.addTest(getSuiteFor("testEight", new VPGSearchTestCase("m*n",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_PROGRAM, matches, false)));
-
-        //test 9
-        //Tests regex
-        suite.addTest(getSuiteFor("testNine", new VPGSearchTestCase("m.*",
-            VPGSearchQuery.FIND_ALL_OCCURANCES | VPGSearchQuery.FIND_PROGRAM, matches, true)));
-        
-               
-        return suite;
-    }
-    
-    
-    private static TestSuite getSuiteFor(String baseFilename, VPGSearchTestCase testCase)
-    {
-        TestSuite subSuite = new TestSuite(baseFilename);
-        subSuite.addTest(testCase);
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/foo.f90 b/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/foo.f90
deleted file mode 100644
index 40cb623..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/foo.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program main
-  integer a, b
-  a = 5
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/implicitTest.f90 b/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/implicitTest.f90
deleted file mode 100644
index 9b24b0c..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/implicitTest.f90
+++ /dev/null
@@ -1,10 +0,0 @@
-program ImplicitTest
-	a = 1
-	call s
-	stop
-contains
-	subroutine s
-		b = 3
-		return
-	end subroutine
-end program ImplicitTest
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/moduleInclusion.F90 b/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/moduleInclusion.F90
deleted file mode 100644
index 55c451c..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/moduleInclusion.F90
+++ /dev/null
@@ -1,17 +0,0 @@
-PROGRAM hi
-!this should work
-
-
-  USE moduleZiggurat
-  IMPLICIT NONE
-
-  REAL ::  x
-  INTEGER :: i
-
-  DO  i = 1, 10000
-     x = uni( )
-  END DO
-  WRITE(*,*) x
-
-END PROGRAM hi
-
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/nameScoping.F90 b/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/nameScoping.F90
deleted file mode 100644
index 66fd2c3..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-search-test-code/nameScoping.F90
+++ /dev/null
@@ -1,25 +0,0 @@
-
-SUBROUTINE pgmName
-	PRINT *,'Hello'
-END SUBROUTINE pgmName
-
-
-
-PROGRAM pgmName
-!this should work
-
-
-  USE pgmName
-  IMPLICIT NONE
-
-  REAL ::  x
-  INTEGER :: i
-
-  DO  i = 1, 10000
-     x = hi( )
-  END DO
-  WRITE(*,*) x
-  
-  CALL pgmName
-
-END PROGRAM pgmName
