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
+ }
}
}