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 924dc9b..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.5} (Galileo)
-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 6.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\_6\_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\_6\_0''
-		     \item  Then expand ``org.eclipse.cdt cdt\_6\_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 d78e31f..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-history.ltx-inc
+++ /dev/null
@@ -1,24 +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 \\
-      & Sep 2009 & 3.5     & 6.0.0 & \\
-5.0.0 & Oct 2009 & 3.5     & 6.0.? & (Tentative) First official release at eclipse.org
-%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/app-uiuc.ltx-inc b/org.eclipse.photran-dev-docs/dev-guide/app-uiuc.ltx-inc
deleted file mode 100644
index 0d46705..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/app-uiuc.ltx-inc
+++ /dev/null
@@ -1,68 +0,0 @@
-% Additional Information for UIUC Personnel
-
-\begin{center}
-\framebox{\parbox{5.5in}{\textit{The following information is only of interest
-to developers in the Department of Computer Science at the University of
-Illinois at Urbana-Champaign.}}}
-\end{center}
-
-\section{Photran Subversion Repository at UIUC}
-
-A private Subversion repository for internal testing and research work is
-provided by TSG at the following URL.  \textit{You will only be able to access
-this repository if you have specifically been granted access.}  The repository
-requires authentication using your NetID and Kerberos password.
-To access a Subversion repository from Eclipse, you must install an additional
-Eclipse plug-in (either Subclipse or Subversive).
-
-\begin{center}
-\begin{verbatim}
-https://subversion.cs.uiuc.edu/svn/Photran/
-\end{verbatim}
-\end{center}
-
-Currently, this repository contains the following.
-
-\begin{itemize}
-
-\item
-\textbf{Lua refactoring tool (lua-refactoring).}
-A small, prototype, Eclipse-based refactoring tool for the Lua scripting
-language, based on Photran's refactoring infrastructure.
-
-\item
-\textbf{Large Fortran test codes (photran-projects).}
-Checking these out into your workspace will enable about 6,000 additional
-test cases in the JUnit test suite.  \textit{These applications are PRIVATE.
-They may NOT be distributed and are intended only for testing Photran.}
-
-\item
-\textbf{Sample Obfuscation refactoring (sample-refactoring).}
-The sample refactoring described in Appendix~\ref{app:obfuscate_refactoring}.
-
-\item
-\textbf{C preprocessor support (c-preprocessor).}
-C preprocessor support, based on the C preprocessor in CDT 5.  This will
-eventually be moved into the public CVS repository.
-
-\end{itemize}
-
-\section{Photran Web Site at UIUC}
-
-TSG provides a Web hosting infrastructure based on the popular CPanel system
-and has set up a web hosting account for Photran.
-This hosting environment supports PHP, MySQL databases, CGI
-scripts, and a number of other popular web technologies.
-Documentation for these features is provided in the control
-panel.  You can access your web content via the control panel,
-SSH, or WebDAV.
-Here are the account details:
-
-\begin{center}
-\begin{verbatim}
-        web URL: http://photran.cs.illinois.edu/
-  control panel: https://cpanel.cs.illinois.edu:2083/
-     SSH access: cpanel.cs.illinois.edu
-       web root: ~/public_html
-\end{verbatim}
-\end{center}
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.sh b/org.eclipse.photran-dev-docs/dev-guide/build.sh
deleted file mode 100644
index 0c1e63b..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/build.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-pdflatex dev-guide.ltx
-pdflatex dev-guide.ltx
-pdflatex cvs-instructions.ltx
-rm -rf *.aux *.log *.toc *.dvi *.ps *.out
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 70540b7..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/cdt.ltx-inc
+++ /dev/null
@@ -1,269 +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:
-
-{\footnotesize
-\begin{quote}
-\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}
-\end{quote}
-}
-
-\pagebreak
-
-From another of Alain's posts in that thread:
-
-{\footnotesize
-\begin{quote}
-\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}
-\end{quote}
-}
-
-\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 2df610e..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 5.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 7bcf019..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 f163457..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/dev-guide.ltx
+++ /dev/null
@@ -1,115 +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 5.0 Developer's Guide}
-\author{
-\input{authors.ltx}
-}
-\date{}
-
-\maketitle
-
-\tableofcontents
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\chapter{Introduction}\symbolfootnote[0]{Last significant update: 09/16/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 (NC)}
-\label{cha:cdt}
-\input{cdt.ltx-inc}
-
-\chapter{Plug-in Decomposition}\symbolfootnote[0]{Last significant update: 09/16/09 (JO), 08/08/08 (NC)}
-\label{cha:plugins}
-\input{plugins.ltx-inc}
-
-\chapter{Parsing and Program Analysis}\symbolfootnote[0]{Last significant update: 09/16/09 (JO), 08/08/08 (NC)}
-\label{cha:parsing}
-\input{parsing.ltx-inc}
-
-\chapter{Refactoring}\symbolfootnote[0]{Last significant update: 09/16/09 (JO), 08/08/08 (NC)}
-\label{cha:refactoring}
-\input{refactoring.ltx-inc}
-
-\chapter{Photran Editors}\symbolfootnote[0]{Last significant update: 08/08/08 (NC)}
-\label{cha:editor}
-\input{editor.ltx-inc}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\appendix
-
-\chapter{Getting the Photran 5.0 Sources from CVS}\symbolfootnote[0]{Last significant update: 09/16/09}
-\input{app-cvs.ltx-inc}
-
-\chapter{Additional Information for UIUC Personnel}\symbolfootnote[0]{Last significant update: 10/02/09}
-\input{app-uiuc.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 36320f2..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; user's guides and introductory tutorials are available from the
-\href{http://www.eclipse.org/photran/documentation.php}{\emph{Documentation}}
-section of Photran's website.  Contributors also need to understand how to build
-Eclipse plug-ins before they read this document. Two good books on Eclipse
-plug-in development are
-\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.}}  Like almost all Eclipse plug-ins, Photran
-is written in Java, so knowing Java is also a prerequisite.
-
-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 a02a085..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/parsing.ltx-inc
+++ /dev/null
@@ -1,672 +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{fortran2003.bnf} grammar file.
-
-Figure~\ref{fig:images_parser_chain} shows the lexer \& parser tool chain in
-Photran. Preliminary support for (\texttt{INCLUDE} directives) has also been
-implemented.
-
-\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{fortran2003.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{fortran2003.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 rules. 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{fortran2003.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{AST Structure for DO-Loops}
-
-Due to a deficiency in the parser, DO-constructs are not recognized as a single
-construct; DO and END DO statements are recognized as ordinary statements
-alongside the statements comprising their body.  There is a package in the
-core.vpg plug-in called org.eclipse.photran.internal.core.analysis.loops which
-provides machinery to fix this, giving DO-loops a ``proper'' AST structure.
-
-If you call \texttt{LoopReplacer.replaceAllLoopsIn(ast)}, it will identify all
-of the new-style DO-loops and change them to \texttt{ASTProperLoopConstructNode}s,
-which a more natural structure, with a loop header, body, and END DO statement.
-Once this is done, visitors must be implemented by subclassing one of the
-Visitor classes \emph{in the org.eclipse.photran.internal.core.analysis.loops
-package;} these have a callback method to handle
-\texttt{ASTProperLoopConstructNode}s.
-
-\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 $>$ Project\dots $>$ 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, or Eclipse $>$ 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 70b7198..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/plugins.ltx-inc
+++ /dev/null
@@ -1,164 +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.
-
-\begin{itemize}
-
-\item \textbf{org.eclipse.photran.cdtinterface}
-
-This contains most of the components (core and user interface) related
-to integration with the CDT.  It includes:
-\begin{itemize}
-\item The FortranLanguage class, which adds Fortran to the list of languages
-      recognized by CDT
-\item Fortran model elements and icons for the Outline and Fortran Projects views
-\item An extension point for contributing Fortran model builders, and a
-      simple lexical analyzer-based model builder (which, generally speaking,
-      is not used)
-\item The Fortran perspective, Fortran Projects view, and other CDT-based
-      parts of the user interface
-\item New Project wizards and Fortran project templates
-\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.core.vpg}
-
-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 the Open Declaration action, a project
-property page where the user can customize the search path for Fortran modules
-and include files, Fortran Search support, and all of the actions in the
-Refactor menu.
-
-\item \textbf{org.eclipse.photran.cdtinterface.vpg}
-
-This contributes the Fortran model builder which constructs the model seen in
-the Outline view and Fortran Projects view.  It uses the Fortran parser
-contained in the org.eclipse.photran.core.vpg plug-in.
-
-\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 be71bce..0000000
--- a/org.eclipse.photran-dev-docs/dev-guide/refactoring.ltx-inc
+++ /dev/null
@@ -1,335 +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 either
-\texttt{SingleFileFortranRefactoring} or \texttt{MultipleFileFortranRefactoring}.
-Both of these are subclasses of \texttt{AbstractFortranRefactoring}, 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{AbstractFortranRefactoring} 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{AbstractFortranRefactoring} 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{AbstractFortranRefactoring} 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{AbstractFortranRefactoring} 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{AbstractFortranRefactoring}. 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 20978b8..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,270 +0,0 @@
-#Thu Oct 08 11:30:47 CDT 2009
-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.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-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 25d194d..0000000
--- a/org.eclipse.photran.core.vpg.tests.failing/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu Oct 08 11:30:47 CDT 2009
-eclipse.preferences.version=1
-formatter_profile=_Photran
-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 17a6006..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), true));
-        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 4776e5f..0000000
--- a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,270 +0,0 @@
-#Thu Oct 08 11:30:38 CDT 2009
-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.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-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 b439e4e..0000000
--- a/org.eclipse.photran.core.vpg.tests/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu Oct 08 11:30:38 CDT 2009
-eclipse.preferences.version=1
-formatter_profile=_Photran
-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/add-only-to-use-test-code/module2.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module2.f90
deleted file mode 100644
index fbc4a9a..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module2.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-module module2
-    implicit none
-
-    contains
-    subroutine help_common2
-        common /block/ d, e, f
-        integer :: d
-        real :: e
-        double precision :: f
-    end subroutine help_common2
-end module module2
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module3.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module3.f90
deleted file mode 100644
index b029e6a..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module3.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-module module3
-    implicit none
-    integer :: onlyTest = 2
-
-    contains
-    subroutine help_common3
-        common /block/ r, s, t
-        integer :: r
-        real :: s
-        double precision :: t
-
-		print *, onlyTest
-    end subroutine help_common3
-end module module3
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module4.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module4.f90
deleted file mode 100644
index 1df11d8..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module4.f90
+++ /dev/null
@@ -1,10 +0,0 @@
-module module4
-    implicit none
-	integer f
-
-    contains
-    subroutine help_common4
-        common /mem/ a, b, c
-        integer :: a, b, c
-    end subroutine help_common4
-end module module4
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module5.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module5.f90
deleted file mode 100644
index 0888ffa..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/module5.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-module module5
-    implicit none
-end module module5
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90
deleted file mode 100644
index 11a3ddb..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90
+++ /dev/null
@@ -1,27 +0,0 @@
-program program1
-use module2
-use module3
-use module4, only: help_common4
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program program1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90.result b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90.result
deleted file mode 100644
index 11a3ddb..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test1.f90.result
+++ /dev/null
@@ -1,27 +0,0 @@
-program program1
-use module2
-use module3
-use module4, only: help_common4
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program program1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90
deleted file mode 100644
index 11a3ddb..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90
+++ /dev/null
@@ -1,27 +0,0 @@
-program program1
-use module2
-use module3
-use module4, only: help_common4
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program program1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90.result b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90.result
deleted file mode 100644
index 470fefa..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test2.f90.result
+++ /dev/null
@@ -1,27 +0,0 @@
-program program1
-use module2
-use module3, only: help_common3, onlytest
-use module4, only: help_common4
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program program1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test3.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test3.f90
deleted file mode 100644
index 2002d16..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test3.f90
+++ /dev/null
@@ -1,28 +0,0 @@
-program program1
-use module2
-use module3
-use module4, only: help_common4
-use module5
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program program1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test6.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test6.f90
deleted file mode 100644
index 8218a79..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test6.f90
+++ /dev/null
@@ -1,6 +0,0 @@
-program test6
-    use module4
-    implicit none
-    integer f
-    f = 4
-end program test6
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test7.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test7.f90
deleted file mode 100644
index a3c7cf2..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test7.f90
+++ /dev/null
@@ -1,12 +0,0 @@
-program test7
-    use module4
-    implicit none
-
-end program test7
-
-module module4
-    implicit none
-    contains
-        subroutine help
-        end subroutine
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test8.f90 b/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test8.f90
deleted file mode 100644
index 3147a8b..0000000
--- a/org.eclipse.photran.core.vpg.tests/add-only-to-use-test-code/test8.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-program test8
-    use module4
-    implicit none
-
-    call help_common4
-end program test8
-
-subroutine help_common4
-    implicit none
-    real blah
-end subroutine
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/check-can-add-test-code/external.f90 b/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/external.f90
deleted file mode 100644
index d437ea8..0000000
--- a/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/external.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-subroutine declared_external_subroutine
-    implicit none
-    print *, "Called declared_external_subroutine"
-end subroutine declared_external_subroutine
-
-subroutine undeclared_external_subroutine
-    implicit none
-    print *, "Called undeclared_external_subroutine"
-end subroutine undeclared_external_subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/main.f90 b/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/main.f90
deleted file mode 100644
index b348b08..0000000
--- a/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/main.f90
+++ /dev/null
@@ -1,42 +0,0 @@
-program program                                                      ! LINE 1
-    use module
-    implicit none
-
-    external declared_external_subroutine
-    integer :: unused_local_variable
-    integer :: assigned_local_variable
-    integer :: local_variable_accessed_from_internal_subroutine
-
-    ! Don't call unused_defined_external_subroutine
-    call defined_external_subroutine
-    call declared_external_subroutine
-    call undeclared_external_subroutine
-    call internal_subroutine
-    call used_module_subroutine
-
-    assigned_local_variable = local_variable_accessed_from_internal_subroutine
-
-    print *, assigned_local_variable
-
-contains
-
-    subroutine internal_subroutine                                   ! LINE 23
-        print *, "Called internal_subroutine"
-        local_variable_accessed_from_internal_subroutine = 12345
-    end subroutine internal_subroutine
-
-    subroutine unused_internal_subroutine
-        print *, "Called unused_internal_subroutine"
-    end subroutine unused_internal_subroutine
-
-end program program
-
-subroutine defined_external_subroutine
-    implicit none
-    print *, "Called defined_external_subroutine"
-end subroutine defined_external_subroutine
-
-subroutine unused_defined_external_subroutine
-    implicit none
-    print *, "Called unused_defined_external_subroutine"
-end subroutine unused_defined_external_subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/module.f90 b/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/module.f90
deleted file mode 100644
index b3f0d51..0000000
--- a/org.eclipse.photran.core.vpg.tests/check-can-add-test-code/module.f90
+++ /dev/null
@@ -1,20 +0,0 @@
-module module                                                        ! LINE 1
-    implicit none
-    
-    private :: private_module_subroutine
-    
-contains
-    
-    subroutine used_module_subroutine
-        print *, "Called used_module_subroutine"
-    end subroutine used_module_subroutine
-    
-    subroutine unused_module_subroutine
-        print *, "Called unused_module_subroutine"
-    end subroutine unused_module_subroutine
-    
-    subroutine private_module_subroutine
-        print *, "Called private_module_subroutine"
-    end subroutine private_module_subroutine
-    
-end module module
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/intro-implicit-test-code/implicit-subprog.f90 b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/implicit-subprog.f90
deleted file mode 100644
index 8c03502..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/implicit-subprog.f90
+++ /dev/null
@@ -1,3 +0,0 @@
-some_variable = 3.0
-call some_subprogram
-end
diff --git a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/implicit-subprog.f90.result b/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/implicit-subprog.f90.result
deleted file mode 100644
index eeebf87..0000000
--- a/org.eclipse.photran.core.vpg.tests/intro-implicit-test-code/implicit-subprog.f90.result
+++ /dev/null
@@ -1,5 +0,0 @@
-implicit none
-real :: some_variable
-some_variable = 3.0
-call some_subprogram
-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/make-common-var-names-consist-test-code/common1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common1.f90
deleted file mode 100644
index 7ea4663..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common1.f90
+++ /dev/null
@@ -1,27 +0,0 @@
-program common1
-!use common2
-!use common3
-!use common4
-implicit none
-
-common /block/ a, b, c, /mem/ r, f, t
-integer :: a
-real :: b
-double precision :: c
-
-integer :: r, f, t
-
-a = 5
-b = 4.6
-c = 2.345
-
-call helper
-end program common1
-
-subroutine helper
-implicit none
-common /block/ e, f, g
-integer :: e
-real :: f
-double precision :: g
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common1.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common1.f90.result
deleted file mode 100644
index 2f12170..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common1.f90.result
+++ /dev/null
@@ -1,27 +0,0 @@
-program common1
-!use common2
-!use common3
-!use common4
-implicit none
-
-common /block/ a_common, b_common, c_common, /mem/ r, f, t
-integer :: a_common
-real :: b_common
-double precision :: c_common
-
-integer :: r, f, t
-
-a_common = 5
-b_common = 4.6
-c_common = 2.345
-
-call helper
-end program common1
-
-subroutine helper
-implicit none
-common /block/ a_common, b_common, c_common
-integer :: a_common
-real :: b_common
-double precision :: c_common
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90
deleted file mode 100644
index dfbe524..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90
+++ /dev/null
@@ -1,11 +0,0 @@
-module common2
-    implicit none
-
-    contains
-    subroutine help_common2
-        common /block/ d, e, f
-        integer :: d
-        real :: e
-        double precision :: f
-    end subroutine help_common2
-end module common2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90.result
deleted file mode 100644
index 1ecb2bc..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common2.f90.result
+++ /dev/null
@@ -1,11 +0,0 @@
-module common2
-    implicit none
-
-    contains
-    subroutine help_common2
-        common /block/ a_common, b_common, c_common
-        integer :: a_common
-        real :: b_common
-        double precision :: c_common
-    end subroutine help_common2
-end module common2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90
deleted file mode 100644
index 529bbee..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90
+++ /dev/null
@@ -1,14 +0,0 @@
-module common3
-    implicit none
-
-    contains
-    subroutine help_common3
-        common /block/ r, s, t
-        integer :: r
-        real :: s
-        double precision :: t
-
-        common /mem/ a, b, c
-        integer :: a, b, c
-    end subroutine help_common3
-end module common3
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90.result
deleted file mode 100644
index 86dfe27..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common3.f90.result
+++ /dev/null
@@ -1,14 +0,0 @@
-module common3
-    implicit none
-
-    contains
-    subroutine help_common3
-        common /block/ a_common, b_common, c_common
-        integer :: a_common
-        real :: b_common
-        double precision :: c_common
-
-        common /mem/ a, b, c
-        integer :: a, b, c
-    end subroutine help_common3
-end module common3
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90
deleted file mode 100644
index 393355c..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-module common4
-    implicit none
-
-    contains
-    subroutine help_common4
-        common /mem/ a, b, c
-        integer :: a, b, c
-    end subroutine help_common4
-end module common4
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90.result
deleted file mode 100644
index 393355c..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/common4.f90.result
+++ /dev/null
@@ -1,9 +0,0 @@
-module common4
-    implicit none
-
-    contains
-    subroutine help_common4
-        common /mem/ a, b, c
-        integer :: a, b, c
-    end subroutine help_common4
-end module common4
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90
deleted file mode 100644
index 03c6740..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program common1
-    common /block/ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, &
-                   a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1
-end program common1
-
-subroutine s
-    common /block/ i, j
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90.result
deleted file mode 100644
index e25b7ba..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons1.f90.result
+++ /dev/null
@@ -1,8 +0,0 @@
-program common1
-    common /block/ i_common, j_common, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, &
-                   a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1
-end program common1
-
-subroutine s
-    common /block/ i_common, j_common
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90
deleted file mode 100644
index 03c6740..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program common1
-    common /block/ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, &
-                   a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1
-end program common1
-
-subroutine s
-    common /block/ i, j
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90.result
deleted file mode 100644
index ac02c62..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/justCommons2.f90.result
+++ /dev/null
@@ -1,8 +0,0 @@
-program common1
-    common /block/ a_common, b_common, c_common, d_common, e_common, f_common, g_common, h_common, i_common, j_common, k_common, l_common, m_common, n_common, o_common, p_common, q_common, r_common, s_common, t_common, u_common, v_common, w_common, x_common, y_common, z_common, &
-                   a1_common, b1_common, c1_common, d1_common, e1_common, f1_common, g1_common, h1_common, i1_common, j1_common, k1_common, l1_common, m1_common, n1_common, o1_common, p1_common, q1_common, r1_common, s1_common, t1_common, u1_common, v1_common, w1_common, x1_common, y1_common, z1_common
-end program common1
-
-subroutine s_common
-    common /block/ a_common, b_common
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90
deleted file mode 100644
index 728b496..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program namesProv
-    implicit none
-    common /names/ a, b, c
-    integer :: a, b, c
-
-    print *, "Test the test case program with given names"
-end program namesProv
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90.result
deleted file mode 100644
index b2635be..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv1.f90.result
+++ /dev/null
@@ -1,7 +0,0 @@
-program namesProv
-    implicit none
-    common /names/ a_hello, b_hello, c_hello
-    integer :: a_hello, b_hello, c_hello
-
-    print *, "Test the test case program with given names"
-end program namesProv
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90
deleted file mode 100644
index 9fe1e93..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-program namesProv2
-    implicit none
-    common /names/ q, w, e
-    integer q, w, e
-
-    q = 2
-    w = 4
-    e = q + w
-end program namesProv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90.result
deleted file mode 100644
index 089764f..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/namesProv2.f90.result
+++ /dev/null
@@ -1,9 +0,0 @@
-program namesProv2
-    implicit none
-    common /names/ a_hello, b_hello, c_hello
-    integer a_hello, b_hello, c_hello
-
-    a_hello = 2
-    b_hello = 4
-    c_hello = a_hello + b_hello
-end program namesProv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90
deleted file mode 100644
index 728b496..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program namesProv
-    implicit none
-    common /names/ a, b, c
-    integer :: a, b, c
-
-    print *, "Test the test case program with given names"
-end program namesProv
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90.result
deleted file mode 100644
index 96f3687..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName1.f90.result
+++ /dev/null
@@ -1,7 +0,0 @@
-program namesProv
-    implicit none
-    common /names/ a, b, this_is_renamed
-    integer :: a, b, this_is_renamed
-
-    print *, "Test the test case program with given names"
-end program namesProv
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90
deleted file mode 100644
index 9fe1e93..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90
+++ /dev/null
@@ -1,9 +0,0 @@
-program namesProv2
-    implicit none
-    common /names/ q, w, e
-    integer q, w, e
-
-    q = 2
-    w = 4
-    e = q + w
-end program namesProv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90.result
deleted file mode 100644
index df70d2a..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/sameName2.f90.result
+++ /dev/null
@@ -1,9 +0,0 @@
-program namesProv2
-    implicit none
-    common /names/ a, b, this_is_renamed
-    integer a, b, this_is_renamed
-
-    a = 2
-    b = 4
-    this_is_renamed = a + b
-end program namesProv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90
deleted file mode 100644
index 997b2f6..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-program common1
-  implicit none
-
-  common /block/ a, b, c
-  integer :: a
-  real :: b
-  double precision :: c
-
-  a = 5
-  b = 4.6
-  c = 2.345
-  print *, a, b, c
-
-  call helper
-  print *, a, b, c
-end program common1
-
-subroutine helper
-  implicit none
-  common /block/ e, f
-  integer :: e
-  real :: f
-  
-  e = 50
-  f = 40.6
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90.result
deleted file mode 100644
index d3eb58b..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short1.f90.result
+++ /dev/null
@@ -1,26 +0,0 @@
-program common1
-  implicit none
-
-  common /block/ aaa, bbb, ccc
-  integer :: aaa
-  real :: bbb
-  double precision :: ccc
-
-  aaa = 5
-  bbb = 4.6
-  ccc = 2.345
-  print *, aaa, bbb, ccc
-
-  call helper
-  print *, aaa, bbb, ccc
-end program common1
-
-subroutine helper
-  implicit none
-  common /block/ aaa, bbb
-  integer :: aaa
-  real :: bbb
-  
-  aaa = 50
-  bbb = 40.6
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90
deleted file mode 100644
index 997b2f6..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-program common1
-  implicit none
-
-  common /block/ a, b, c
-  integer :: a
-  real :: b
-  double precision :: c
-
-  a = 5
-  b = 4.6
-  c = 2.345
-  print *, a, b, c
-
-  call helper
-  print *, a, b, c
-end program common1
-
-subroutine helper
-  implicit none
-  common /block/ e, f
-  integer :: e
-  real :: f
-  
-  e = 50
-  f = 40.6
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90.result b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90.result
deleted file mode 100644
index aec64bd..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/short2.f90.result
+++ /dev/null
@@ -1,26 +0,0 @@
-program common1
-  implicit none
-
-  common /block/ aaa, bbb, c
-  integer :: aaa
-  real :: bbb
-  double precision :: c
-
-  aaa = 5
-  bbb = 4.6
-  c = 2.345
-  print *, aaa, bbb, c
-
-  call helper
-  print *, aaa, bbb, c
-end program common1
-
-subroutine helper
-  implicit none
-  common /block/ aaa, bbb
-  integer :: aaa
-  real :: bbb
-  
-  aaa = 50
-  bbb = 40.6
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer1.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer1.f90
deleted file mode 100644
index 42a081b..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer1.f90
+++ /dev/null
@@ -1,26 +0,0 @@
-program common1
-  implicit none
-
-  common /block/ a, b, c
-  integer :: a
-  real :: b
-  double precision :: c
-
-  a = 5
-  b = 4.6
-  c = 2.345
-  print *, a, b, c
-
-  call helper
-  print *, a, b, c
-end program common1
-
-subroutine helper
-  implicit none
-  common /block/ e, f
-  integer :: e
-  double precision :: f  ! type differs
-  
-  e = 50
-  f = 40.6
-end subroutine helper
diff --git a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer2.f90 b/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer2.f90
deleted file mode 100644
index 3befc00..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-common-var-names-consist-test-code/typesDiffer2.f90
+++ /dev/null
@@ -1,10 +0,0 @@
-program differ
-   common /block/ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, &
-                  a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, u1, v1, w1, x1, y1, z1
-   integer a, b
-   end program differ
-
-subroutine s
-   common /block/ i, j
-   real i, j
-end subroutine
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/main.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/main.f90
deleted file mode 100644
index e430664..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/main.f90
+++ /dev/null
@@ -1,34 +0,0 @@
-module module1
-   implicit none
-   private
-contains
-   ! sub1a cannot be made public w/o ONLY clause in main
-   subroutine sub1a
-       print *, "sub1a in module1"
-   end subroutine
-   ! sub1b can be made public
-   subroutine sub1b
-       print *, "sub1b in module1"
-   end subroutine
-end module module1
-
-module module2
-   implicit none
-   ! integer1 and integer3 cannot be made public w/o ONLY clause
-   ! integer2 and integer4 can be made public
-   integer, private :: integer1, integer2
-   integer :: integer3, integer4
-   private :: integer4, integer3
-end module
-
-program main
-   use module1
-   use module2
-   implicit none
-   integer :: integer1, integer3
-   call sub1a  ! local, not import
-contains
-   subroutine sub1a
-       print *, "sub1a in main program"
-   end subroutine
-end program main
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90
deleted file mode 100644
index e5f415a..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program priv1
-    implicit none
-    integer a, b, c
-    private a, c
-end program priv1
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90.result
deleted file mode 100644
index 575db5e..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv1.f90.result
+++ /dev/null
@@ -1,6 +0,0 @@
-program priv1
-    implicit none
-    integer a, b, c
-    private c
-    public a
-end program priv1
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90
deleted file mode 100644
index ece640a..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program priv2
-    implicit none
-    double precision f
-    real q
-    private f
-    public q
-end program priv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90.result
deleted file mode 100644
index 813a5ed..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/priv2.f90.result
+++ /dev/null
@@ -1,7 +0,0 @@
-program priv2
-    implicit none
-    double precision f
-    real q
-    public f
-    public q
-end program priv2
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90
deleted file mode 100644
index f3aa5be..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-program test
-    implicit none
-    private
-    real, optional :: blah, hi
-contains
-    subroutine helpMe
-    end subroutine
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90.result
deleted file mode 100644
index 78f1f4e..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test12.f90.result
+++ /dev/null
@@ -1,9 +0,0 @@
-program test
-    implicit none
-    private
-    public helpMe
-    real, optional :: blah, hi
-contains
-    subroutine helpMe
-    end subroutine
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test13.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test13.f90
deleted file mode 100644
index 906a55e..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test13.f90
+++ /dev/null
@@ -1,18 +0,0 @@
-program private
-    implicit none
-    real, private :: blah
-    integer, private, optional :: priv, blah
-    real :: hi
-    private :: hi
-
-    intrinsic hello
-    external goodbye
-    private hello
-contains
-    subroutine hello
-    private
-    end subroutine
-
-    function FFF()
-    end function
-end program private
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90
deleted file mode 100644
index e212ab9..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program test3
-    implicit none
-    integer, private :: var
-end program test3
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90.result
deleted file mode 100644
index 6b84710..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test3.f90.result
+++ /dev/null
@@ -1,4 +0,0 @@
-program test3
-    implicit none
-    integer,public :: var
-end program test3
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90
deleted file mode 100644
index c6c7be3..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program test4
-    implicit none
-    real, private :: blah, hi
-end program test4
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90.result
deleted file mode 100644
index 9125dfa..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test4.f90.result
+++ /dev/null
@@ -1,5 +0,0 @@
-program test4
-    implicit none
-    real, private :: hi
-    real, public :: blah
-end program test4
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90
deleted file mode 100644
index 0bc997b..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program test5
-    implicit none
-    integer, private, optional :: attrs
-end program test5
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90.result
deleted file mode 100644
index d6158c2..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test5.f90.result
+++ /dev/null
@@ -1,4 +0,0 @@
-program test5
-    implicit none
-    integer,public, optional :: attrs
-end program test5
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90
deleted file mode 100644
index 969da0b..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program test6
-    implicit none
-    integer, private, optional :: attrs, blah
-end program test6
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90.result
deleted file mode 100644
index 7476ae0..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test6.f90.result
+++ /dev/null
@@ -1,5 +0,0 @@
-program test6
-    implicit none
-    integer, private, optional :: attrs
-    integer, public, optional :: blah
-end program test6
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90
deleted file mode 100644
index 2b041ac..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program test7
-    implicit none
-    private
-    real :: r
-    integer five
-    real, optional :: blah
-end program test7
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90.result
deleted file mode 100644
index 9a2f528..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7.f90.result
+++ /dev/null
@@ -1,7 +0,0 @@
-program test7
-    implicit none
-    private
-    real :: r
-    integer five
-    real, public, optional :: blah
-end program test7
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90
deleted file mode 100644
index 063ed82..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90
+++ /dev/null
@@ -1,7 +0,0 @@
-program test7_1
-    implicit none
-    private
-    real :: r
-    integer five
-    real, optional :: blah, ok
-end program test7_1
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90.result b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90.result
deleted file mode 100644
index 1924a44..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/test7_1.f90.result
+++ /dev/null
@@ -1,8 +0,0 @@
-program test7_1
-    implicit none
-    private
-    real :: r
-    integer five
-    real, optional :: ok
-    real, public, optional :: blah
-end program test7_1
diff --git a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/testFile1.f90 b/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/testFile1.f90
deleted file mode 100644
index 59475f6..0000000
--- a/org.eclipse.photran.core.vpg.tests/make-private-entity-public-test-code/testFile1.f90
+++ /dev/null
@@ -1,13 +0,0 @@
-program testFile
-    real a, b
-    double precision dd
-    integer g
-    public a, b
-    private dd
-end program testFile
-
-subroutine help
-    integer q, w, e
-    public q, w
-    private e
-end subroutine help
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/module.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/module.f90
deleted file mode 100644
index 2d8c83a..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/module.f90
+++ /dev/null
@@ -1,8 +0,0 @@
-module module
-    implicit none
-    integer :: i
-contains
-    subroutine helper
-        print *, "You've been helped."
-    end subroutine helper
-end module module
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90
deleted file mode 100644
index cfe4c26..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90
+++ /dev/null
@@ -1,6 +0,0 @@
-program test
-    use module, only: i, helper
-    implicit none
-    i = 5
-    call helper
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90.result b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90.result
deleted file mode 100644
index cf5c012..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test1.f90.result
+++ /dev/null
@@ -1,6 +0,0 @@
-program test
-    use module
-    implicit none
-    i = 5
-    call helper
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90
deleted file mode 100644
index 7413856..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program test2
-    use module, only: i, helper
-    implicit none
-    call helper
-end program test2
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90.result b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90.result
deleted file mode 100644
index 1caf92c..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test2.f90.result
+++ /dev/null
@@ -1,5 +0,0 @@
-program test2
-    use module, only: helper
-    implicit none
-    call helper
-end program test2
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90
deleted file mode 100644
index 4b464e2..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90
+++ /dev/null
@@ -1,4 +0,0 @@
-program test3
-    use module, only: i, helper
-    implicit none
-end program test3
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90.result b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90.result
deleted file mode 100644
index 297f3b4..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test3.f90.result
+++ /dev/null
@@ -1,3 +0,0 @@
-program test3
-    implicit none
-end program test3
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test4_5.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test4_5.f90
deleted file mode 100644
index 1396619..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test4_5.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program test
-    use module, only: i, helper
-    use emptyModule, only: help
-    implicit none
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test6.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test6.f90
deleted file mode 100644
index f583515..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test6.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program test
-    use module, only: i, helper
-    use nonexistant, only: what
-    implicit none
-end program test
diff --git a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test7.f90 b/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test7.f90
deleted file mode 100644
index 8079ac5..0000000
--- a/org.eclipse.photran.core.vpg.tests/min-only-list-test-code/test7.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-program test
-    use module, only: i, helper
-    implicit none
-    integer :: q
-end program test
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/addonlytousestmt/AddOnlyToUseTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/addonlytousestmt/AddOnlyToUseTestCase.java
deleted file mode 100644
index 5a641dd..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/addonlytousestmt/AddOnlyToUseTestCase.java
+++ /dev/null
@@ -1,136 +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.addonlytousestmt;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.Document;
-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.AddOnlyToUseStmtRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- *
- * @author Kurt Hendle
- */
-public class AddOnlyToUseTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "add-only-to-use-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-
-    protected String[] filenames;
-    protected LineCol position;
-    protected int length;
-    protected boolean shouldFailPreconditionCheck;
-    protected boolean shouldFailFinalPreconditionCheck;
-    protected String[] entityNames = null;
-
-    public AddOnlyToUseTestCase() {;}
-
-    public AddOnlyToUseTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck,
-        boolean shouldFailFinalPreCheck)
-    {
-        this(filenames, position, length, shouldFailPreconditionCheck,
-            shouldFailFinalPreCheck, (String[])null);
-    }
-
-    public AddOnlyToUseTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck,
-                                  boolean shouldFailFinalPreCheck, String... entityNames)
-    {
-        this.filenames = filenames;
-        this.position = position;
-        this.length = length;
-        this.shouldFailPreconditionCheck = shouldFailPreconditionCheck;
-        this.shouldFailFinalPreconditionCheck = shouldFailFinalPreCheck;
-        this.entityNames = entityNames;
-        this.setName("test");
-    }
-
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempting to add ONLY clause to USE statement.";
-
-        AddOnlyToUseStmtRefactoring refactoring = createRefactoring(filenames, position, length);
-
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-
-        if(shouldFailPreconditionCheck)
-            assertTrue(description + " failed initial precondition check: " + status.toString(), status.hasError());
-
-        if(entityNames != null)
-        {
-            for(int i=0; i<entityNames.length; i++)
-                refactoring.addToOnlyList(entityNames[i]);
-        }
-
-        status = refactoring.checkFinalConditions(pm);
-        if (shouldFailFinalPreconditionCheck)
-        {
-            assertTrue(description + "failed final precondition check: " + status.toString(), status.hasError());
-        }
-        else
-        {
-            assertTrue(description + "should not fail 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);
-        }
-    }
-
-    private String readFileToString(final String path) throws IOException
-    {
-        FileInputStream stream = new FileInputStream(new File(path));
-        return readStream(stream);
-    }
-
-    private AddOnlyToUseStmtRefactoring createRefactoring(final String[] filenames, final LineCol lineCol, final int length) throws Exception
-    {
-        for (int i = 1; i < filenames.length; i++)
-            importFile(DIR, filenames[i]);
-
-        final IFile file = importFile(DIR, filenames[0]);
-        Document doc = new Document(readFileToString(DIR+"/"+filenames[0]));
-        TextSelection text = new TextSelection(doc, getLineColOffset(filenames[0], lineCol), length);
-        return new AddOnlyToUseStmtRefactoring(file, text);
-    }
-
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    public void test() throws Exception
-    {
-        if (filenames == null) return; // when JUnit invokes this outside a test suite
-
-        doRefactoring();
-        if (!shouldFailPreconditionCheck && !shouldFailFinalPreconditionCheck)
-            assertEquals(
-                sanitize(readTestFile(filenames[0] + ".result")),
-                sanitize(readWorkspaceFile(filenames[0])));
-    }
-
-    public String sanitize(String dirtyString)
-    {
-        return dirtyString.replaceAll("\r", "");
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/addonlytousestmt/AddOnlyToUseTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/addonlytousestmt/AddOnlyToUseTestSuite.java
deleted file mode 100644
index 61d841c..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/addonlytousestmt/AddOnlyToUseTestSuite.java
+++ /dev/null
@@ -1,90 +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.addonlytousestmt;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * 
- * @author Kurt Hendle
- */
-public class AddOnlyToUseTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-        
-        //1. basic test, add no list, leave the file the same
-        String[] test1Files = new String[] { "test1.f90", "module2.f90", "module3.f90", "module4.f90" };
-        suite.addTest(successTest(test1Files, new LineCol(3,5), 7));
-        
-        //2. basic test, add list of given names
-        String[] test2Files = new String[] { "test2.f90", "module2.f90", "module3.f90", "module4.f90" };
-        suite.addTest(successTest(test2Files, new LineCol(3,5), 7, "help_common3", "onlyTest"));
-        
-        //3. precondition test - give an empty selection for module name
-        String[] test3Files = new String[] { "test3.f90", "module2.f90", "module3.f90", "module4.f90", "module5.f90" };
-        suite.addTest(finalPreconditionTest(test3Files, new LineCol(3,5), 0));
-        
-        //4. precondition test - give a non-existent module name
-        String[] test4Files = new String[] { "test3.f90", "module2.f90", "module3.f90", "module4.f90", "module5.f90" };
-        suite.addTest(finalPreconditionTest(test4Files, new LineCol(8,9), 5));
-        
-        //5. precondition test - give a module containing no declarations
-        String[] test5Files = new String[] { "test3.f90", "module2.f90", "module3.f90", "module4.f90", "module5.f90" };
-        suite.addTest(preconditionTest(test5Files, new LineCol(5,5), 7));
-        
-        //6. precondition test - have entity conflict with local variable
-        String[] test6Files = new String[] { "test6.f90", "module4.f90" };  //v name conflict
-        suite.addTest(finalPreconditionTest(test6Files, new LineCol(2,9), 7, "f"));
-        
-        //7. precondition test - have 2 modules in project with same name
-        String[] test7Files = new String[] { "test7.f90", "module4.f90" };
-        suite.addTest(preconditionTest(test7Files, new LineCol(2,9), 7));
-        
-        //8. precondition test - have 2 declarations of subroutine in same project
-        String[] test8Files = new String[] { "test8.f90", "module4.f90" };
-        suite.addTest(finalPreconditionTest(test8Files, new LineCol(2,9), 7, "help_common4"));
-        
-        return suite;
-    }
-    
-    private static TestSuite successTest(String[] filenames, LineCol position, int length)
-    {
-        return successTest(filenames, position, length, (String[])null);
-    }
-    
-    private static TestSuite successTest(String[] filenames, LineCol position, int length, String... entityNames)
-    {
-        TestSuite subSuite = new TestSuite("Adding ONLY clause to USE statement - " + filenames[0]);
-        subSuite.addTest(new AddOnlyToUseTestCase(filenames, position, length, false, false, entityNames));
-        return subSuite;
-    }
-    
-    private static TestSuite preconditionTest(String[] filenames, LineCol position, int length, String... entityNames)
-    {
-        TestSuite subSuite = new TestSuite("Testing preconditions for adding ONLY to USE statement - " +
-            filenames[0]);
-        subSuite.addTest(new AddOnlyToUseTestCase(filenames, position, length, true, false, entityNames));
-        return subSuite;
-    }
-    
-    private static TestSuite finalPreconditionTest(String[] filenames, LineCol position, int length, String... entityNames)
-    {
-        TestSuite subSuite = new TestSuite("Testing final preconditions for adding ONLY to USE statement - " +
-            filenames[0]);
-        subSuite.addTest(new AddOnlyToUseTestCase(filenames, position, length, false, true, entityNames));
-        return subSuite;   
-    }
-}
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/i_list_all/ListAllModulesTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/i_list_all/ListAllModulesTestCase.java
deleted file mode 100644
index 3c3c196..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/i_list_all/ListAllModulesTestCase.java
+++ /dev/null
@@ -1,67 +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.i_list_all;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * Unit tests for {@link PhotranVPG#listAllModules()}
- *
- * @author Jeff Overbey
- */
-public class ListAllModulesTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "vpg-list-test-code";
-
-    @Override public void setUp() throws Exception
-    {
-        super.setUp();
-
-        /* The files are imported in this order so that the USE
-         * statement in use-module1.f90 is seen /before/
-         * the module declaration, while the USE statement for
-         * module 4 is seen after it.  Module2 and module3
-         * are not used.
-         */
-
-        importFile(DIR, "use-module1.f90");
-        importFile(DIR, "module1.f90");
-        importFile(DIR, "module2-module3.f90");
-        importFile(DIR, "module4.f90");
-        importFile(DIR, "use-module4.f90");
-        PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor());
-        //PhotranVPG.getDatabase().printOn(System.out);
-    }
-
-    public void testListAllModules() throws Exception
-    {
-        assertCollectionsEqual(
-            new String[] { "module1", "module2", "module3", "module4" },
-            PhotranVPG.getInstance().listAllModules());
-    }
-
-    private <T> void assertCollectionsEqual(T[] expectedArray, Iterable<T> actualIterable)
-    {
-        List<T> expected = Arrays.asList(expectedArray);
-
-        List<T> actual = new ArrayList<T>();
-        for (T entry : actualIterable)
-            actual.add(entry);
-
-        assertEquals(expected, actual);
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestCase.java
deleted file mode 100644
index 7e67895..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestCase.java
+++ /dev/null
@@ -1,111 +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.makeprivatepublic;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.Document;
-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.MakePrivateEntityPublicRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- *
- * @author Kurt Hendle
- */
-public class MakePrivateEntityPublicTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "make-private-entity-public-test-code";
-
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-
-    protected String filename;
-    protected LineCol position;
-    protected int length;
-    protected boolean shouldFailPreconditionCheck;
-
-    public MakePrivateEntityPublicTestCase() {;}
-
-    public MakePrivateEntityPublicTestCase(String filename, LineCol position, int length, boolean shouldFailPreconditionCheck)
-    {
-        this.filename = filename;
-        this.position = position;
-        this.length = length;
-        this.shouldFailPreconditionCheck = shouldFailPreconditionCheck;
-        this.setName("test");
-    }
-
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempting to make selected private variable public.";
-
-        MakePrivateEntityPublicRefactoring refactoring = createRefactoring(filename, position, length);
-
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-
-        if(shouldFailPreconditionCheck)
-            assertTrue(description + " failed initial precondition check: " + status.toString(), status.hasError());
-
-        status = refactoring.checkFinalConditions(pm);
-        assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
-
-        if(!shouldFailPreconditionCheck)
-        {
-            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);
-        }
-    }
-
-    private MakePrivateEntityPublicRefactoring createRefactoring(final String filename, final LineCol lineCol, final int length) throws Exception
-    {
-        final IFile file = importFile(DIR, filename);
-        Document doc = new Document(readFileToString(DIR+"/"+filename));
-        TextSelection text = new TextSelection(doc, getLineColOffset(filename, lineCol), length);
-        return new MakePrivateEntityPublicRefactoring(file, text);
-    }
-
-    private String readFileToString(final String path) throws IOException
-    {
-        FileInputStream stream = new FileInputStream(new File(path));
-        return readStream(stream);
-    }
-
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-
-    public void test() throws Exception
-    {
-        if(filename == null) return;
-
-        doRefactoring();
-        if(!shouldFailPreconditionCheck)
-            assertEquals(
-                sanitize(readTestFile(filename + ".result")),
-                sanitize(readWorkspaceFile(filename)));
-    }
-
-    public String sanitize(String dirtyString)
-    {
-        return dirtyString.replaceAll("\r", "");
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestSuite.java
deleted file mode 100644
index b148bb1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/makeprivatepublic/MakePrivateEntityPublicTestSuite.java
+++ /dev/null
@@ -1,88 +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.makeprivatepublic;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- *
- * @author Kurt Hendle
- */
-public class MakePrivateEntityPublicTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-
-        //1. functionality test - multiple variables in list
-        suite.addTest(successTest("priv1.f90",new LineCol(4,13), 1));
-
-        //2. functionality test - single variable list (simply change private to public)
-        suite.addTest(successTest("priv2.f90",new LineCol(5,13), 1));
-
-        //3. functionality test - single variable, private statement in declaration attributes
-        suite.addTest(successTest("test3.f90", new LineCol(3,25), 1));
-
-        //4. functionality test - multiple variables, private statement in declaration attributes
-        suite.addTest(successTest("test4.f90", new LineCol(3,22), 4));
-
-        //5. functionality test - single var, private stmt and other attributes in declaration
-        suite.addTest(successTest("test5.f90", new LineCol(3,35), 5));
-
-        //6. functionality test - mult. vars., private stmt and other attributes in declaration
-        suite.addTest(successTest("test6.f90", new LineCol(3,42), 4));
-
-        //7. functionality test - private statement alone, all program entities private
-        suite.addTest(successTest("test7.f90", new LineCol(6,23), 4));
-        suite.addTest(successTest("test7_1.f90", new LineCol(6,23), 4));
-
-        //8. precondition test - empty selection ""
-        suite.addTest(preconditionTest("priv1.f90", new LineCol(3,13), 0));
-
-        //9. precondition test - select variable which is not tagged private
-        suite.addTest(preconditionTest("priv1.f90", new LineCol(3,16), 1));
-        suite.addTest(preconditionTest("testFile1.f90", new LineCol(4,13), 1));
-
-        //10. precondition test - select a public variable
-        suite.addTest(preconditionTest("priv2.f90", new LineCol(6,12), 1));
-        suite.addTest(preconditionTest("testFile1.f90", new LineCol(11,15), 1));
-
-        //11. precondition test - test if possible to make definition public
-        // NOTE: will fail til ScopingNode#canAddDefinition is added
-        // FIXME JO suite.addTest(preconditionTest("main.f90", new LineCol(19,24), 8));
-
-        //12. functionality test - subroutine/function made private by a lone private stmt
-        suite.addTest(successTest("test12.f90", new LineCol(6,16), 6));
-
-        //13 precondition test - subroutine/function not made private
-        suite.addTest(preconditionTest("test13.f90", new LineCol(16,14), 3));
-
-        return suite;
-    }
-
-    private static TestSuite successTest(String filename, LineCol position, int length)
-    {
-        TestSuite subSuite = new TestSuite("Making private variable public - " + filename);
-        subSuite.addTest(new MakePrivateEntityPublicTestCase(filename, position, length, false));
-        return subSuite;
-    }
-
-    private static TestSuite preconditionTest(String filename, LineCol position, int length)
-    {
-        TestSuite subSuite = new TestSuite("Testing preconditions for making private entity public - " +
-            filename);
-        subSuite.addTest(new MakePrivateEntityPublicTestCase(filename, position, length, true));
-        return subSuite;
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestCase.java
deleted file mode 100644
index c1f831e..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestCase.java
+++ /dev/null
@@ -1,115 +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.minonlylist;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.Document;
-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.MinOnlyListRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * 
- * @author Kurt Hendle
- */
-public class MinOnlyListTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "min-only-list-test-code";
-    
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String[] filenames;
-    protected LineCol position;
-    protected int length; 
-    protected boolean shouldFailPreconditionCheck;
-    protected boolean shouldFailFinalPreCheck;
-
-    public MinOnlyListTestCase() {;}
-    
-    public MinOnlyListTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck)
-    {
-        this.filenames = filenames;
-        this.position = position;
-        this.length = length;
-        this.shouldFailPreconditionCheck = shouldFailPreconditionCheck;
-        this.setName("test");
-    }
-    
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempting to minimize ONLY list.";
-        
-        MinOnlyListRefactoring refactoring = createRefactoring(filenames, position, length);
-        
-        RefactoringStatus status = refactoring.checkInitialConditions(pm);
-        
-        if(shouldFailPreconditionCheck)
-            assertTrue(description + " failed initial precondition check: " + status.toString(), status.hasError());
-        
-        status = refactoring.checkFinalConditions(pm);
-        if (shouldFailPreconditionCheck)
-        {   //no error will show up since nothing done in final check conditions
-            assertTrue(description + "failed final precondition check: " + status.toString(), !status.hasError());
-        }
-        else
-        {
-            assertTrue(description + "should not fail 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);
-        }
-    }
-    
-    private MinOnlyListRefactoring createRefactoring(final String[] filenames, final LineCol lineCol, final int length) throws Exception
-    {
-        for (int i = 1; i < filenames.length; i++)
-            importFile(DIR, filenames[i]);
-        
-        final IFile file = importFile(DIR, filenames[0]);
-        Document doc = new Document(readFileToString(DIR+"/"+filenames[0]));
-        TextSelection text = new TextSelection(doc, getLineColOffset(filenames[0], lineCol), length);
-        return new MinOnlyListRefactoring(file, text);
-    }
-    
-    private String readFileToString(final String path) throws IOException
-    {
-        FileInputStream stream = new FileInputStream(new File(path));
-        return readStream(stream);
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-    
-    public void test() throws Exception
-    {        
-        if(filenames == null) return;
-        
-        doRefactoring();
-        if(!shouldFailPreconditionCheck)
-            assertEquals(readTestFile(filenames[0] + ".result"), readWorkspaceFile(filenames[0]));
-    }
-}
diff --git a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestSuite.java
deleted file mode 100644
index c1809ec..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/minonlylist/MinOnlyListTestSuite.java
+++ /dev/null
@@ -1,72 +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.minonlylist;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- *
- * @author Kurt Hendle
- */
-public class MinOnlyListTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-
-        //1. functionality test - all module entities used, remove list
-        String[] test1Files = {"test1.f90", "module.f90"};
-        // FIXME JO suite.addTest(successTest(test1Files, new LineCol(2,9), 6));
-
-        //2. functionality test - remove the unused module entity from the list
-        String[] test2Files = {"test2.f90", "module.f90"};
-        // FIXME JO suite.addTest(successTest(test2Files, new LineCol(2,9), 6));
-
-        //3. functionality test - no module entities used, remove the use statement
-        String[] test3Files = {"test3.f90", "module.f90"};
-        suite.addTest(successTest(test3Files, new LineCol(2,9), 6));
-
-        //4. precondition test - select empty module name
-        String[] test4and5Files = {"test4_5.f90", "module.f90"};
-        suite.addTest(preconditionTest(test4and5Files, new LineCol(2,9), 0));
-
-        //5. precondition test - empty module selected
-        suite.addTest(preconditionTest(test4and5Files, new LineCol(3,9), 11));
-
-        //6. precondition test - nonexistant module selected
-        String[] test6Files = {"test6.f90", "module.f90"};
-        suite.addTest(preconditionTest(test6Files, new LineCol(3,9), 11));
-
-        //7. precondition test - select entity which is not module
-        String[] test7Files = {"test7.f90", "module.f90"};
-        suite.addTest(preconditionTest(test7Files, new LineCol(4,16), 1));
-
-        return suite;
-    }
-
-    private static TestSuite successTest(String[] filenames, LineCol position, int length)
-    {
-        TestSuite subSuite = new TestSuite("Minimizing only List - " + filenames[0]);
-        subSuite.addTest(new MinOnlyListTestCase(filenames, position, length, false));
-        return subSuite;
-    }
-
-    private static TestSuite preconditionTest(String[] filenames, LineCol position, int length)
-    {
-        TestSuite subSuite = new TestSuite("Testing preconditions for minimizing only list - " +
-            filenames[0]);
-        subSuite.addTest(new MinOnlyListTestCase(filenames, position, length, true));
-        return subSuite;
-    }
-}
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/ParseProjectConfidentialWRF.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWRF.java
deleted file mode 100644
index d2ec195..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/internal/core/tests/projects/ParseProjectConfidentialWRF.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 ParseProjectConfidentialWRF
-{
-    public static Test suite() throws FileNotFoundException, IOException
-    {
-        return new MultiTestSuite("../../org.eclipse.photran-projects.confidential.wrf", 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 9f1c027..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/RefactoringTestCase.java
+++ /dev/null
@@ -1,313 +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.  If a specific ordering of the filenames is desired, it
-     * must be passed as an argument to this method; otherwise, all *.f* resources in the
-     * test project will be passed to the compiler in no specific order.
-     * <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(String... filenamesOpt) 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);
-        if (filenamesOpt == null || filenamesOpt.length == 0)
-        {
-            for (IResource res : project.members())
-                if (res instanceof IFile && res.getFileExtension().startsWith("f"))
-                    args.add(res.getName());
-        }
-        else
-        {
-            for (String filename : filenamesOpt)
-                args.add(filename);
-        }
-
-        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/commonblockvarnames/CommonVarNamesTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/commonblockvarnames/CommonVarNamesTestCase.java
deleted file mode 100644
index 471997b..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/commonblockvarnames/CommonVarNamesTestCase.java
+++ /dev/null
@@ -1,147 +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.commonblockvarnames;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.text.Document;
-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.CommonVarNamesRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * Test case for the Make Common Variable Names Consistent refactoring
- * 
- * @author Kurt Hendle
- * @author Jeff Overbey
- * 
- * @see CommonVarNamesTestSuite
- */
-public class CommonVarNamesTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "make-common-var-names-consist-test-code";
-    
-    private static NullProgressMonitor pm = new NullProgressMonitor();
-    
-    protected String[] filenames;
-    protected LineCol position;
-    protected int length;
-    protected boolean shouldFailPreconditionCheck;
-    protected String[] newNames = null;
-
-    public CommonVarNamesTestCase() {;}
-    
-    public CommonVarNamesTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck)
-    {
-        this(filenames, position, length, shouldFailPreconditionCheck, (String[])null);
-    }
-    
-    public CommonVarNamesTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck,
-                                  String... newNames)
-    {
-        this.filenames = filenames;
-        this.position = position;
-        this.length = length;
-        this.shouldFailPreconditionCheck = shouldFailPreconditionCheck;
-        this.newNames = newNames;
-        this.setName("test");
-    }
-    
-    /** very similar to the other refactoring tests */
-    protected void doRefactoring() throws Exception
-    {
-        String description = "Attempting to make COMMON variables consistent throughout project.";
-        
-        CommonVarNamesRefactoring refactoring = createRefactoring(filenames, position, length);
-        
-//        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());
-        
-        if(newNames != null)
-        {
-            for(int i=0; i<newNames.length; i++)
-                refactoring.modifyNewName(i, newNames[i]);
-        }
-        
-        status = refactoring.checkFinalConditions(pm);
-        if (shouldFailPreconditionCheck)
-        {
-            assertTrue(description + " should have failed final precondition check: " + status.toString(), status.hasError());
-        }
-        else
-        {
-            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);
-            
-    //        String after = compileAndRunFortranProgram();
-    //        System.out.println(after);
-    //        assertEquals(before, after);
-        }
-    }
-    
-    private CommonVarNamesRefactoring createRefactoring(final String[] filenames, final LineCol lineCol, final int length) throws Exception
-    {
-        for (int i = 1; i < filenames.length; i++)
-            importFile(DIR, filenames[i]);
-        
-        final IFile file = importFile(DIR, filenames[0]);
-        Document doc = new Document(readFileToString(DIR+"/"+filenames[0]));
-        TextSelection text = new TextSelection(doc, getLineColOffset(filenames[0], lineCol), length);
-        return new CommonVarNamesRefactoring(file, text);
-    }
-    
-    private String readFileToString(final String path) throws IOException
-    {
-        FileInputStream stream = new FileInputStream(new File(path));
-        return readStream(stream);
-    }
-    
-    protected String readTestFile(String filename) throws IOException, URISyntaxException
-    {
-        return super.readTestFile(DIR, filename);
-    }
-    
-    /**
-     * Borrowed from IntroImplicitTestCase.java
-     */
-    public void test() throws Exception
-    {
-        if (filenames == null) return; // when JUnit invokes this outside a test suite
-        
-        doRefactoring();
-        if (!shouldFailPreconditionCheck)
-        {
-            for (String filename : filenames)
-            {
-                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/commonblockvarnames/CommonVarNamesTestSuite.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/commonblockvarnames/CommonVarNamesTestSuite.java
deleted file mode 100644
index 3e68d11..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/commonblockvarnames/CommonVarNamesTestSuite.java
+++ /dev/null
@@ -1,92 +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.commonblockvarnames;
-
-import org.eclipse.photran.core.vpg.util.LineCol;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Tests for the Make Common Variable Names Consistent refactoring
- *
- * @author Kurt Hendle
- * @author Jeff Overbey
- */
-public class CommonVarNamesTestSuite extends TestSuite
-{
-    public static Test suite() throws Exception
-    {
-        TestSuite suite = new TestSuite();
-
-        // In the following, the line/column refers to a location in the first file listed
-
-        // 1. Basic check across multiple files
-        String[] test1Files = new String[] { "common1.f90", "common2.f90", "common3.f90", "common4.f90" };
-        suite.addTest(successTest(test1Files, new LineCol(7,9), 5));
-
-        //0. basic test with one file
-        //      -used to test the static data cleanup and implicit typing
-        suite.addTest(successTest(new String[] {"justCommons1.f90"}, new LineCol(7,13), 5));
-        suite.addTest(successTest(new String[] {"justCommons2.f90"}, new LineCol(2,13), 5));
-
-        // 2. Basic check across multiple files with names provided
-        String[] test2Files = new String[] { "namesProv1.f90", "namesProv2.f90" };
-        suite.addTest(successTest(test2Files, new LineCol(3,13), 5, "a_hello", "b_hello", "c_hello"));
-
-        //suite.addTest(successTest(new String[] {"justCommons1.f90"}, new LineCol(7,13), 5, "i_hello", "j_hello"));
-
-        // 3. Two of the common block variable names should stay the same in one declaration of the common block
-        String[] test3Files = new String[] { "sameName1.f90", "sameName2.f90" };
-        // FIXME JO suite.addTest(successTest(test3Files, new LineCol(3,13), 5, "a", "b", "this_is_renamed"));
-
-        // 4. One declaration of the common block does not contain all the variables in the block
-        String[] test4Files = new String[] { "short1.f90" };
-        suite.addTest(successTest(test4Files, new LineCol(4,11), 5, "aaa", "bbb", "ccc"));
-        String[] test4Files2 = new String[] { "short2.f90" };
-        suite.addTest(successTest(test4Files2, new LineCol(20,11), 5, "aaa", "bbb"));
-
-        // 5. Precondition test -- make sure naming conflict is avoided
-        String[] test5Files = new String[] { "common1.f90", "common2.f90", "common3.f90", "common4.f90" };
-        //                                                                          vvvvvv conflicts with a subroutine
-        suite.addTest(preconditionTest(test5Files, new LineCol(7,9), 5, "a_hello", "helper", "c_hello"));
-        //                                                               vvvvvvvvvvvv conflicts with a subroutine
-        suite.addTest(preconditionTest(test5Files, new LineCol(7,9), 5, "help_common2", "b_hello", "c_hello"));
-
-        // 6. Precondition tests -- the variables must have the same types in every declaration of the common block
-        String[] test6Files = new String[] { "typesDiffer1.f90" };
-        suite.addTest(preconditionTest(test6Files, new LineCol(4,11), 5));
-        suite.addTest(preconditionTest(test6Files, new LineCol(20,11), 5));
-        suite.addTest(preconditionTest(new String[]{"typesDiffer2.f90"}, new LineCol(2,12), 5));
-
-        return suite;
-    }
-
-    private static TestSuite successTest(String[] filenames, LineCol position, int length)
-    {
-        return successTest(filenames, position, length, (String[])null);
-    }
-
-    private static TestSuite successTest(String[] filenames, LineCol position, int length, String... newVarNames)
-    {
-        TestSuite subSuite = new TestSuite("Making COMMON variable names consistent - " + filenames[0]);
-        subSuite.addTest(new CommonVarNamesTestCase(filenames, position, length, false, newVarNames));
-        return subSuite;
-    }
-
-    private static TestSuite preconditionTest(String[] filenames, LineCol position, int length, String... newVarNames)
-    {
-        TestSuite subSuite = new TestSuite("Testing preconditions for making COMMON variable names consistent - " +
-            filenames[0]);
-        subSuite.addTest(new CommonVarNamesTestCase(filenames, position, length, true, newVarNames));
-        return subSuite;
-    }
-}
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/CheckCanAddDeclTestCase.java b/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/CheckCanAddDeclTestCase.java
deleted file mode 100644
index f2c56e1..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/infrastructure/CheckCanAddDeclTestCase.java
+++ /dev/null
@@ -1,203 +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 org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.photran.core.IFortranAST;
-import org.eclipse.photran.core.vpg.PhotranVPG;
-import org.eclipse.photran.internal.core.parser.ASTMainProgramNode;
-import org.eclipse.photran.internal.core.parser.ASTModuleNode;
-import org.eclipse.photran.internal.core.parser.ASTSubroutineSubprogramNode;
-import org.eclipse.photran.internal.core.refactoring.infrastructure.AbstractFortranRefactoring;
-import org.eclipse.photran.refactoring.tests.RefactoringTestCase;
-
-/**
- * Unit tests for {@link PhotranVPG#listAllModules()}
- *
- * @author Jeff Overbey
- */
-public class CheckCanAddDeclTestCase extends RefactoringTestCase
-{
-    private static final String DIR = "check-can-add-test-code";
-
-    private ASTMainProgramNode mainProgram;
-    private ASTSubroutineSubprogramNode internalSubroutine;
-    private ASTModuleNode module;
-
-    @Override public void setUp() throws Exception
-    {
-        super.setUp();
-
-        IFile main_f90 = importFile(DIR, "main.f90");
-        IFile module_f90 = importFile(DIR, "module.f90");
-        importFile(DIR, "external.f90");
-        PhotranVPG.getInstance().ensureVPGIsUpToDate(new NullProgressMonitor());
-
-        project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
-        compileAndRunFortranProgram("module.f90", "main.f90", "external.f90");
-
-        PhotranVPG vpg = PhotranVPG.getInstance();
-        IFortranAST mainFileAST = vpg.acquireTransientAST(main_f90);
-        IFortranAST moduleFileAST = vpg.acquireTransientAST(module_f90);
-        assertNotNull(mainFileAST);
-        assertNotNull(moduleFileAST);
-
-        mainProgram = mainFileAST.findFirstTokenOnLine(1).findNearestAncestor(ASTMainProgramNode.class);
-        internalSubroutine = mainFileAST.findFirstTokenOnLine(23).findNearestAncestor(ASTSubroutineSubprogramNode.class);
-        module = moduleFileAST.findFirstTokenOnLine(1).findNearestAncestor(ASTModuleNode.class);
-        assertNotNull(mainProgram);
-        assertNotNull(internalSubroutine);
-        assertNotNull(module);
-    }
-
-    public void testAddDeclsToMainProgram() throws Exception
-    {
-        new FauxFortranRefactoring()
-        {
-            protected void runTest()
-            {
-                assertTrue(canAdd("something_new"));
-                assertFalse(canAdd("assigned_local_variable"));
-                assertFalse(canAdd("AsSiGnEd_LoCaL_vArIaBlE"));
-                assertFalse(canAdd("unused_local_variable"));
-                assertFalse(canAdd("local_variable_accessed_from_internal_subroutine"));
-                assertFalse(canAdd("defined_external_subroutine"));
-                assertFalse(canAdd("declared_external_subroutine"));
-                assertFalse(canAdd("undeclared_external_subroutine"));
-                assertFalse(canAdd("internal_subroutine"));
-                assertFalse(canAdd("used_module_subroutine"));
-                assertFalse(canAdd("unused_module_subroutine"));
-                assertTrue(canAdd("private_module_subroutine"));
-            }
-
-            private boolean canAdd(String name)
-            {
-                return checkIfDeclarationCanBeAddedToScope(name, mainProgram, new NullProgressMonitor());
-            }
-        }.runTest();
-    }
-
-    public void testAddDeclsToModule() throws Exception
-    {
-        new FauxFortranRefactoring()
-        {
-            protected void runTest()
-            {
-                assertFalse(canAdd("private_module_subroutine"));
-
-                // These are the same as above, since declaring these in the module
-                // will cause them to be imported into the main program, preventing
-                // the main program from redeclaring them
-
-                assertTrue(canAdd("something_new"));
-                assertFalse(canAdd("assigned_local_variable"));
-                assertFalse(canAdd("AsSiGnEd_LoCaL_vArIaBlE"));
-                assertFalse(canAdd("unused_local_variable"));
-                assertFalse(canAdd("local_variable_accessed_from_internal_subroutine"));
-                // FIXME assertFalse(canAdd("defined_external_subroutine"));
-                assertFalse(canAdd("declared_external_subroutine"));
-                assertFalse(canAdd("undeclared_external_subroutine"));
-                assertFalse(canAdd("internal_subroutine"));
-                assertFalse(canAdd("used_module_subroutine"));
-                assertFalse(canAdd("unused_module_subroutine"));
-            }
-
-            private boolean canAdd(String name)
-            {
-                return checkIfDeclarationCanBeAddedToScope(name, module, new NullProgressMonitor());
-            }
-        }.runTest();
-    }
-
-    public void testAddDeclsToInternalSubprogram() throws Exception
-    {
-        new FauxFortranRefactoring()
-        {
-            protected void runTest()
-            {
-                assertTrue(canAdd("something_new"));
-                assertFalse(canAdd("internal_subroutine"));
-                assertFalse(canAdd("local_variable_accessed_from_internal_subroutine"));
-                assertTrue(canAdd("private_module_subroutine"));
-
-                // These will shadow declarations in an outer scope, but since they're not
-                // referenced, that is OK
-                assertTrue(canAdd("assigned_local_variable"));
-                assertTrue(canAdd("AsSiGnEd_LoCaL_vArIaBlE"));
-                assertTrue(canAdd("unused_local_variable"));
-                assertTrue(canAdd("defined_external_subroutine"));
-                assertTrue(canAdd("declared_external_subroutine"));
-                assertTrue(canAdd("undeclared_external_subroutine"));
-                assertTrue(canAdd("used_module_subroutine"));
-                assertTrue(canAdd("unused_module_subroutine"));
-            }
-
-            private boolean canAdd(String name)
-            {
-                return checkIfDeclarationCanBeAddedToScope(name, internalSubroutine, new NullProgressMonitor());
-            }
-        }.runTest();
-    }
-
-    /**
-     * This is intended to be subclassed in order to gain access to the protected methods of
-     * {@link AbstractFortranRefactoring} to test those methods.
-     *
-     * @author Jeff Overbey
-     */
-    private class FauxFortranRefactoring extends AbstractFortranRefactoring
-    {
-        public FauxFortranRefactoring()
-        {
-            this.vpg = PhotranVPG.getInstance();
-        }
-
-        @Override
-        protected void doCheckInitialConditions(RefactoringStatus status, IProgressMonitor pm)
-            throws PreconditionFailure
-        {
-        }
-
-        @Override
-        protected void doCheckFinalConditions(RefactoringStatus status, IProgressMonitor pm)
-            throws PreconditionFailure
-        {
-        }
-
-        @Override
-        protected void doCreateChange(IProgressMonitor pm) throws CoreException, OperationCanceledException
-        {
-        }
-
-        @Override
-        protected void ensureProjectHasRefactoringEnabled(RefactoringStatus status) throws PreconditionFailure
-        {
-        }
-
-        @Override
-        protected RefactoringStatus getAbstractSyntaxTree(RefactoringStatus status)
-        {
-            return null;
-        }
-
-        @Override
-        public String getName()
-        {
-            return null;
-        }
-    }
-}
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 180eb21..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestCase.java
+++ /dev/null
@@ -1,101 +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;
-    protected boolean shouldCompileAndRun;
-
-    public IntroImplicitTestCase() {;}  // when JUnit invokes a subclass outside a test suite
-
-    public IntroImplicitTestCase(String filename, LineCol lineCol, boolean shouldCompileAndRun)
-    {
-        this.filename = filename;
-        this.lineCol = lineCol;
-        this.shouldCompileAndRun = shouldCompileAndRun;
-        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 = shouldCompileAndRun ? 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 = shouldCompileAndRun ? 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 331a587..0000000
--- a/org.eclipse.photran.core.vpg.tests/src/org/eclipse/photran/refactoring/tests/introimplicitnone/IntroImplicitTestSuite.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.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("implicit-subprog.f90", false));
-
-        suite.addTest(getSuiteFor("crazyimplicits.f90", "fortran.f90"));
-        suite.addTest(getSuiteFor("crazyimplicits.f90", "fortran.f90", "bigexpression.f90"));
-
-        return suite;
-    }
-
-    private static TestSuite getSuiteFor(String baseFilename)
-    {
-        return getSuiteFor(baseFilename, true);
-    }
-
-    private static TestSuite getSuiteFor(String baseFilename, boolean shouldCompileAndRun)
-    {
-        TestSuite subSuite = new TestSuite("Introducing Implicit None in " + baseFilename);
-        subSuite.addTest(new IntroImplicitTestCase(baseFilename, new LineCol(1, 9), shouldCompileAndRun));
-        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), true));
-        }
-        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-list-test-code/module1.f90 b/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module1.f90
deleted file mode 100644
index 596ca54..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module1.f90
+++ /dev/null
@@ -1,2 +0,0 @@
-module module1
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module2-module3.f90 b/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module2-module3.f90
deleted file mode 100644
index 72fc5c3..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module2-module3.f90
+++ /dev/null
@@ -1,5 +0,0 @@
-module module2
-end module
-
-module module3
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module4.f90 b/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module4.f90
deleted file mode 100644
index 63ee352..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/module4.f90
+++ /dev/null
@@ -1,2 +0,0 @@
-module module4
-end module
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module1.f90 b/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module1.f90
deleted file mode 100644
index dd423e9..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module1.f90
+++ /dev/null
@@ -1,2 +0,0 @@
-use module1
-end program
diff --git a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module4.f90 b/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module4.f90
deleted file mode 100644
index 993d263..0000000
--- a/org.eclipse.photran.core.vpg.tests/vpg-list-test-code/use-module4.f90
+++ /dev/null
@@ -1,2 +0,0 @@
-use module4
-end program
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
