Forced stream to close to prevent file locking bug
diff --git a/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPGBuilder.java b/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPGBuilder.java
index 4b4fa89..ec7a943 100644
--- a/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPGBuilder.java
+++ b/org.eclipse.photran.core.vpg/src/org/eclipse/photran/internal/core/vpg/PhotranVPGBuilder.java
@@ -327,48 +327,62 @@
         if (filename == null || isVirtualFile(filename)) return null;
 
         IFile file = getIFileForFilename(filename); if (file == null) return null;
-        SourceForm sourceForm = determineSourceForm(filename);
         try
         {
-            if (stream == null) stream = file.getContents(true);
-            IAccumulatingLexer lexer = LexerFactory.createLexer(stream, file, filename, sourceForm, true);
-            long start = System.currentTimeMillis();
-            ASTExecutableProgramNode ast = parser.parse(lexer);
-            debug("  - Elapsed time in Parser#parse: " + (System.currentTimeMillis()-start) + " ms", filename);
-            return new FortranAST(file, ast, lexer.getTokenList());
-        }
-        catch (SyntaxException e)
-        {
-            if (e.getFile() != null)
-                log.logError("Error parsing " + filename + ": " + e.getMessage(),
-                    new PhotranTokenRef(e.getFile(), e.getTokenOffset(), e.getTokenLength()));
-            else
+            SourceForm sourceForm = determineSourceForm(filename);
+            try
+            {
+                if (stream == null) stream = file.getContents(true);
+                IAccumulatingLexer lexer = LexerFactory.createLexer(stream, file, filename, sourceForm, true);
+                long start = System.currentTimeMillis();
+                ASTExecutableProgramNode ast = parser.parse(lexer);
+                debug("  - Elapsed time in Parser#parse: " + (System.currentTimeMillis()-start) + " ms", filename);
+                return new FortranAST(file, ast, lexer.getTokenList());
+            }
+            catch (SyntaxException e)
+            {
+                if (e.getFile() != null)
+                    log.logError("Error parsing " + filename + ": " + e.getMessage(),
+                        new PhotranTokenRef(e.getFile(), e.getTokenOffset(), e.getTokenLength()));
+                else
+                    logError(file, "Error parsing " + filename, e);
+                return null;
+            }
+            catch (LexerException e)
+            {
+                if (e.getFile() != null)
+                    log.logError("Error parsing " + filename + ": " + e.getMessage(),
+                        new PhotranTokenRef(e.getFile(), e.getTokenOffset(), e.getTokenLength()));
+                else
+                    logError(file, "Error parsing " + filename, e);
+                return null;
+            }
+    //        catch (CoreException e)
+    //        {
+    //            IFile errorFile = getFileFromStatus(e.getStatus());
+    //            if (errorFile != null)
+    //                log.logError("Error parsing " + filename + ": " + e.getMessage(),
+    //                    new PhotranTokenRef(errorFile, 0, 0));
+    //            else
+    //                logError(file, "Error parsing " + filename, e);
+    //            return null;
+    //        }
+            catch (Throwable e)
+            {
                 logError(file, "Error parsing " + filename, e);
-            return null;
+                return null;
+            }
         }
-        catch (LexerException e)
+        finally
         {
-            if (e.getFile() != null)
-                log.logError("Error parsing " + filename + ": " + e.getMessage(),
-                    new PhotranTokenRef(e.getFile(), e.getTokenOffset(), e.getTokenLength()));
-            else
-                logError(file, "Error parsing " + filename, e);
-            return null;
-        }
-//        catch (CoreException e)
-//        {
-//            IFile errorFile = getFileFromStatus(e.getStatus());
-//            if (errorFile != null)
-//                log.logError("Error parsing " + filename + ": " + e.getMessage(),
-//                    new PhotranTokenRef(errorFile, 0, 0));
-//            else
-//                logError(file, "Error parsing " + filename, e);
-//            return null;
-//        }
-        catch (Throwable e)
-        {
-            logError(file, "Error parsing " + filename, e);
-            return null;
+            try
+            {
+                if (stream != null) stream.close();
+            }
+            catch (Throwable x)
+            {
+                // Ignore
+            }
         }
     }