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 bbf21ac..0000000
--- a/org.eclipse.photran-samples/.cproject
+++ /dev/null
@@ -1,101 +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"/>
-<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.MachO" point="org.eclipse.cdt.core.BinaryParser"/>
-</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"/>
-<pathentry kind="src" path="src-interfaces"/>
-</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-interfaces/.cvsignore b/org.eclipse.photran-samples/src-interfaces/.cvsignore
deleted file mode 100644
index 2e87cbd..0000000
--- a/org.eclipse.photran-samples/src-interfaces/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-a.exe
diff --git a/org.eclipse.photran-samples/src-interfaces/gfortran_compile_error.txt b/org.eclipse.photran-samples/src-interfaces/gfortran_compile_error.txt
deleted file mode 100644
index 6bed12b..0000000
--- a/org.eclipse.photran-samples/src-interfaces/gfortran_compile_error.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-!!
-!! Examples of using INTERFACE blocks in Fortran
-!!
-!! INTERFACE blocks have two different uses:
-!!
-!!     1. Declaring the interface of an external subprogram
-!!        (as an alternative to the EXTERNAL statement, which
-!!        declares that the subprogram is external but says nothing
-!!        about its signature)
-!!
-!!     2. Overloading
-!!
-!! J. Overbey 9/15/08
-!!
-module interface_example
-    implicit none
-
-    !! USAGE 1: Declaring the interface of an external subprogram
-    interface
-        integer function one()
-        end function
-
-        integer function two()
-        end function
-    end interface
-
-    ! Note that one and two are exported and can be made private
-    private :: two
-
-    !! USAGE 2: Overloading
-    interface description
-        character(len=*) function description_int(value)
-            integer, intent(in) :: value
-        end function description_int
-        module procedure description_real
-    end interface
-
-contains
-    character(len=50) function description_real(value)
-        real, intent(in) :: value
-        write (description_real, *) "REAL:", value
-    end function
-end module interface_example
-
-program program
-    use interface_example
-    integer :: one, two = 2  ! Note that "two" is hidden in the module
-    print *, one()
-    print *, description(2)
-    print *, description(3.0)
-end program program
-
-!! EXTERNAL SUBPROGRAMS
-integer function one(); one = 1; end function
-integer function two(); two = 2; end function
-character(len=50) function description_int(value)
-    integer, intent(in) :: value
-    write (description_real, *) "INTEGER:", value
-end function
diff --git a/org.eclipse.photran-samples/src-interfaces/interfaces.f90 b/org.eclipse.photran-samples/src-interfaces/interfaces.f90
deleted file mode 100644
index 5cac592..0000000
--- a/org.eclipse.photran-samples/src-interfaces/interfaces.f90
+++ /dev/null
@@ -1,85 +0,0 @@
-!!
-!! Examples of using INTERFACE blocks in Fortran
-!!
-!! INTERFACE blocks have two different uses:
-!!
-!!     1. Declaring the interface of an external subprogram
-!!        (as an alternative to the EXTERNAL statement, which
-!!        declares that the subprogram is external but says nothing
-!!        about its signature)
-!!
-!!     2. Overloading
-!!
-!! J. Overbey 9/15/08
-!!
-module interface_example
-    implicit none
-
-    ! USAGE 1: Declaring the interface of an external subprogram
-
-    ! This declares two functions in the module, named "one" and "two"
-    ! They will be resolved to the corresponding external functions at link time
-    interface
-        integer function one()
-        end function
-
-        integer function two()
-        end function
-    end interface
-
-    ! Since "one" and "two" are in the module, they can be made private; we'll
-    ! hide "two" from the outside world
-    private :: two
-
-    ! USAGE 2: Overloading
-
-    ! This declares a function named "description" which can be called with
-    ! either an integer or real parameter;
-    !     description(1)
-    ! will actually invoke description_int(1), while
-    !     description(2.0)
-    ! will actually invoke description_real(2.0)
-    interface description
-        ! This overload is an external function; we'll use the same syntax as
-        ! above, simply declaring its interface
-        character(len=50) function description_int(value)
-            integer, intent(in) :: value
-        end function description_int
-
-        ! This overload is a procedure in the module, so we can use a
-        ! MODULE PROCEDURE statement since we already know its interface
-        module procedure description_real
-    end interface
-
-    ! INTERFACE blocks can also be used for operator overloading, but I won't
-    ! demonstrate that here
-
-contains
-    character(len=50) function description_real(value)
-        real, intent(in) :: value
-        write (description_real, *) "REAL:", value
-    end function
-end module interface_example
-
-program program
-    use interface_example, only: one, description
-    implicit none
-    integer :: two = 2  ! Note that "two" is hidden in the module,
-                        ! so we can declare a "two" variable here
-
-    ! Call the function declared in the INTERFACE block
-    print *, one()
-
-    ! Call the overloaded "description" function
-    print *, description(two)
-    print *, description(3.0)
-end program program
-
-!! EXTERNAL SUBPROGRAMS
-integer function one(); one = 1; end function
-integer function two(); two = 2; end function
-character(len=50) function description_int(value)
-    implicit none
-    integer, intent(in) :: value
-    write (description_int, *) "INTEGER:", value
-end function
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 8e39f97..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, true /*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
