From 15e615de075100550e790fd0757dc009830efa6e Mon Sep 17 00:00:00 2001 From: John Camelon Date: Sun, 6 Jun 2004 03:36:52 +0000 Subject: [PATCH] Fixed translationUnit exception handling to allow ParserErrors to propogate out. --- .../core/parser/ExpressionParser.java | 5 +-- .../cdt/internal/core/parser/Parser.java | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java index 3b4b267b959..c7872710b8f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java @@ -1132,7 +1132,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { * @param e */ public void logException(String methodName, Exception e) { - if( !(e instanceof EndOfFileException )) + if( !(e instanceof EndOfFileException ) && e != null ) { StringBuffer buffer = new StringBuffer(); buffer.append( "Parser: Unexpected exception in "); //$NON-NLS-1$ @@ -1143,7 +1143,8 @@ public class ExpressionParser implements IExpressionParser, IParserData { buffer.append( e.getMessage() ); buffer.append( ". w/"); //$NON-NLS-1$ buffer.append( scanner.toString() ); - log.traceLog( buffer.toString() ); + if( log.isTracing() ) + log.traceLog( buffer.toString() ); log.errorLog( buffer.toString() ); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 5d5f21f7af0..8a6553e6ebe 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -209,16 +209,48 @@ public abstract class Parser extends ExpressionParser implements IParser break; } } + catch( Exception e ) + { + logException( "translationUnit", e ); //$NON-NLS-1$ + failParse(); + } + catch( ParseError perr ) + { + throw perr; + } catch (Throwable e) { - if( e instanceof Exception ) - logException( "translationUnit", (Exception) e ); //$NON-NLS-1$ + logThrowable( "translationUnit", e ); //$NON-NLS-1$ failParse(); } } compilationUnit.exitScope( requestor, astFactory.getReferenceManager() ); } /** + * @param string + * @param e + */ + private void logThrowable(String methodName, Throwable e) { + if( e != null ) + { + StringBuffer buffer = new StringBuffer(); + buffer.append( "Parser: Unexpected throwable in "); //$NON-NLS-1$ + buffer.append( methodName ); + buffer.append( ":"); //$NON-NLS-1$ + buffer.append( e.getClass().getName() ); + buffer.append( "::"); //$NON-NLS-1$ + buffer.append( e.getMessage() ); + buffer.append( ". w/"); //$NON-NLS-1$ + buffer.append( scanner.toString() ); + if( log.isTracing() ) + log.traceLog( buffer.toString() ); + log.errorLog( buffer.toString() ); + } +} + + + + /** * This function is called whenever we encounter and error that we cannot backtrack out of and we * still wish to try and continue on with the parse to do a best-effort parse for our client. *