From 12268e91044fb9551c03064dc262a2f6d79af40e Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 22 Jul 2004 18:38:26 +0000 Subject: [PATCH] Added getFilename() to IToken, ITokenDuple & IASTOffsetableNamedElement. This improves the accuracy of selection search w/the new scanner (and without). --- .../parser/tests/ParserSymbolTableTest.java | 7 +- .../cdt/core/parser/BacktrackException.java | 15 +- .../eclipse/cdt/core/parser/CodeReader.java | 17 +- .../cdt/core/parser/IFilenameProvider.java | 22 -- .../cdt/core/parser/IPreprocessor.java | 22 -- .../org/eclipse/cdt/core/parser/IScanner.java | 2 +- .../org/eclipse/cdt/core/parser/IToken.java | 1 + .../eclipse/cdt/core/parser/ITokenDuple.java | 3 + .../cdt/core/parser/ParserFactory.java | 4 +- .../cdt/core/parser/ast/IASTFactory.java | 34 +-- .../parser/ast/IASTOffsetableElement.java | 2 + .../internal/core/parser/CompleteParser.java | 2 +- .../core/parser/CompletionParser.java | 4 +- .../core/parser/DeclarationWrapper.java | 24 +- .../core/parser/ExpressionParser.java | 268 ++++++++++-------- .../core/parser/IExpressionParser.java | 3 +- .../cdt/internal/core/parser/Parser.java | 208 +++++++------- .../cdt/internal/core/parser/QuickParser.java | 2 +- .../internal/core/parser/SelectionParser.java | 36 +-- .../core/parser/StructuralParser.java | 2 +- .../core/parser/ast/ASTInclusion.java | 11 +- .../internal/core/parser/ast/ASTMacro.java | 10 +- .../core/parser/ast/BaseASTFactory.java | 8 +- .../parser/ast/complete/ASTASMDefinition.java | 11 +- .../ASTAbstractTypeSpecifierDeclaration.java | 12 +- .../ast/complete/ASTClassSpecifier.java | 10 +- .../complete/ASTElaboratedTypeSpecifier.java | 12 +- .../ast/complete/ASTEnumerationSpecifier.java | 12 +- .../parser/ast/complete/ASTEnumerator.java | 12 +- .../core/parser/ast/complete/ASTField.java | 5 +- .../core/parser/ast/complete/ASTFunction.java | 12 +- .../ast/complete/ASTLinkageSpecification.java | 13 +- .../core/parser/ast/complete/ASTMethod.java | 5 +- .../ast/complete/ASTNamespaceAlias.java | 12 +- .../ast/complete/ASTNamespaceDefinition.java | 13 +- .../ast/complete/ASTParameterDeclaration.java | 13 +- .../ast/complete/ASTTemplateDeclaration.java | 12 +- .../complete/ASTTemplateInstantiation.java | 12 +- .../ast/complete/ASTTemplateParameter.java | 13 +- .../complete/ASTTemplateSpecialization.java | 5 +- .../core/parser/ast/complete/ASTTypedef.java | 11 +- .../ast/complete/ASTUsingDeclaration.java | 13 +- .../ast/complete/ASTUsingDirective.java | 12 +- .../core/parser/ast/complete/ASTVariable.java | 14 +- .../ast/complete/CompleteParseASTFactory.java | 135 +++++---- .../expression/ExpressionParseASTFactory.java | 36 +-- .../parser/ast/quick/ASTASMDefinition.java | 12 +- .../ASTAbstractTypeSpecifierDeclaration.java | 12 +- .../parser/ast/quick/ASTClassSpecifier.java | 11 +- .../ast/quick/ASTElaboratedTypeSpecifier.java | 12 +- .../ast/quick/ASTEnumerationSpecifier.java | 12 +- .../core/parser/ast/quick/ASTEnumerator.java | 13 +- .../core/parser/ast/quick/ASTField.java | 4 +- .../core/parser/ast/quick/ASTFunction.java | 12 +- .../ast/quick/ASTLinkageSpecification.java | 12 +- .../core/parser/ast/quick/ASTMethod.java | 5 +- .../parser/ast/quick/ASTNamespaceAlias.java | 12 +- .../ast/quick/ASTNamespaceDefinition.java | 12 +- .../ast/quick/ASTParameterDeclaration.java | 12 +- .../ast/quick/ASTTemplateDeclaration.java | 12 +- .../ast/quick/ASTTemplateInstantiation.java | 13 +- .../ast/quick/ASTTemplateParameter.java | 12 +- .../ast/quick/ASTTemplateSpecialization.java | 4 +- .../ast/quick/ASTTypedefDeclaration.java | 12 +- .../parser/ast/quick/ASTUsingDeclaration.java | 11 +- .../parser/ast/quick/ASTUsingDirective.java | 11 +- .../core/parser/ast/quick/ASTVariable.java | 12 +- .../ast/quick/QuickParseASTFactory.java | 72 ++--- .../core/parser/scanner/ContextStack.java | 2 +- .../internal/core/parser/scanner/Scanner.java | 12 +- .../scanner/ScannerContextInclusion.java | 2 +- .../parser/scanner2/MacroExpansionToken.java | 7 + .../core/parser/scanner2/Scanner2.java | 185 +++++------- .../core/parser/token/AbstractToken.java | 15 +- .../core/parser/token/BasicTokenDuple.java | 7 + .../parser/token/ImagedExpansionToken.java | 8 +- .../core/parser/token/ImagedToken.java | 8 +- .../parser/token/SimpleExpansionToken.java | 4 +- .../core/parser/token/SimpleToken.java | 8 +- .../core/parser/token/TokenFactory.java | 19 +- 80 files changed, 1039 insertions(+), 650 deletions(-) delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IFilenameProvider.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java index 462518b8974..ff8a2ef95c7 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserSymbolTableTest.java @@ -58,6 +58,7 @@ import org.eclipse.cdt.internal.core.parser.scanner2.ObjectMap; */ public class ParserSymbolTableTest extends TestCase { + private static final char[] EMPTY_CHAR_ARRAY = "".toCharArray(); public ParserSymbolTable table = null; public TypeInfoProvider provider = null; @@ -2934,15 +2935,15 @@ public class ParserSymbolTableTest extends TestCase { ISymbolASTExtension cuExtension = new StandardSymbolExtension( table.getCompilationUnit(), (ASTSymbol) compUnit ); table.getCompilationUnit().setASTExtension( cuExtension ); - IASTClassSpecifier clsSpec = new ASTClassSpecifier( A, ASTClassKind.CLASS, ClassNameType.IDENTIFIER, ASTAccessVisibility.PUBLIC, 0, 0, 0, 0, 0, new ArrayList( ) ); + IASTClassSpecifier clsSpec = new ASTClassSpecifier( A, ASTClassKind.CLASS, ClassNameType.IDENTIFIER, ASTAccessVisibility.PUBLIC, 0, 0, 0, 0, 0, new ArrayList( ), EMPTY_CHAR_ARRAY ); //$NON-NLS-1$ ISymbolASTExtension clsExtension = new StandardSymbolExtension( A, (ASTSymbol) clsSpec ); A.setASTExtension( clsExtension ); - IASTField field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PUBLIC ); + IASTField field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PUBLIC, EMPTY_CHAR_ARRAY ); ISymbolASTExtension extension = new StandardSymbolExtension( i, (ASTSymbol) field ); i.setASTExtension( extension ); - field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PRIVATE ); + field = new ASTField(i, null, null, null, 0, 0, 0, 0, 0, new ArrayList(), false, null, ASTAccessVisibility.PRIVATE, EMPTY_CHAR_ARRAY ); extension = new StandardSymbolExtension( j, (ASTSymbol) field ); j.setASTExtension( extension ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/BacktrackException.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/BacktrackException.java index 4024fd60eb7..132babe53eb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/BacktrackException.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/BacktrackException.java @@ -16,11 +16,12 @@ package org.eclipse.cdt.core.parser; */ public class BacktrackException extends Exception { - + private static final char [] EMPTY_CHARARRAY = "".toCharArray(); //$NON-NLS-1$ private IProblem problem; private int startOffset; private int endOffset; private int lineNumber; + private char[] filename; /** * @param p @@ -37,6 +38,7 @@ public class BacktrackException extends Exception problem = null; startOffset = 0; endOffset = 0; + filename = EMPTY_CHARARRAY; } /** * @return Returns the problem. @@ -48,12 +50,14 @@ public class BacktrackException extends Exception /** * @param startingOffset * @param endingOffset + * @param f TODO */ - public void initialize(int startingOffset, int endingOffset, int line) { + public void initialize(int startingOffset, int endingOffset, int line, char[] f) { reset(); startOffset = startingOffset; endOffset = endingOffset; lineNumber = line; + this.filename = f; } /** * @return Returns the offset. @@ -74,4 +78,11 @@ public class BacktrackException extends Exception public int getLineNumber() { return lineNumber; } + + /** + * @return + */ + public char[] getFilename() { + return filename; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java index 2a367db7e2a..d15be39d1ab 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java @@ -19,32 +19,35 @@ import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; +import org.eclipse.cdt.internal.core.parser.scanner2.CharArrayUtils; + /** * @author jcamelon */ public class CodeReader { private static final String UTF_8 = "UTF-8"; //$NON-NLS-1$ - private static final String NOFILE = ""; //$NON-NLS-1$ + private static final String NF = ""; //$NON-NLS-1$ + private static final char [] NOFILE = NF.toCharArray(); //$NON-NLS-1$ public final char[] buffer; - public final String filename; + public final char[] filename; // If you already have preloaded the buffer, e.g. working copy public CodeReader(String filename, char[] buffer) { - this.filename = filename; + this.filename = filename.toCharArray(); this.buffer = buffer; } // If you are just scanning a string public CodeReader(char[] buffer) { - this(NOFILE, buffer); + this(NF, buffer); } // If you are loading up a file normally public CodeReader(String filename) throws IOException { - this.filename = filename; + this.filename = filename.toCharArray(); FileInputStream stream = new FileInputStream(filename); try { @@ -56,7 +59,7 @@ public class CodeReader { // If you have a handle on a stream to the file, e.g. IFile.getContents() public CodeReader(String filename, InputStream stream) throws IOException { - this.filename = filename; + this.filename = filename.toCharArray(); FileInputStream fstream = (stream instanceof FileInputStream) @@ -107,7 +110,7 @@ public class CodeReader { } public boolean isFile() { - return filename != NOFILE; + return !CharArrayUtils.equals( filename, NOFILE ); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IFilenameProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IFilenameProvider.java deleted file mode 100644 index 28caa9cdd8e..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IFilenameProvider.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corp. - Rational Software - initial implementation - *******************************************************************************/ -package org.eclipse.cdt.core.parser; - -/** - * @author jcamelon - */ -public interface IFilenameProvider { - - public char [] getCurrentFilename(); - public int getCurrentFileIndex(); - public String getFilenameForIndex( int index ); - -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java deleted file mode 100644 index 9a023f51ddb..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java +++ /dev/null @@ -1,22 +0,0 @@ -/********************************************************************** - * Copyright (c) 2002,2003 Rational Software Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v0.5 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v05.html - * - * Contributors: - * IBM Rational Software - Initial API and implementation -***********************************************************************/ -package org.eclipse.cdt.core.parser; - - -/** - * @author jcamelon - * - */ -public interface IPreprocessor extends IScanner { - - public void process(); - -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java index d0fd26a2c9b..ebd3f14089d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java @@ -19,7 +19,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext; * @author jcamelon * */ -public interface IScanner extends IFilenameProvider { +public interface IScanner { public static final String __CPLUSPLUS = "__cplusplus"; //$NON-NLS-1$ public static final String __STDC_VERSION__ = "__STDC_VERSION__"; //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java index fc6b62617f1..7e01308bd6c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java @@ -21,6 +21,7 @@ public interface IToken { public int getType(); public String getImage(); public char [] getCharImage(); + public char [] getFilename(); public int getOffset(); public int getLength(); public int getEndOffset(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java index 3f64544f117..844c706d0fc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java @@ -38,6 +38,9 @@ public interface ITokenDuple { public abstract Iterator iterator(); public abstract String toString(); public char [] toCharArray(); + + public char [] getFilename(); + public abstract boolean isIdentifier(); public abstract int length(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java index ef5ff1df8dd..bec6a4aaa5f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java @@ -44,14 +44,14 @@ public class ParserFactory { private static IParserExtensionFactory extensionFactory = new ParserExtensionFactory( ExtensionDialect.GCC ); - public static IASTFactory createASTFactory( IFilenameProvider provider, ParserMode mode, ParserLanguage language ) + public static IASTFactory createASTFactory( ParserMode mode, ParserLanguage language ) { if( mode == ParserMode.QUICK_PARSE ) return new QuickParseASTFactory(extensionFactory.createASTExtension( mode )); else if( mode == ParserMode.EXPRESSION_PARSE ) return new ExpressionParseASTFactory( extensionFactory.createASTExtension( mode )); else - return new CompleteParseASTFactory( provider, language, mode, extensionFactory.createASTExtension( mode )); + return new CompleteParseASTFactory( language, mode, extensionFactory.createASTExtension( mode )); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java index 25ff8507f29..43e2af6a7c5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java @@ -28,7 +28,7 @@ public interface IASTFactory String name, int startingOffset, int startingLine, - int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info); + int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info, char[] fn); public IASTInclusion createInclusion( String name, @@ -36,7 +36,7 @@ public interface IASTFactory boolean local, int startingOffset, int startingLine, - int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) ; + int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) ; public IASTUsingDirective createUsingDirective( IASTScope scope, @@ -52,13 +52,13 @@ public interface IASTFactory IASTScope scope, String assembly, int startingOffset, - int startingLine, int endingOffset, int endingLine); + int startingLine, int endingOffset, int endingLine, char[] fn); public IASTNamespaceDefinition createNamespaceDefinition( IASTScope scope, String identifier, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) throws ASTSemanticException; + int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) throws ASTSemanticException; public IASTNamespaceAlias createNamespaceAlias( IASTScope scope, @@ -72,7 +72,7 @@ public interface IASTFactory public IASTLinkageSpecification createLinkageSpecification( IASTScope scope, - String spec, int startingOffset, int startingLine) ; + String spec, int startingOffset, int startingLine, char[] fn) ; public IASTClassSpecifier createClassSpecifier( IASTScope scope, @@ -81,7 +81,7 @@ public interface IASTFactory ClassNameType type, ASTAccessVisibility access, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException; + int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException; /** * @param astClassSpec @@ -104,13 +104,13 @@ public interface IASTFactory public IASTEnumerationSpecifier createEnumerationSpecifier( IASTScope scope, String name, - int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException; + int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException; public IASTEnumerator addEnumerator( IASTEnumerationSpecifier enumeration, String string, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue)throws ASTSemanticException; + int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn)throws ASTSemanticException; public IASTExpression createExpression( IASTScope scope, @@ -201,25 +201,25 @@ public interface IASTFactory boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments) throws ASTSemanticException; public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, - IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression ) throws ASTSemanticException; + IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn ) throws ASTSemanticException; - public IASTField createField( IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) throws ASTSemanticException; + public IASTField createField( IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn) throws ASTSemanticException; public IASTDesignator createDesignator( IASTDesignator.DesignatorKind kind, IASTExpression constantExpression, IToken fieldIdentifier, Map extensionParms ); - public IASTParameterDeclaration createParameterDeclaration( boolean isConst, boolean isVolatile, IASTTypeSpecifier getTypeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) ; + public IASTParameterDeclaration createParameterDeclaration( boolean isConst, boolean isVolatile, IASTTypeSpecifier getTypeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) ; - public IASTTemplateDeclaration createTemplateDeclaration( IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine ) throws ASTSemanticException; + public IASTTemplateDeclaration createTemplateDeclaration( IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine, char[] fn ) throws ASTSemanticException; - public IASTTemplateParameter createTemplateParameter( IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) throws ASTSemanticException; + public IASTTemplateParameter createTemplateParameter( IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) throws ASTSemanticException; - public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine); + public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] fn); - public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine); + public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char[] fn); - public IASTTypedefDeclaration createTypedef( IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) throws ASTSemanticException; + public IASTTypedefDeclaration createTypedef( IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn ) throws ASTSemanticException; - public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ); + public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration( IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn ); public boolean queryIsTypeName( IASTScope scope, ITokenDuple nameInQuestion ) ; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTOffsetableElement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTOffsetableElement.java index 227fe9c892a..2be35e9b23e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTOffsetableElement.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTOffsetableElement.java @@ -24,5 +24,7 @@ public interface IASTOffsetableElement { public int getStartingLine(); public int getEndingLine(); + + public char [] getFilename(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java index 91b04c562a2..56ea487a46d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java @@ -70,7 +70,7 @@ public class CompleteParser extends Parser { * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) */ protected void setupASTFactory(IScanner scanner, ParserLanguage language) { - astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETE_PARSE, language); + astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETE_PARSE, language); scanner.setASTFactory(astFactory); astFactory.setLogger(log); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java index 9e0d063f8ca..e0ae6e76786 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java @@ -136,7 +136,7 @@ public class CompletionParser extends ContextualParser implements IParser { if( LT(1) != IToken.t_catch ) { IToken la = LA(1); - throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); // error, need at least one of these + throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); // error, need at least one of these } while (LT(1) == IToken.t_catch) { @@ -167,7 +167,7 @@ public class CompletionParser extends ContextualParser implements IParser { * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) */ protected void setupASTFactory(IScanner scanner, ParserLanguage language) { - astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETION_PARSE, language); + astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETION_PARSE, language); scanner.setASTFactory(astFactory); astFactory.setLogger(log); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java index 95133a7500b..d1fb846c337 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/DeclarationWrapper.java @@ -109,16 +109,18 @@ public class DeclarationWrapper implements IDeclaratorOwner /** * @param scope + * @param filename TODO */ public DeclarationWrapper( IASTScope scope, int startingOffset, - int startingLine, IASTTemplate templateDeclaration) + int startingLine, IASTTemplate templateDeclaration, char[] filename) { this.scope = scope; this.startingOffset = startingOffset; this.startingLine = startingLine; this.templateDeclaration = templateDeclaration; + this.fn = filename; } /** * @param b @@ -333,6 +335,8 @@ public class DeclarationWrapper implements IDeclaratorOwner } private IASTFactory astFactory = null; private int endLine; + + private char[] fn; /** * @param requestor */ @@ -431,19 +435,19 @@ public class DeclarationWrapper implements IDeclaratorOwner return astFactory.createTypedef(scope, nameDuple.toString(), abs, getStartingOffset(), getStartingLine(), d .getNameStartOffset(), d.getNameEndOffset(), d - .getNameLine()); + .getNameLine(), fn); if( isWithinClass ) - return astFactory.createField( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode() ); + return astFactory.createField( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode(), fn ); - return astFactory.createVariable( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression() ); + return astFactory.createVariable( scope, nameDuple, isAuto(), d.getInitializerClause(), d.getBitFieldExpression(), abs, isMutable(), isExtern(), isRegister(), isStatic(), getStartingOffset(), getStartingLine(), d.getNameStartOffset(), d.getNameEndOffset(), d.getNameLine(), d.getConstructorExpression(), fn ); } throw new BacktrackException(); } - - /** + + /** * @param declarator * @return */ @@ -456,7 +460,7 @@ public class DeclarationWrapper implements IDeclaratorOwner declarator.getArrayModifiers(), null, null), startingOffset, getStartingLine(), declarator .getNameStartOffset(), declarator.getNameEndOffset(), - declarator.getNameLine()); + declarator.getNameLine(), fn); } /** * @param declarator @@ -534,7 +538,7 @@ public class DeclarationWrapper implements IDeclaratorOwner isStatic(), startingOffset, getStartingLine(), - declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode()); + declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), ((IASTClassSpecifier)scope).getCurrentVisibilityMode(), fn); } private List createParameterList(List currentParameters) throws ASTSemanticException @@ -556,7 +560,7 @@ public class DeclarationWrapper implements IDeclaratorOwner wrapper.getTypeSpecifier(), declarator.getPointerOperators(), declarator.getArrayModifiers(), - null, null, declarator.getName(), declarator.getInitializerClause(), wrapper.getStartingOffset(), getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), wrapper.getEndOffset(), getEndLine())); + null, null, declarator.getName(), declarator.getInitializerClause(), wrapper.getStartingOffset(), getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), wrapper.getEndOffset(), getEndLine(), wrapper.fn )); } } return result; @@ -583,7 +587,7 @@ public class DeclarationWrapper implements IDeclaratorOwner isRegister(), isStatic(), getStartingOffset(), - getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression()); + getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), declarator.getConstructorExpression(), fn); } 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 a4e0a4c1ff6..aac623b0b65 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 @@ -64,9 +64,9 @@ public class ExpressionParser implements IExpressionParser, IParserData { throw backtrack; } - protected final void throwBacktrack( int startingOffset, int endingOffset, int lineNumber ) throws BacktrackException { + protected final void throwBacktrack( int startingOffset, int endingOffset, int lineNumber, char[] f ) throws BacktrackException { ++backtrackCount; - backtrack.initialize( startingOffset, ( endingOffset == 0 ) ? startingOffset + 1 : endingOffset, lineNumber ); + backtrack.initialize( startingOffset, ( endingOffset == 0 ) ? startingOffset + 1 : endingOffset, lineNumber, f ); throw backtrack; } @@ -162,7 +162,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { if (LT(1) == type) return consume(); IToken la = LA(1); - throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); + throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); return null; } @@ -210,7 +210,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { * @param language */ protected void setupASTFactory(IScanner scanner, ParserLanguage language) { - astFactory = ParserFactory.createASTFactory(this, + astFactory = ParserFactory.createASTFactory( ParserMode.EXPRESSION_PARSE, language); scanner.setASTFactory(astFactory); astFactory.setLogger(log); @@ -270,7 +270,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } while (!scopes.empty() && (top == IToken.tGT || top == IToken.tLT)); if (top != IToken.tLBRACKET) - throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); + throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename()); break; case IToken.tRPAREN : @@ -279,7 +279,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } while (!scopes.empty() && (top == IToken.tGT || top == IToken.tLT)); if (top != IToken.tLPAREN) - throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); + throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename()); break; case IToken.tLT : @@ -299,6 +299,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { IToken start = LA(1); int startingOffset = start.getOffset(); int startingLineNumber = start.getOffset(); + char [] fn = start.getFilename(); start = null; IASTExpression expression = null; List list = new LinkedList(); @@ -340,7 +341,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { KeywordSetKey.EXPRESSION); if (expression.getExpressionKind() == IASTExpression.Kind.PRIMARY_EMPTY) { - throwBacktrack(so, ( lastToken != null ) ? lastToken.getEndOffset() : 0, ln); + throwBacktrack(so, ( lastToken != null ) ? lastToken.getEndOffset() : 0, ln, fn ); } list.add(expression); completedArg = true; @@ -386,7 +387,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { if (failed) { if (expression != null) expression.freeReferences(astFactory.getReferenceManager()); - throwBacktrack(startingOffset, 0, startingLineNumber ); + throwBacktrack(startingOffset, 0, startingLineNumber, fn ); } return list; @@ -469,7 +470,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { default : IToken l = LA(1); backup(mark); - throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber(), l.getFilename()); } while (LT(1) == IToken.tCOLONCOLON) { @@ -488,7 +489,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { case IToken.t_operator : IToken l = LA(1); backup(mark); - throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), l.getEndOffset(), first.getLineNumber(), l.getFilename()); case IToken.tIDENTIFIER : prev = last; last = consume(); @@ -631,7 +632,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { break; } IToken la = LA(1); - throwBacktrack(startingOffset, la.getEndOffset(), la.getLineNumber()); + throwBacktrack(startingOffset, la.getEndOffset(), la.getLineNumber(), la.getFilename()); default : if (extension.isValidCVModifier(language, LT(1))) { @@ -662,7 +663,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { arrayMod = astFactory.createArrayModifier(exp); } catch (Exception e) { logException("consumeArrayModifiers::createArrayModifier()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); + throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename()); } d.addArrayModifier(arrayMod); } @@ -694,7 +695,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } else if (LA(1).isOperator()) toSend = consume(); else - throwBacktrack(operatorToken.getOffset(), toSend != null ? toSend.getEndOffset() : 0, operatorToken.getLineNumber() ); + throwBacktrack(operatorToken.getOffset(), toSend != null ? toSend.getEndOffset() : 0, operatorToken.getLineNumber(), operatorToken.getFilename() ); } else { // must be a conversion function typeId(d.getDeclarationWrapper().getScope(), true, @@ -809,6 +810,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { IToken la = LA(1); int startingOffset = la.getOffset(); int ln = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression assignmentExpression = assignmentExpression(scope, kind, key); while (LT(1) == IToken.tCOMMA) { @@ -827,7 +829,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("expression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, ln); + throwBacktrack(startingOffset, endOffset, ln, fn); } } return assignmentExpression; @@ -929,7 +931,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("throwExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(throwToken.getOffset(), endOffset, throwToken.getLineNumber() ); + throwBacktrack(throwToken.getOffset(), endOffset, throwToken.getLineNumber(), throwToken.getFilename() ); } return null; @@ -946,6 +948,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { IToken la = LA(1); int startingOffset = la.getOffset(); int ln = la.getLineNumber(); + char [] fn = la.getFilename(); la = null; IASTExpression firstExpression = logicalOrExpression(scope, kind, key); if (LT(1) == IToken.tQUESTION) { @@ -964,7 +967,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("conditionalExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, ln); + throwBacktrack(startingOffset, endOffset, ln, fn); } } return firstExpression; @@ -977,8 +980,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression logicalOrExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = logicalAndExpression(scope, kind, key); while (LT(1) == IToken.tOR) { consume(IToken.tOR); @@ -994,7 +999,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("logicalOrExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } return firstExpression; @@ -1007,8 +1012,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression logicalAndExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = inclusiveOrExpression(scope, kind, key); while (LT(1) == IToken.tAND) { consume(IToken.tAND); @@ -1024,7 +1031,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("logicalAndExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } return firstExpression; @@ -1037,8 +1044,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression inclusiveOrExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = exclusiveOrExpression(scope, kind, key); while (LT(1) == IToken.tBITOR) { consume(); @@ -1054,7 +1064,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("inclusiveOrExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } return firstExpression; @@ -1067,8 +1077,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression exclusiveOrExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = andExpression(scope, kind, key); while (LT(1) == IToken.tXOR) { consume(); @@ -1084,7 +1097,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("exclusiveORExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } return firstExpression; @@ -1097,8 +1110,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression andExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = equalityExpression(scope, kind, key); while (LT(1) == IToken.tAMPER) { consume(); @@ -1113,7 +1129,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("andExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } return firstExpression; @@ -1146,8 +1162,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression equalityExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = relationalExpression(scope, kind, key); for (;;) { switch (LT(1)) { @@ -1169,7 +1188,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "equalityExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1185,8 +1204,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression relationalExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = shiftExpression(scope, kind, key); for (;;) { switch (LT(1)) { @@ -1234,7 +1256,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "relationalExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1257,8 +1279,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { */ public IASTExpression shiftExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = additiveExpression(scope, kind, key); for (;;) { switch (LT(1)) { @@ -1279,7 +1303,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("shiftExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1295,8 +1319,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression additiveExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = multiplicativeExpression(scope, kind, key); for (;;) { @@ -1319,7 +1345,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "additiveExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1335,8 +1361,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression multiplicativeExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws BacktrackException, EndOfFileException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = pmExpression(scope, kind, key); for (;;) { switch (LT(1)) { @@ -1371,7 +1399,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "multiplicativeExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1386,8 +1414,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { */ protected IASTExpression pmExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + IASTExpression firstExpression = castExpression(scope, kind, key); for (;;) { switch (LT(1)) { @@ -1408,7 +1439,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("pmExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -1427,8 +1458,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { BacktrackException { // TO DO: we need proper symbol checkint to ensure type name if (LT(1) == IToken.tLPAREN) { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IToken mark = mark(); consume(); if (templateIdScopes != null) { @@ -1470,7 +1503,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("castExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } catch (BacktrackException b) { if (templateIdScopes != null && !popped) { @@ -1652,7 +1685,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; if (kind == null) - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); TypeId id = getTypeIdInstance(scope); IToken last = lastToken; @@ -1691,7 +1724,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("typeId::createTypeId()", e); //$NON-NLS-1$ - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } return null; } @@ -1711,8 +1744,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression deleteExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); if (LT(1) == IToken.tCOLONCOLON) { // global scope consume(IToken.tCOLONCOLON); @@ -1738,7 +1773,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("deleteExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } return null; } @@ -1763,8 +1798,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { throws BacktrackException, EndOfFileException { setCompletionValues(scope, CompletionKind.NEW_TYPE_REFERENCE, KeywordSetKey.EMPTY); - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); if (LT(1) == IToken.tCOLONCOLON) { // global scope consume(IToken.tCOLONCOLON); @@ -1881,7 +1918,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "newExpression_1::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } } catch (BacktrackException e) { @@ -1951,7 +1988,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { return null; } catch (Exception e) { logException("newExpression_2::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } return null; } @@ -1968,8 +2005,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { */ public IASTExpression unaryExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); switch (LT(1)) { case IToken.tSTAR : consume(); @@ -2036,7 +2075,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } try { return astFactory.createExpression(scope, @@ -2047,7 +2086,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e1.getProblem()); } catch (Exception e) { logException("unaryExpression_1::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } case IToken.t_new : return newExpression(scope, key); @@ -2082,8 +2121,10 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression postfixExpression(IASTScope scope, CompletionKind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); IASTExpression firstExpression = null; boolean isTemplate = false; @@ -2124,7 +2165,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(ase.getProblem()); } catch (Exception e) { logException("postfixExpression_1::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; // simple-type-specifier ( assignment-expression , .. ) @@ -2216,7 +2257,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e6.getProblem()); } catch (Exception e) { logException("postfixExpression_2::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -2247,7 +2288,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_3::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; case IToken.tLPAREN : @@ -2291,7 +2332,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_4::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; case IToken.tINCR : @@ -2306,7 +2347,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_5::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; case IToken.tDECR : @@ -2321,7 +2362,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_6::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; case IToken.tDOT : @@ -2359,7 +2400,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_7::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; case IToken.tARROW : @@ -2396,7 +2437,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "postfixExpression_8::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } break; default : @@ -2432,8 +2473,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression simpleTypeConstructorExpression(IASTScope scope, Kind type, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + la = null; String typeName = consume().getImage(); consume(IToken.tLPAREN); setCurrentFunctionName(typeName); @@ -2449,7 +2493,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (Exception e) { logException( "simpleTypeConstructorExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } return null; } @@ -2474,7 +2518,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e1.getProblem()); } catch (Exception e) { logException("primaryExpression_1::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } case IToken.tFLOATINGPT : t = consume(); @@ -2486,7 +2530,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e2.getProblem()); } catch (Exception e) { logException("primaryExpression_2::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } case IToken.tSTRING : case IToken.tLSTRING : @@ -2499,7 +2543,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e5.getProblem()); } catch (Exception e) { logException("primaryExpression_3::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } case IToken.t_false : @@ -2513,7 +2557,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e3.getProblem()); } catch (Exception e) { logException("primaryExpression_4::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename() ); } case IToken.tCHAR : @@ -2528,7 +2572,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e4.getProblem()); } catch (Exception e) { logException("primaryExpression_5::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } case IToken.t_this : @@ -2541,7 +2585,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e7.getProblem()); } catch (Exception e) { logException("primaryExpression_6::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } case IToken.tLPAREN : t = consume(); @@ -2561,7 +2605,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e6.getProblem()); } catch (Exception e) { logException("primaryExpression_7::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), endOffset, t.getLineNumber() ); + throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename() ); } case IToken.tIDENTIFIER : case IToken.tCOLONCOLON : @@ -2575,7 +2619,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { } catch (BacktrackException bt) { IToken mark = mark(); Declarator d = new Declarator(new DeclarationWrapper(scope, - mark.getOffset(), mark.getLineNumber(), null)); + mark.getOffset(), mark.getLineNumber(), null, mark.getFilename())); if (LT(1) == IToken.tCOLONCOLON || LT(1) == IToken.tIDENTIFIER) { @@ -2593,7 +2637,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { operatorId(d, start, null, kind); else { backup(mark); - throwBacktrack(startingOffset, end.getEndOffset(), end.getLineNumber()); + throwBacktrack(startingOffset, end.getEndOffset(), end.getLineNumber(), t.getFilename()); } } else if (LT(1) == IToken.t_operator) operatorId(d, null, null, kind); @@ -2610,11 +2654,13 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e8.getProblem()); } catch (Exception e) { logException("primaryExpression_8::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, duple.getFilename()); } default : - startingOffset = LA(1).getOffset(); - line = LA(1).getLineNumber(); + IToken la= LA(1); + startingOffset = la.getOffset(); + line = la.getLineNumber(); + char [] fn = la.getFilename(); if (!queryLookaheadCapability(2)) { if (LA(1).canBeAPrefix()) { consume(); @@ -2631,7 +2677,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { return null; } catch (Exception e) { logException("primaryExpression_9::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, 0, line); + throwBacktrack(startingOffset, 0, line, fn); } return empty; } @@ -2692,7 +2738,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("assignmentOperatorExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), endOffset, t.getLineNumber()); + throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename()); } return null; } @@ -2720,8 +2766,11 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression unaryOperatorCastExpression(IASTScope scope, IASTExpression.Kind kind, CompletionKind completionKind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + la = null; IASTExpression castExpression = castExpression(scope, completionKind, key); int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; @@ -2732,7 +2781,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("unaryOperatorCastExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } return null; } @@ -2740,8 +2789,13 @@ public class ExpressionParser implements IExpressionParser, IParserData { protected IASTExpression specialCastExpression(IASTScope scope, IASTExpression.Kind kind, KeywordSetKey key) throws EndOfFileException, BacktrackException { - int line = LA(1).getLineNumber(); - int startingOffset = consume().getOffset(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + la = null; + + consume(); consume(IToken.tLT); IASTTypeId duple = typeId(scope, false, CompletionKind.TYPE_REFERENCE); consume(IToken.tGT); @@ -2756,15 +2810,12 @@ public class ExpressionParser implements IExpressionParser, IParserData { throwBacktrack(e.getProblem()); } catch (Exception e) { logException("specialCastExpression::createExpression()", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line ); + throwBacktrack(startingOffset, endOffset, line, fn ); } return null; } - public char[] getCurrentFilename() { - return scanner.getCurrentFilename(); - } - + protected boolean isCancelled = false; /* (non-Javadoc) @@ -2789,18 +2840,7 @@ public class ExpressionParser implements IExpressionParser, IParserData { if( first instanceof ITokenDuple ) setGreaterNameContext((ITokenDuple) first); return first; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFileIndex() - */ - public int getCurrentFileIndex() { - return scanner.getCurrentFileIndex(); - } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.IFilenameProvider#getFilenameForIndex(int) - */ - public String getFilenameForIndex(int index) { - return scanner.getFilenameForIndex(index); - } + public boolean validateCaches() { return true; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IExpressionParser.java index 8d820d54ff1..f59cf40bffd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IExpressionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IExpressionParser.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.parser; import org.eclipse.cdt.core.parser.BacktrackException; import org.eclipse.cdt.core.parser.EndOfFileException; -import org.eclipse.cdt.core.parser.IFilenameProvider; import org.eclipse.cdt.core.parser.KeywordSetKey; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; import org.eclipse.cdt.core.parser.ast.IASTExpression; @@ -21,7 +20,7 @@ import org.eclipse.cdt.core.parser.ast.IASTScope; /** * @author jcamelon */ -public interface IExpressionParser extends IFilenameProvider { +public interface IExpressionParser { /** * Request a parse from a pre-configured parser to parse an expression. 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 e041269c9d1..72af7fa2cdb 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 @@ -45,7 +45,6 @@ import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement; -import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTTemplate; @@ -106,7 +105,7 @@ public abstract class Parser extends ExpressionParser implements IParser bt.getStartingOffset(), bt.getEndOffset(), bt.getLineNumber(), - scanner.getCurrentFilename(), + bt.getFilename(), EMPTY_STRING, false, true ); @@ -309,7 +308,7 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) == IToken.tIDENTIFIER || LT(1) == IToken.tCOLONCOLON) duple = name(scope, CompletionKind.NAMESPACE_REFERENCE, KeywordSetKey.EMPTY); else - throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename()); if (LT(1) == IToken.tSEMI) { IToken last = consume(IToken.tSEMI); @@ -322,13 +321,13 @@ public abstract class Parser extends ExpressionParser implements IParser catch (Exception e1) { logException( "usingClause:createUsingDirective", e1 ); //$NON-NLS-1$ - throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber(), last.getFilename()); } astUD.acceptElement(requestor, astFactory.getReferenceManager()); return astUD; } endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; - throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename()); } boolean typeName = false; setCompletionValues(scope, CompletionKind.TYPE_REFERENCE, KeywordSetKey.POST_USING ); @@ -348,7 +347,7 @@ public abstract class Parser extends ExpressionParser implements IParser } else { - throwBacktrack(firstToken.getOffset(), ( lastToken != null ) ? lastToken.getEndOffset() : 0, firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), ( lastToken != null ) ? lastToken.getEndOffset() : 0, firstToken.getLineNumber(), firstToken.getFilename()); } if (LT(1) == IToken.tSEMI) { @@ -370,14 +369,14 @@ public abstract class Parser extends ExpressionParser implements IParser if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null ) throwBacktrack(((ASTSemanticException)e1).getProblem()); else - throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), last.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } declaration.acceptElement( requestor, astFactory.getReferenceManager() ); setCompletionValues(scope, getCompletionKindForDeclaration(scope, null), KeywordSetKey.DECLARATION ); return declaration; } int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0; - throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename()); return null; } /** @@ -398,7 +397,7 @@ public abstract class Parser extends ExpressionParser implements IParser { IToken firstToken = consume(IToken.t_extern); if (LT(1) != IToken.tSTRING) - throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename()); IToken spec = consume(IToken.tSTRING); if (LT(1) == IToken.tLBRACE) @@ -411,12 +410,12 @@ public abstract class Parser extends ExpressionParser implements IParser astFactory.createLinkageSpecification( scope, spec.getImage(), - firstToken.getOffset(), firstToken.getLineNumber()); + firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } catch (Exception e) { logException( "linkageSpecification_1:createLinkageSpecification", e ); //$NON-NLS-1$ - throwBacktrack(firstToken.getOffset(), lbrace.getEndOffset(), lbrace.getLineNumber()); + throwBacktrack(firstToken.getOffset(), lbrace.getEndOffset(), lbrace.getLineNumber(), lbrace.getFilename()); } linkage.enterScope( requestor, astFactory.getReferenceManager() ); @@ -459,12 +458,12 @@ public abstract class Parser extends ExpressionParser implements IParser astFactory.createLinkageSpecification( scope, spec.getImage(), - firstToken.getOffset(), firstToken.getLineNumber()); + firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } catch (Exception e) { logException( "linkageSpecification_2:createLinkageSpecification", e ); //$NON-NLS-1$ - throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), endOffset, firstToken.getLineNumber(), firstToken.getFilename()); return null; } linkage.enterScope( requestor, astFactory.getReferenceManager() ); @@ -512,13 +511,13 @@ public abstract class Parser extends ExpressionParser implements IParser templateInstantiation = astFactory.createTemplateInstantiation( scope, - firstToken.getOffset(), firstToken.getLineNumber()); + firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } catch (Exception e) { logException( "templateDeclaration:createTemplateInstantiation", e ); //$NON-NLS-1$ backup( mark ); - throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); + throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename()); return null; } templateInstantiation.enterScope( requestor, astFactory.getReferenceManager() ); @@ -540,13 +539,13 @@ public abstract class Parser extends ExpressionParser implements IParser templateSpecialization = astFactory.createTemplateSpecialization( scope, - firstToken.getOffset(), firstToken.getLineNumber()); + firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } catch (Exception e) { logException( "templateDeclaration:createTemplateSpecialization", e ); //$NON-NLS-1$ backup( mark ); - throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber()); + throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber(), gt.getFilename()); return null; } templateSpecialization.enterScope(requestor, astFactory.getReferenceManager()); @@ -570,12 +569,12 @@ public abstract class Parser extends ExpressionParser implements IParser scope, parms, exported, - firstToken.getOffset(), firstToken.getLineNumber()); + firstToken.getOffset(), firstToken.getLineNumber(), firstToken.getFilename()); } catch (Exception e) { logException( "templateDeclaration:createTemplateDeclaration", e ); //$NON-NLS-1$ - throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber()); + throwBacktrack(firstToken.getOffset(), gt.getEndOffset(), gt.getLineNumber(), gt.getFilename()); return null; } templateDecl.enterScope( requestor, astFactory.getReferenceManager() ); @@ -631,6 +630,8 @@ public abstract class Parser extends ExpressionParser implements IParser IToken la = LA(1); int startingOffset = la.getOffset(); int lnum = la.getLineNumber(); + char [] fn = la.getFilename(); + for (;;) { if (LT(1) == IToken.tGT) @@ -675,7 +676,7 @@ public abstract class Parser extends ExpressionParser implements IParser (id != null) ? id.getOffset() : 0, (id != null) ? id.getEndOffset() : 0, (id != null) ? id.getLineNumber() : 0, - lastToken.getEndOffset(), lastToken.getLineNumber() )); + lastToken.getEndOffset(), lastToken.getLineNumber(), lastToken.getFilename() )); } catch( ASTSemanticException ase ) { @@ -684,7 +685,7 @@ public abstract class Parser extends ExpressionParser implements IParser catch (Exception e) { logException( "templateParameterList_1:createTemplateParameter", e ); //$NON-NLS-1$ - throwBacktrack(startingOffset, ( lastToken != null ) ? lastToken.getEndOffset() : 0, lnum); + throwBacktrack(startingOffset, ( lastToken != null ) ? lastToken.getEndOffset() : 0, lnum, fn); } } @@ -725,7 +726,7 @@ public abstract class Parser extends ExpressionParser implements IParser (optionalId != null) ? optionalId.getOffset() : 0, (optionalId != null) ? optionalId.getEndOffset() : 0, (optionalId != null) ? optionalId.getLineNumber() : 0, - lastToken.getEndOffset(), lastToken.getLineNumber() )); + lastToken.getEndOffset(), lastToken.getLineNumber(), lastToken.getFilename() )); } catch( ASTSemanticException ase ) { @@ -735,7 +736,7 @@ public abstract class Parser extends ExpressionParser implements IParser { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "templateParameterList_2:createTemplateParameter", e ); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, lnum); + throwBacktrack(startingOffset, endOffset, lnum, fn); } } else if (LT(1) == IToken.tCOMMA) @@ -767,12 +768,12 @@ public abstract class Parser extends ExpressionParser implements IParser declarator.getInitializerClause(), wrapper.getStartingOffset(), wrapper.getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), - wrapper.getEndOffset(), wrapper.getEndLine()), + wrapper.getEndOffset(), wrapper.getEndLine(), fn ), null, ( parameterScope instanceof IASTCodeScope ) ? (IASTCodeScope) parameterScope : null, wrapper.getStartingOffset(), wrapper.getStartingLine(), declarator.getNameStartOffset(), declarator.getNameEndOffset(), declarator.getNameLine(), - wrapper.getEndOffset(), wrapper.getEndLine() )); + wrapper.getEndOffset(), wrapper.getEndLine(), fn )); } catch( ASTSemanticException ase ) { @@ -782,7 +783,7 @@ public abstract class Parser extends ExpressionParser implements IParser { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "templateParameterList:createParameterDeclaration", e ); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, lnum); + throwBacktrack(startingOffset, endOffset, lnum, fn); } } } @@ -835,12 +836,12 @@ public abstract class Parser extends ExpressionParser implements IParser scope, assembly, first.getOffset(), - first.getLineNumber(), last.getEndOffset(), last.getLineNumber()); + first.getLineNumber(), last.getEndOffset(), last.getLineNumber(), last.getFilename()); } catch (Exception e) { logException( "declaration:createASMDefinition", e ); //$NON-NLS-1$ - throwBacktrack(first.getOffset(), last.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), last.getEndOffset(), first.getLineNumber(), first.getFilename()); } // if we made it this far, then we have all we need // do the callback @@ -986,13 +987,13 @@ public abstract class Parser extends ExpressionParser implements IParser first.getLineNumber(), (identifier == null ? first.getOffset() : identifier.getOffset()), (identifier == null ? first.getEndOffset() : identifier.getEndOffset() ), - (identifier == null ? first.getLineNumber() : identifier.getLineNumber() )); + (identifier == null ? first.getLineNumber() : identifier.getLineNumber() ), first.getFilename()); } catch (Exception e1) { logException( "namespaceDefinition:createNamespaceDefinition", e1 ); //$NON-NLS-1$ - throwBacktrack(first.getOffset(), lbrace.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), lbrace.getEndOffset(), first.getLineNumber(), first.getFilename()); return null; } namespaceDefinition.enterScope( requestor, astFactory.getReferenceManager() ); @@ -1038,7 +1039,7 @@ public abstract class Parser extends ExpressionParser implements IParser if( identifier == null ) { - throwBacktrack(first.getOffset(), assign.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), assign.getEndOffset(), first.getLineNumber(), first.getFilename()); return null; } @@ -1055,7 +1056,7 @@ public abstract class Parser extends ExpressionParser implements IParser catch (Exception e1) { logException( "namespaceDefinition:createNamespaceAlias", e1 ); //$NON-NLS-1$ - throwBacktrack(first.getOffset(), semi.getEndOffset(), first.getLineNumber()); + throwBacktrack(first.getOffset(), semi.getEndOffset(), first.getLineNumber(), first.getFilename()); return null; } return alias; @@ -1063,7 +1064,7 @@ public abstract class Parser extends ExpressionParser implements IParser else { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; - throwBacktrack(first.getOffset(), endOffset, first.getLineNumber()); + throwBacktrack(first.getOffset(), endOffset, first.getLineNumber(), first.getFilename()); return null; } } @@ -1097,9 +1098,10 @@ public abstract class Parser extends ExpressionParser implements IParser IToken firstToken = LA(1); int firstOffset = firstToken.getOffset(); int firstLine = firstToken.getLineNumber(); - if( firstToken.getType() == IToken.tLBRACE ) throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber()); + char [] fn = firstToken.getFilename(); + if( firstToken.getType() == IToken.tLBRACE ) throwBacktrack(firstToken.getOffset(), firstToken.getEndOffset(), firstToken.getLineNumber(), firstToken.getFilename()); DeclarationWrapper sdw = - new DeclarationWrapper(scope, firstToken.getOffset(), firstToken.getLineNumber(), ownerTemplate); + new DeclarationWrapper(scope, firstToken.getOffset(), firstToken.getLineNumber(), ownerTemplate, fn); firstToken = null; // necessary for scalability CompletionKind completionKindForDeclaration = getCompletionKindForDeclaration(scope, overideKind); @@ -1132,7 +1134,7 @@ public abstract class Parser extends ExpressionParser implements IParser if( e1 instanceof ASTSemanticException && ((ASTSemanticException)e1).getProblem() != null ) throwBacktrack(((ASTSemanticException)e1).getProblem()); else - throwBacktrack(firstOffset, endOffset, firstLine); + throwBacktrack(firstOffset, endOffset, firstLine, fn); } try { @@ -1173,10 +1175,10 @@ public abstract class Parser extends ExpressionParser implements IParser break; case IToken.tRPAREN: if( ! fromCatchHandler ) - throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); + throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn); break; default: - throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); + throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn); } if( ! consumedSemi ) @@ -1188,7 +1190,7 @@ public abstract class Parser extends ExpressionParser implements IParser } if( hasFunctionTryBlock && ! hasFunctionBody ) - throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); + throwBacktrack(firstOffset, LA(1).getEndOffset(), LA(1).getLineNumber(), fn); } int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; List l = null; @@ -1204,7 +1206,7 @@ public abstract class Parser extends ExpressionParser implements IParser sdw.getStartingOffset(), lastToken != null ? lastToken.getEndOffset() : 0, sdw.getStartingLine(), - scanner.getCurrentFilename(), + fn, EMPTY_STRING, false, true ); throwBacktrack( p ); } else { @@ -1214,12 +1216,12 @@ public abstract class Parser extends ExpressionParser implements IParser catch( Exception e ) { logException( "simpleDecl", e ); //$NON-NLS-1$ - throwBacktrack(firstOffset, endOffset, firstLine); + throwBacktrack(firstOffset, endOffset, firstLine, fn); } if (hasFunctionBody && l.size() != 1) { - throwBacktrack(firstOffset, endOffset, firstLine); //TODO Should be an IProblem + throwBacktrack(firstOffset, endOffset, firstLine, fn); //TODO Should be an IProblem } if (!l.isEmpty()) // no need to do this unless we have a declarator { @@ -1245,7 +1247,7 @@ public abstract class Parser extends ExpressionParser implements IParser ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( astFactory.getReferenceManager() ); if ( !( declaration instanceof IASTScope ) ) - throwBacktrack(firstOffset, endOffset, firstLine); + throwBacktrack(firstOffset, endOffset, firstLine, fn); handleFunctionBody((IASTScope)declaration ); ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber( @@ -1270,7 +1272,7 @@ public abstract class Parser extends ExpressionParser implements IParser ownerTemplate, sdw.getStartingOffset(), sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(), - sdw.isFriend()); + sdw.isFriend(), lastToken.getFilename()); declaration.acceptElement(requestor, astFactory.getReferenceManager()); return declaration; } @@ -1278,7 +1280,7 @@ public abstract class Parser extends ExpressionParser implements IParser catch (Exception e1) { logException( "simpleDeclaration:createTypeSpecDeclaration", e1 ); //$NON-NLS-1$ - throwBacktrack(firstOffset, endOffset, firstLine); + throwBacktrack(firstOffset, endOffset, firstLine, fn); } return null; @@ -1360,7 +1362,7 @@ public abstract class Parser extends ExpressionParser implements IParser catch (Exception e1) { logException( "ctorInitializer:addConstructorMemberInitializer", e1 ); //$NON-NLS-1$ - throwBacktrack(startingOffset, rparen.getEndOffset(), rparen.getLineNumber()); + throwBacktrack(startingOffset, rparen.getEndOffset(), rparen.getLineNumber(), rparen.getFilename()); } if (LT(1) == IToken.tLBRACE) break; @@ -1387,7 +1389,7 @@ public abstract class Parser extends ExpressionParser implements IParser IToken current = LA(1); DeclarationWrapper sdw = - new DeclarationWrapper(scope, current.getOffset(), current.getLineNumber(), null); + new DeclarationWrapper(scope, current.getOffset(), current.getLineNumber(), null, current.getFilename()); declSpecifierSeq(sdw, true, false, CompletionKind.ARGUMENT_TYPE, KeywordSetKey.DECL_SPECIFIER_SEQUENCE ); if (sdw.getTypeSpecifier() == null && sdw.getSimpleType() @@ -1416,7 +1418,7 @@ public abstract class Parser extends ExpressionParser implements IParser { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "parameterDeclaration:createSimpleTypeSpecifier", e ); //$NON-NLS-1$ - throwBacktrack(current.getOffset(), endOffset, current.getLineNumber()); + throwBacktrack(current.getOffset(), endOffset, current.getLineNumber(), current.getFilename()); } setCompletionValues(scope,CompletionKind.SINGLE_NAME_REFERENCE,KeywordSetKey.EMPTY ); @@ -1429,7 +1431,7 @@ public abstract class Parser extends ExpressionParser implements IParser if (current == LA(1)) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; - throwBacktrack(current.getOffset(), endOffset, current.getLineNumber()); + throwBacktrack(current.getOffset(), endOffset, current.getLineNumber(), current.getFilename()); } collection.addParameter(sdw); } @@ -1920,7 +1922,7 @@ public abstract class Parser extends ExpressionParser implements IParser break; default : backup(t); - throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), t.getEndOffset(), t.getLineNumber(), t.getFilename()); } ITokenDuple d = name(sdw.getScope(), completionKind, @@ -1939,7 +1941,7 @@ public abstract class Parser extends ExpressionParser implements IParser int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "elaboratedTypeSpecifier:createElaboratedTypeSpecifier", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), endOffset, t.getLineNumber()); + throwBacktrack(t.getOffset(), endOffset, t.getLineNumber(), t.getFilename()); } sdw.setTypeSpecifier(elaboratedTypeSpec); @@ -1947,7 +1949,6 @@ public abstract class Parser extends ExpressionParser implements IParser { ((IASTElaboratedTypeSpecifier) elaboratedTypeSpec).acceptElement( requestor, astFactory.getReferenceManager()); - handleOffsetableNamedElement((IASTOffsetableNamedElement) elaboratedTypeSpec); } } /** @@ -2060,8 +2061,11 @@ public abstract class Parser extends ExpressionParser implements IParser protected IASTInitializerClause cInitializerClause(IASTScope scope, List designators, boolean constructInitializers) throws EndOfFileException, BacktrackException { - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + la = null; if (LT(1) == IToken.tLBRACE) { consume(IToken.tLBRACE); List initializerList = new ArrayList(); @@ -2085,7 +2089,8 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) == IToken.tRBRACE) break; if (checkHashcode == LA(1).hashCode()) { - throwBacktrack(startingOffset, LA(1).getEndOffset(), LA(1).getLineNumber()); + IToken l2 = LA(1); + throwBacktrack(startingOffset, l2.getEndOffset(), l2.getLineNumber(), l2.getFilename()); return null; } @@ -2116,13 +2121,13 @@ public abstract class Parser extends ExpressionParser implements IParser } catch (Exception e) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException("cInitializerClause:createInitializerClause", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } catch (BacktrackException b) { // do nothing } int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); return null; } /** @@ -2143,7 +2148,7 @@ public abstract class Parser extends ExpressionParser implements IParser } catch (Exception e) { logException( "initializerClause_1:createInitializerClause", e); //$NON-NLS-1$ - throwBacktrack(t.getOffset(), last.getEndOffset(), t.getLineNumber()); + throwBacktrack(t.getOffset(), last.getEndOffset(), t.getLineNumber(), last.getFilename()); return null; } } @@ -2173,7 +2178,7 @@ public abstract class Parser extends ExpressionParser implements IParser constructInitializers); } catch (Exception e) { logException("initializerClause_2:createInitializerClause", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber()); + throwBacktrack(startingOffset, last.getEndOffset(), last.getLineNumber(), last.getFilename()); return null; } } @@ -2181,8 +2186,11 @@ public abstract class Parser extends ExpressionParser implements IParser // if we get this far, it means that we did not // try this now instead // assignmentExpression - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + char [] fn = la.getFilename(); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + la = null; IASTExpression assignmentExpression = assignmentExpression(scope, CompletionKind.SINGLE_NAME_REFERENCE, @@ -2196,7 +2204,7 @@ public abstract class Parser extends ExpressionParser implements IParser } catch (Exception e) { logException("initializerClause_3:createInitializerClause", e); //$NON-NLS-1$ } - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); return null; } @@ -2293,8 +2301,11 @@ public abstract class Parser extends ExpressionParser implements IParser throws EndOfFileException, BacktrackException { Declarator d = null; DeclarationWrapper sdw = owner.getDeclarationWrapper(); - int startingOffset = LA(1).getOffset(); - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); + la = null; overallLoop : do { d = new Declarator(owner); @@ -2335,7 +2346,7 @@ public abstract class Parser extends ExpressionParser implements IParser int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "declarator:queryIsTypeName", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, newMark.getFilename()); } } catch (BacktrackException b) { failed = true; @@ -2382,7 +2393,7 @@ public abstract class Parser extends ExpressionParser implements IParser default : int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; if (seenParameter) - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); parameterDeclaration(d, parameterScope); seenParameter = true; } @@ -2459,7 +2470,7 @@ public abstract class Parser extends ExpressionParser implements IParser int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "declarator:createExceptionSpecification", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } } // check for optional pure virtual @@ -2563,7 +2574,7 @@ public abstract class Parser extends ExpressionParser implements IParser else { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; backup(mark); - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } } } @@ -2609,13 +2620,13 @@ public abstract class Parser extends ExpressionParser implements IParser .getEndOffset() : identifier.getEndOffset()), ((identifier == null) ? mark.getLineNumber() - : identifier.getLineNumber())); + : identifier.getLineNumber()), mark.getFilename()); } catch (ASTSemanticException e) { throwBacktrack(e.getProblem()); } catch (Exception e) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException("enumSpecifier:createEnumerationSpecifier", e); //$NON-NLS-1$ - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } handleEnumeration( enumeration ); consume(IToken.tLBRACE); @@ -2625,7 +2636,7 @@ public abstract class Parser extends ExpressionParser implements IParser enumeratorIdentifier = identifier(); } else { IToken la = LA(1); - throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); + throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); } IASTExpression initialValue = null; if (LT(1) == IToken.tASSIGN) { @@ -2645,14 +2656,14 @@ public abstract class Parser extends ExpressionParser implements IParser enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getLineNumber(), lastToken .getEndOffset(), lastToken - .getLineNumber(), initialValue); + .getLineNumber(), initialValue, lastToken.getFilename()); endEnumerator(enumerator); } catch (ASTSemanticException e1) { throwBacktrack(e1.getProblem()); } catch (Exception e) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$ - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } break; } @@ -2663,7 +2674,7 @@ public abstract class Parser extends ExpressionParser implements IParser enumerator.freeReferences(astFactory .getReferenceManager()); int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } try { enumerator = astFactory.addEnumerator(enumeration, @@ -2674,14 +2685,14 @@ public abstract class Parser extends ExpressionParser implements IParser enumeratorIdentifier.getEndOffset(), enumeratorIdentifier.getLineNumber(), lastToken .getEndOffset(), lastToken.getLineNumber(), - initialValue); + initialValue, lastToken.getFilename()); endEnumerator(enumerator); } catch (ASTSemanticException e1) { throwBacktrack(e1.getProblem()); } catch (Exception e) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException("enumSpecifier:addEnumerator", e); //$NON-NLS-1$ - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } consume(IToken.tCOMMA); } @@ -2695,7 +2706,7 @@ public abstract class Parser extends ExpressionParser implements IParser // enumSpecifierAbort int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; backup(mark); - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } } /** @@ -2738,7 +2749,7 @@ public abstract class Parser extends ExpressionParser implements IParser completionKind = CompletionKind.UNION_REFERENCE; break; default : - throwBacktrack(mark.getOffset(), mark.getEndOffset(), mark.getLineNumber()); + throwBacktrack(mark.getOffset(), mark.getEndOffset(), mark.getLineNumber(), mark.getFilename()); } ITokenDuple duple = null; @@ -2752,7 +2763,7 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) != IToken.tCOLON && LT(1) != IToken.tLBRACE) { IToken errorPoint = LA(1); backup(mark); - throwBacktrack(errorPoint.getOffset(), errorPoint.getEndOffset(), errorPoint.getLineNumber()); + throwBacktrack(errorPoint.getOffset(), errorPoint.getEndOffset(), errorPoint.getLineNumber(), errorPoint.getFilename()); } IASTClassSpecifier astClassSpecifier = null; @@ -2764,13 +2775,13 @@ public abstract class Parser extends ExpressionParser implements IParser duple == null ? classKey.getEndOffset() : duple .getFirstToken().getEndOffset(), duple == null ? classKey.getLineNumber() - : duple.getFirstToken().getLineNumber()); + : duple.getFirstToken().getLineNumber(), classKey.getFilename()); } catch (ASTSemanticException e) { throwBacktrack(e.getProblem()); } catch (Exception e) { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException("classSpecifier:createClassSpecifier", e); //$NON-NLS-1$ - throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber()); + throwBacktrack(mark.getOffset(), endOffset, mark.getLineNumber(), mark.getFilename()); } sdw.setTypeSpecifier(astClassSpecifier); // base clause @@ -2830,7 +2841,7 @@ public abstract class Parser extends ExpressionParser implements IParser astFactory.signalEndOfClassSpecifier(astClassSpecifier); } catch (Exception e1) { logException("classSpecifier:signalEndOfClassSpecifier", e1); //$NON-NLS-1$ - throwBacktrack(lt.getOffset(), lt.getEndOffset(), lt.getLineNumber()); + throwBacktrack(lt.getOffset(), lt.getEndOffset(), lt.getLineNumber(), lt.getFilename()); } astClassSpecifier.exitScope(requestor, astFactory @@ -2855,9 +2866,13 @@ public abstract class Parser extends ExpressionParser implements IParser IASTClassSpecifier astClassSpec) throws EndOfFileException, BacktrackException { - int startingOffset = consume(IToken.tCOLON).getOffset(); - int line = LA(1).getLineNumber(); - + IToken la = LA(1); + char [] fn = la.getFilename(); + int startingOffset = la.getOffset(); + int line = la.getLineNumber(); + la = null; + consume(IToken.tCOLON); + setCompletionValues(astClassSpec.getOwnerScope(), CompletionKind.CLASS_REFERENCE, KeywordSetKey.BASE_SPECIFIER ); boolean isVirtual = false; ASTAccessVisibility visibility = ASTAccessVisibility.PUBLIC; @@ -2942,7 +2957,7 @@ public abstract class Parser extends ExpressionParser implements IParser { int endOffset = ( lastToken != null ) ? lastToken.getEndOffset() : 0 ; logException( "baseSpecifier_2::addBaseSpecifier", e ); //$NON-NLS-1$ - throwBacktrack( startingOffset, endOffset, line ); + throwBacktrack( startingOffset, endOffset, line, fn ); } } @@ -3148,7 +3163,7 @@ public abstract class Parser extends ExpressionParser implements IParser if (LT(1) != IToken.t_catch) { IToken la = LA(1); - throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); // error, need at least one of these + throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); // error, need at least one of these } while (LT(1) == IToken.t_catch) { consume(IToken.t_catch); @@ -3182,7 +3197,7 @@ public abstract class Parser extends ExpressionParser implements IParser } catch (Exception e) { logException("singleStatementScope:createNewCodeBlock", e); //$NON-NLS-1$ IToken la = LA(1); - throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber()); + throwBacktrack(la.getOffset(), la.getEndOffset(), la.getLineNumber(), la.getFilename()); return; } newScope.enterScope(requestor, astFactory.getReferenceManager()); @@ -3235,7 +3250,9 @@ public abstract class Parser extends ExpressionParser implements IParser */ protected void compoundStatement(IASTScope scope, boolean createNewScope) throws EndOfFileException, BacktrackException { - int line = LA(1).getLineNumber(); + IToken la = LA(1); + int line = la.getLineNumber(); + char [] fn = la.getFilename(); int startingOffset = consume(IToken.tLBRACE).getOffset(); IASTCodeScope newScope = null; @@ -3245,7 +3262,7 @@ public abstract class Parser extends ExpressionParser implements IParser } catch (Exception e) { int endOffset = ( lastToken == null ) ? 0 : lastToken.getEndOffset(); logException("compoundStatement:createNewCodeBlock", e); //$NON-NLS-1$ - throwBacktrack(startingOffset, endOffset, line); + throwBacktrack(startingOffset, endOffset, line, fn); } newScope.enterScope(requestor, astFactory.getReferenceManager()); } @@ -3354,14 +3371,11 @@ public abstract class Parser extends ExpressionParser implements IParser protected void endDeclaration(IASTDeclaration declaration) throws EndOfFileException { cleanupLastToken(); - if (declaration instanceof IASTOffsetableNamedElement) - handleOffsetableNamedElement((IASTOffsetableNamedElement) declaration); } protected void endEnumerator(IASTEnumerator enumerator) throws EndOfFileException { cleanupLastToken(); - handleOffsetableNamedElement(enumerator); } /** @@ -3381,18 +3395,12 @@ public abstract class Parser extends ExpressionParser implements IParser protected void handleClassSpecifier(IASTClassSpecifier classSpecifier) throws EndOfFileException { cleanupLastToken(); - handleOffsetableNamedElement(classSpecifier); } protected void handleEnumeration(IASTEnumerationSpecifier enumeration) throws EndOfFileException { cleanupLastToken(); - handleOffsetableNamedElement( enumeration ); } /** - * @param expression - */ - protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) { - } - + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.IParser#cancel() */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/QuickParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/QuickParser.java index 6861fd7e697..c3811e5dc86 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/QuickParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/QuickParser.java @@ -71,7 +71,7 @@ public class QuickParser extends Parser { * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) */ protected void setupASTFactory(IScanner scanner, ParserLanguage language) { - astFactory = ParserFactory.createASTFactory( this, ParserMode.QUICK_PARSE, language); + astFactory = ParserFactory.createASTFactory( ParserMode.QUICK_PARSE, language); scanner.setASTFactory(astFactory); astFactory.setLogger(log); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java index b2f811c37a5..d1bac6379a3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/SelectionParser.java @@ -11,9 +11,7 @@ package org.eclipse.cdt.internal.core.parser; import java.util.Arrays; -import java.util.Hashtable; import java.util.Iterator; -import java.util.Map; import org.eclipse.cdt.core.parser.EndOfFileException; import org.eclipse.cdt.core.parser.IParserLogService; @@ -30,11 +28,10 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTExpression; -import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; import org.eclipse.cdt.core.parser.ast.IASTNode; +import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; -import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTVariable; @@ -56,8 +53,6 @@ public class SelectionParser extends ContextualParser { private ITokenDuple greaterContextDuple = null; private boolean pastPointOfSelection = false; private IASTNode contextNode = null; - private static final int DEFAULT_MAP_SIZE = 512; - private static final float DEFAULT_FLOAT_SIZE = 0.75f; /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.Parser#handleNewToken(org.eclipse.cdt.core.parser.IToken) @@ -169,20 +164,7 @@ public class SelectionParser extends ContextualParser { IASTNode node = lookupNode(finalDuple); if( node == null ) return null; if( !(node instanceof IASTOffsetableNamedElement )) return null; - Integer lookupResult = ((Integer)nodeTable.get(node)); - int indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1; - - if( indexValue == -1 && node instanceof IASTParameterDeclaration ) - { - try { - IASTFunction f = ((IASTParameterDeclaration)node).getOwnerFunctionDeclaration(); - lookupResult = ((Integer)nodeTable.get(f)); - indexValue = ( lookupResult != null ) ? lookupResult.intValue() : -1; - } catch (ASTNotImplementedException e) { - } - - } - return new SelectionParseResult( (IASTOffsetableNamedElement) node, getFilenameForIndex(indexValue) ); + return new SelectionParseResult( (IASTOffsetableNamedElement) node, new String( ((IASTOffsetableElement)node).getFilename() )); } @@ -295,7 +277,6 @@ public class SelectionParser extends ContextualParser { else { contextNode = declaration; - handleOffsetableNamedElement((IASTOffsetableNamedElement) declaration); throw new EndOfFileException(); } } @@ -313,15 +294,7 @@ public class SelectionParser extends ContextualParser { } } - - protected Map nodeTable = new Hashtable( DEFAULT_MAP_SIZE, DEFAULT_FLOAT_SIZE ); - /* (non-Javadoc) - * @see org.eclipse.cdt.internal.core.parser.Parser#handleNode(org.eclipse.cdt.core.parser.ast.IASTNode) - */ - protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) { - if( node != null ) - nodeTable.put( node, new Integer( getCurrentFileIndex()) ); - } + public static class SelectionParseResult implements ISelectionParseResult { @@ -359,7 +332,6 @@ public class SelectionParser extends ContextualParser { else { contextNode = enumerator; - handleOffsetableNamedElement(enumerator); throw new EndOfFileException(); } } @@ -373,7 +345,6 @@ public class SelectionParser extends ContextualParser { else { contextNode = classSpecifier; - handleOffsetableNamedElement( classSpecifier ); throw new EndOfFileException(); } } @@ -384,7 +355,6 @@ public class SelectionParser extends ContextualParser { else { contextNode = enumeration; - handleOffsetableNamedElement( enumeration ); throw new EndOfFileException(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/StructuralParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/StructuralParser.java index 5406e1eecb2..7207f334049 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/StructuralParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/StructuralParser.java @@ -77,7 +77,7 @@ public class StructuralParser extends Parser implements IParser { * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setupASTFactory(org.eclipse.cdt.core.parser.IScanner, org.eclipse.cdt.core.parser.ParserLanguage) */ protected void setupASTFactory(IScanner scanner, ParserLanguage language) { - astFactory = ParserFactory.createASTFactory( this, ParserMode.COMPLETE_PARSE, language); + astFactory = ParserFactory.createASTFactory( ParserMode.COMPLETE_PARSE, language); scanner.setASTFactory(astFactory); astFactory.setLogger(log); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java index 9911ac3c63b..fbe7db0f9a6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java @@ -20,7 +20,7 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager; */ public class ASTInclusion implements IASTInclusion { - public ASTInclusion( String name, String fileName, boolean local, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endLine ) + public ASTInclusion( String name, String fileName, boolean local, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endLine, char [] fn ) { this.name = name; this.fileName = fileName; @@ -29,6 +29,7 @@ public class ASTInclusion implements IASTInclusion { setNameOffset(nameOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); setEndingOffsetAndLineNumber(endOffset, endLine); + this.filename = fn; } private int nameEndOffset; @@ -179,6 +180,7 @@ public class ASTInclusion implements IASTInclusion { } private int fileIndex; + private final char[] filename; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFileIndex() */ @@ -192,4 +194,11 @@ public class ASTInclusion implements IASTInclusion { public void setFileIndex(int index) { fileIndex = index; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return filename; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java index d3d13f7be93..7c5aa5287e6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java @@ -26,8 +26,9 @@ public class ASTMacro implements IASTMacro { private int nameEndOffset = 0; private final String name; private final IMacroDescriptor innerMacro; + private final char[] fn; - public ASTMacro( String name, IMacroDescriptor info, int start, int startLine, int nameBeg, int nameEnd, int nameLine, int end, int endLine ) + public ASTMacro( String name, IMacroDescriptor info, int start, int startLine, int nameBeg, int nameEnd, int nameLine, int end, int endLine, char[] fn ) { this.name =name; setStartingOffsetAndLineNumber(start, startLine); @@ -35,6 +36,7 @@ public class ASTMacro implements IASTMacro { setNameEndOffsetAndLineNumber(nameEnd, nameLine); setEndingOffsetAndLineNumber(end, endLine); innerMacro = info; + this.fn = fn; } private int startingOffset = 0, endingOffset = 0, nameOffset = 0; @@ -202,5 +204,11 @@ public class ASTMacro implements IASTMacro { public void setFileIndex(int index) { fileIndex = index; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java index 48439864f05..55effec4bb3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/BaseASTFactory.java @@ -44,16 +44,16 @@ public class BaseASTFactory { /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createMacro(java.lang.String, int, int, int) */ - public IASTMacro createMacro(String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info) { - IASTMacro m = new ASTMacro( name, info, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); + public IASTMacro createMacro(String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IMacroDescriptor info, char[] fn) { + IASTMacro m = new ASTMacro( name, info, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); return m; } /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createInclusion(java.lang.String, java.lang.String, boolean) */ - public IASTInclusion createInclusion(String name, String fileName, boolean local, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) { - IASTInclusion inclusion = new ASTInclusion( name, fileName, local, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); + public IASTInclusion createInclusion(String name, String fileName, boolean local, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) { + IASTInclusion inclusion = new ASTInclusion( name, fileName, local, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); return inclusion; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java index 146c1e70839..57a8bd30657 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java @@ -23,14 +23,16 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM { private final String assembly; /** + * @param filename * */ - public ASTASMDefinition( IContainerSymbol scope, String assembly, int first, int firstLine, int last , int lastLine ) + public ASTASMDefinition( IContainerSymbol scope, String assembly, int first, int firstLine, int last , int lastLine, char[] filename ) { super( scope ); this.assembly = assembly; setStartingOffsetAndLineNumber(first, firstLine); setEndingOffsetAndLineNumber(last, lastLine); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTASMDefinition#getBody() @@ -66,6 +68,7 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM { } private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; + private final char[] fn; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() */ @@ -109,5 +112,11 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM { return endingOffset; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java index 10d2a84dac7..19ca2ca95e7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java @@ -32,8 +32,9 @@ public class ASTAbstractTypeSpecifierDeclaration /** * @param ownerScope + * @param filename */ - public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend ) + public ASTAbstractTypeSpecifierDeclaration(IContainerSymbol ownerScope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] filename ) { super(ownerScope); this.typeSpec = typeSpecifier; @@ -41,6 +42,7 @@ public class ASTAbstractTypeSpecifierDeclaration this.isFriendDeclaration = isFriend; setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); + fn = filename; } /* (non-Javadoc) @@ -100,6 +102,7 @@ public class ASTAbstractTypeSpecifierDeclaration private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; + private final char[] fn; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() */ @@ -143,4 +146,11 @@ public class ASTAbstractTypeSpecifierDeclaration { return endingOffset; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java index 6bef42db601..32efa1182a9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java @@ -93,7 +93,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier /** * @param symbol */ - public ASTClassSpecifier(ISymbol symbol, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references ) + public ASTClassSpecifier(ISymbol symbol, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, char [] filename ) { super(symbol); classKind = kind; @@ -104,6 +104,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() ); this.references = references; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType() @@ -275,6 +276,7 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier private int startingLineNumber, startingOffset, endingLineNumber, endingOffset, nameStartOffset, nameEndOffset, nameLineNumber; + private final char[] fn; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() */ @@ -356,4 +358,10 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier nameEndOffset = offset; nameLineNumber = lineNumber; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java index ae3cdef8d7d..950e66fe002 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java @@ -35,8 +35,9 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora * @param kind * @param startingOffset * @param endOffset + * @param filename */ - public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, boolean isDecl ) + public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, boolean isDecl, char[] filename ) { super( checkSymbol ); this.kind = kind; @@ -47,6 +48,7 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() ); isForwardDeclaration = isDecl; this.references = references; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName() @@ -212,4 +214,12 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora nameEndOffset = offset; nameLineNumber = lineNumber; } + + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java index c9c6d05baad..c2c5703c41a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java @@ -31,16 +31,26 @@ public class ASTEnumerationSpecifier implements IASTEnumerationSpecifier { private final ASTQualifiedNamedElement qualifiedName; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param symbol + * @param filename */ - public ASTEnumerationSpecifier(ISymbol symbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) + public ASTEnumerationSpecifier(ISymbol symbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename ) { super(symbol); setStartingOffsetAndLineNumber(startingOffset, startingLine); setNameOffset( nameOffset ); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() ); + fn = filename; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java index add248866eb..10a89d0ec9c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java @@ -26,13 +26,22 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator private final IASTExpression initialValue; private final IASTEnumerationSpecifier owner; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param enumeratorSymbol * @param startingOffset * @param endingOffset * @param initialValue + * @param filename */ - public ASTEnumerator(ISymbol enumeratorSymbol, IASTEnumerationSpecifier owner, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IASTExpression initialValue) + public ASTEnumerator(ISymbol enumeratorSymbol, IASTEnumerationSpecifier owner, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, IASTExpression initialValue, char[] filename) { super( enumeratorSymbol ); setStartingOffsetAndLineNumber(startingOffset, startingLine); @@ -41,6 +50,7 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator setEndingOffsetAndLineNumber( endingOffset, endingLine ); this.initialValue = initialValue; this.owner = owner; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTEnumerator#getOwnerEnumerationSpecifier() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java index c8f5314bedc..09ce3eaefec 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java @@ -37,10 +37,11 @@ public class ASTField extends ASTVariable implements IASTField * @param nameOffset * @param references * @param visibility + * @param filename */ - public ASTField(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, boolean previouslyDeclared, IASTExpression constructorExpression, ASTAccessVisibility visibility) + public ASTField(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, boolean previouslyDeclared, IASTExpression constructorExpression, ASTAccessVisibility visibility, char [] filename) { - super( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared ); + super( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared, filename ); this.visibility = visibility; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java index 407e7577489..692f9e61b7e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java @@ -44,6 +44,14 @@ public class ASTFunction extends ASTScope implements IASTFunction private final List parameters; protected List references; private List declarations = null; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param symbol * @param parameters @@ -53,8 +61,9 @@ public class ASTFunction extends ASTScope implements IASTFunction * @param nameOffset * @param ownerTemplate * @param references + * @param filename */ - public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock, boolean isFriend ) + public ASTFunction(IParameterizedSymbol symbol, int nameEndOffset, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startingLine, int nameOffset, int nameLine, IASTTemplate ownerTemplate, List references, boolean previouslyDeclared, boolean hasFunctionTryBlock, boolean isFriend, char[] filename ) { super( symbol ); this.parameters = parameters; @@ -69,6 +78,7 @@ public class ASTFunction extends ASTScope implements IASTFunction this.previouslyDeclared =previouslyDeclared; this.hasFunctionTryBlock = hasFunctionTryBlock; this.isFriendDeclaration = isFriend; + fn = filename; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java index f17dab45d80..224cd6c51ca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java @@ -29,15 +29,24 @@ public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements { private List declarations = new ArrayList(); private final String linkageString; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** + * @param filename * */ - public ASTLinkageSpecification( IContainerSymbol scope, String linkageString, int startingOffset, int startingLine ) + public ASTLinkageSpecification( IContainerSymbol scope, String linkageString, int startingOffset, int startingLine, char[] filename ) { super( scope ); this.linkageString = linkageString; setStartingOffsetAndLineNumber(startingOffset, startingLine); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java index 0f51b271b10..ed54347593d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java @@ -53,9 +53,10 @@ public class ASTMethod extends ASTFunction implements IASTMethod * @param nameOffset * @param ownerTemplate * @param references + * @param filename */ public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, - List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock, boolean isFriend ) + List references, boolean previouslyDeclared, boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean hasFunctionTryBlock, boolean isFriend, char [] filename ) { super( symbol, @@ -66,7 +67,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod startOffset, startLine, nameOffset, - nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); + nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend, filename ); this.visibility = visibility; this.isConstructor = isConstructor; this.isDestructor = isDestructor; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java index 6d9db8c9226..db305f23c4e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java @@ -28,14 +28,23 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias private final String alias; private final IASTNamespaceDefinition namespace; private List references; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope * @param symbol * @param startingOffset * @param nameOffset * @param endOffset + * @param filename */ - public ASTNamespaceAlias(ISymbol s, String alias, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references) + public ASTNamespaceAlias(ISymbol s, String alias, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, List references, char[] filename) { super( s ); this.alias = alias; @@ -45,6 +54,7 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias setNameOffset(nameOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset); this.references = references; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias#getAlias() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java index d00dade478d..33a75860fc2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java @@ -31,19 +31,28 @@ public class ASTNamespaceDefinition { private final ASTQualifiedNamedElement qualifiedName; private List declarations = null; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param namespaceSymbol * @param startingOffset * @param nameOffset + * @param filename */ - public ASTNamespaceDefinition(ISymbol namespaceSymbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) + public ASTNamespaceDefinition(ISymbol namespaceSymbol, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename ) { super( namespaceSymbol ); setStartingOffsetAndLineNumber( startingOffset, startingLine ); setNameOffset( nameOffset ); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), namespaceSymbol.getName() ); + fn= filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java index e99727d48dd..6280d95af68 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java @@ -34,7 +34,14 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD private final ASTAbstractDeclaration abstractDeclaration; private final String parameterName; private final IASTInitializerClause initializerClause; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param isConst * @param typeSpecifier @@ -42,8 +49,9 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD * @param arrayModifiers * @param parameterName * @param initializerClause + * @param filename */ - public ASTParameterDeclaration(ISymbol symbol, boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) + public ASTParameterDeclaration(ISymbol symbol, boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename ) { super( symbol ); abstractDeclaration = new ASTAbstractDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp ); @@ -53,6 +61,7 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD setEndingOffsetAndLineNumber(endingOffset, endingLine); setNameOffset(nameOffset); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java index 2d3510e2e22..c94a0aae561 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java @@ -38,14 +38,23 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec private ISymbol owned = null; private IASTScope ownerScope; private ITemplateFactory factory; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + private ITemplateSymbol getTemplateSymbol(){ return (ITemplateSymbol) (( getSymbol() instanceof ITemplateSymbol ) ? getSymbol() : null); } /** + * @param filename * */ - public ASTTemplateDeclaration( ITemplateSymbol template, IASTScope scope, List parameters ) + public ASTTemplateDeclaration( ITemplateSymbol template, IASTScope scope, List parameters, char[] filename ) { super( template ); @@ -67,6 +76,7 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec templateParameters = ( parameters != null ) ? parameters : new LinkedList(); ownerScope = scope; + fn = filename; } public IASTScope getOwnerScope(){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java index 62fb8de3add..ac75952106d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java @@ -36,9 +36,16 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI private IASTTemplateDeclaration instantiatedTemplate; private ISymbol instance; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + - - public ASTTemplateInstantiation( IASTScope scope ){ + public ASTTemplateInstantiation( IASTScope scope, char[] filename ){ super( null ); IContainerSymbol container = ((ASTScope)scope).getContainerSymbol(); @@ -49,6 +56,7 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI factory.pushTemplate( null ); ownerScope = scope; + fn = filename; } public IASTTemplateDeclaration getInstantiatedTemplate(){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java index c238857575d..95662490266 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java @@ -39,15 +39,23 @@ public class ASTTemplateParameter extends ASTSymbol implements IASTTemplateParam private IASTTypeId defaultValue; private ASTParameterDeclaration parameter; private List parms; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** + * @param filename * @param symbol * @param defaultValue2 * @param parameter2 * @param parms2 */ - public ASTTemplateParameter(ISymbol sym, IASTTypeId defVal, IASTParameterDeclaration param, List parms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) { + public ASTTemplateParameter(ISymbol sym, IASTTypeId defVal, IASTParameterDeclaration param, List parms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename ) { super( sym ); symbol = sym; defaultValue = defVal; @@ -58,6 +66,7 @@ public class ASTTemplateParameter extends ASTSymbol implements IASTTemplateParam setEndingOffsetAndLineNumber(endingOffset, endingLine); setNameOffset(nameOffset); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTTemplateParameter#getTemplateParameterKind() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java index 549b597c15d..10f78444431 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java @@ -21,10 +21,11 @@ import org.eclipse.cdt.internal.core.parser.pst.ITemplateSymbol; public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements IASTTemplateSpecialization { /** + * @param filename * */ - public ASTTemplateSpecialization( ITemplateSymbol template, IASTScope scope ) + public ASTTemplateSpecialization( ITemplateSymbol template, IASTScope scope, char []filename ) { - super(template, scope, null); + super(template, scope, null, filename); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java index d226784e5e5..8c29bbe9275 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java @@ -32,6 +32,13 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration private final IASTAbstractDeclaration mapping; private final ASTQualifiedNamedElement qualifiedName; private List references; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } /** * @param newSymbol @@ -39,8 +46,9 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration * @param startingOffset * @param nameOffset * @param references + * @param filename */ - public ASTTypedef(ISymbol newSymbol, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references) + public ASTTypedef(ISymbol newSymbol, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, char[] filename) { super( newSymbol ); this.mapping = mapping; @@ -49,6 +57,7 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration setStartingOffsetAndLineNumber(startingOffset, startingLine); setNameOffset(nameOffset); setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java index 9498e47cd90..29c800c60ca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java @@ -31,11 +31,19 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration private final List declarations = new ArrayList(); private List references; private String name; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** + * @param filename * */ - public ASTUsingDeclaration( IASTScope ownerScope, String name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references ) + public ASTUsingDeclaration( IASTScope ownerScope, String name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename ) { this.ownerScope = ownerScope; this.isTypeName = isTypeName; @@ -44,6 +52,7 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); this.references = references; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java index 3c43ef23fa0..4891349baaa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java @@ -27,13 +27,22 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs { private final IUsingDirectiveSymbol using; private List references; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param namespaceDefinition * @param startingOffset * @param endingOffset + * @param filename */ //public ASTUsingDirective(IContainerSymbol ownerSymbol, IASTNamespaceDefinition namespaceDefinition, int startingOffset, int endingOffset, List references ) - public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int startingLine, int endingOffset, int endingLine, List references ) + public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename ) { super( ownerSymbol ); //namespace = namespaceDefinition; @@ -41,6 +50,7 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); this.references = references; + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java index d9fabf478d2..e7d4a5bbb26 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java @@ -35,6 +35,14 @@ public class ASTVariable extends ASTSymbol implements IASTVariable private final IASTInitializerClause initializerClause; private final IASTAbstractDeclaration abstractDeclaration; protected List references; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param newSymbol * @param abstractDeclaration @@ -43,8 +51,9 @@ public class ASTVariable extends ASTSymbol implements IASTVariable * @param startingOffset * @param nameOffset * @param references + * @param filename */ - public ASTVariable(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, IASTExpression constructorExpression, boolean previouslyDeclared ) + public ASTVariable(ISymbol newSymbol, IASTAbstractDeclaration abstractDeclaration, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, List references, IASTExpression constructorExpression, boolean previouslyDeclared, char[] filename ) { super( newSymbol ); this.abstractDeclaration = abstractDeclaration; @@ -55,7 +64,8 @@ public class ASTVariable extends ASTSymbol implements IASTVariable setNameOffset( nameOffset ); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); this.references = references; - qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), newSymbol.getName() ); + qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), newSymbol.getName() ); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index f422d5fcbeb..bbdff213f6b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -20,7 +20,6 @@ import java.util.Map; import java.util.Stack; import org.eclipse.cdt.core.parser.Enum; -import org.eclipse.cdt.core.parser.IFilenameProvider; import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate; import org.eclipse.cdt.core.parser.IToken; @@ -118,13 +117,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto protected static final String EMPTY_STRING = ""; //$NON-NLS-1$ private final static ITypeInfo.OperatorExpression SUBSCRIPT; private final static IProblemFactory problemFactory = new ASTProblemFactory(); - private final IFilenameProvider fileProvider; private final ParserMode mode; private final ReferenceCache cache = new ReferenceCache(); private static final int BUILTIN_TYPE_SIZE = 64; private final Hashtable typeIdCache = new Hashtable( BUILTIN_TYPE_SIZE ); private final Hashtable simpleTypeSpecCache = new Hashtable( BUILTIN_TYPE_SIZE ); private static final int DEFAULT_QUALIFIEDNAME_REFERENCE_SIZE = 4; + private char[] filename; static { @@ -144,12 +143,12 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } } - public CompleteParseASTFactory( IFilenameProvider filenameProvider, ParserLanguage language, ParserMode mode, IASTFactoryExtension extension ) + public CompleteParseASTFactory( ParserLanguage language, ParserMode mode, IASTFactoryExtension extension ) { super(extension); pst = new ParserSymbolTable( language, mode ); - fileProvider = filenameProvider; this.mode = mode; + filename = EMPTY_STRING.toCharArray(); } /* @@ -492,6 +491,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto int startingLine, int endingOffset, int endingLine) throws ASTSemanticException { + setFilename( duple ); List references = new ArrayList(); ISymbol symbol = lookupQualifiedName( scopeToSymbol( scope), duple, references, true ); @@ -505,14 +505,21 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem( pste.createProblemID(), duple.toString(), startingOffset, endingOffset, startingLine, true ); } - ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references ); + ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references, filename ); attachSymbolExtension( usingDirective, using ); return using; } - protected IContainerSymbol getScopeToSearchUpon( + /** + * @param duple + */ + private void setFilename(ITokenDuple duple) { + filename = ( duple == null ) ? EMPTY_STRING.toCharArray() : duple.getFilename(); + } + + protected IContainerSymbol getScopeToSearchUpon( IASTScope currentScope, IToken firstToken, Iterator iterator ) { @@ -544,6 +551,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto int startingOffset, int startingLine, int endingOffset, int endingLine) throws ASTSemanticException { + setFilename( name ); List references = new ArrayList(); IUsingDeclarationSymbol endResult = null; @@ -586,7 +594,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getImage(), - endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references ); + endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references, filename ); attachSymbolExtension( endResult, using ); return using; @@ -598,9 +606,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTScope scope, String assembly, int startingOffset, - int startingLine, int endingOffset, int endingLine) + int startingLine, int endingOffset, int endingLine, char[] fn) { - return new ASTASMDefinition( scopeToSymbol(scope), assembly, startingOffset, startingLine, endingOffset, endingLine); + return new ASTASMDefinition( scopeToSymbol(scope), assembly, startingOffset, startingLine, endingOffset, endingLine, fn); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, int, int) @@ -609,9 +617,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTScope scope, String identifier, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) throws ASTSemanticException + int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) throws ASTSemanticException { - + //TODO - set filename IContainerSymbol pstScope = scopeToSymbol(scope); ISymbol namespaceSymbol = null; @@ -651,7 +659,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } } - ASTNamespaceDefinition namespaceDef = new ASTNamespaceDefinition( namespaceSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLineNumber); + ASTNamespaceDefinition namespaceDef = new ASTNamespaceDefinition( namespaceSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLineNumber, fn); attachSymbolExtension( namespaceSymbol, namespaceDef, true ); return namespaceDef; } @@ -714,9 +722,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto public IASTLinkageSpecification createLinkageSpecification( IASTScope scope, String spec, - int startingOffset, int startingLine) + int startingOffset, int startingLine, char[] fn) { - return new ASTLinkageSpecification( scopeToSymbol( scope ), spec, startingOffset, startingLine ); + return new ASTLinkageSpecification( scopeToSymbol( scope ), spec, startingOffset, startingLine, fn ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTClassKind, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplate, int, int) @@ -728,8 +736,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ClassNameType type, ASTAccessVisibility access, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException + int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException { + setFilename( fn ); IContainerSymbol currentScopeSymbol = scopeToSymbol(scope); ITypeInfo.eType pstType = classKindToTypeInfo(kind); List references = new ArrayList(); @@ -819,7 +828,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto addTemplateIdReferences( references, name.getTemplateIdArgLists()[i]); name.freeReferences( cache ); } - ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references ); + ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, filename ); attachSymbolExtension(newSymbol, classSpecifier, true ); return classSpecifier; @@ -852,10 +861,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto protected void handleProblem( IASTScope scope, int id, String attribute ) throws ASTSemanticException { - handleProblem( scope, id, attribute, -1, -1, -1, true ); + handleProblem( scope, id, attribute, -1, -1, -1, true); } - protected void handleProblem( int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError) throws ASTSemanticException { + protected void handleProblem( int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError ) throws ASTSemanticException { handleProblem( null, id, attribute, startOffset, endOffset, lineNumber, isError ); } @@ -866,11 +875,12 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto * @param endOffset * @param lineNumber * @param isError TODO + * @param filename * @throws ASTSemanticException */ - protected void handleProblem( IASTScope scope, int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError) throws ASTSemanticException { + protected void handleProblem( IASTScope scope, int id, String attribute, int startOffset, int endOffset, int lineNumber, boolean isError ) throws ASTSemanticException { IProblem p = problemFactory.createProblem( id, - startOffset, endOffset, lineNumber, fileProvider.getCurrentFilename(), attribute, !isError, isError ); + startOffset, endOffset, lineNumber, filename, attribute, !isError, isError ); TraceUtil.outputTrace(logService, "CompleteParseASTFactory - IProblem : ", p, null, null, null ); //$NON-NLS-1$ @@ -919,6 +929,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ASTAccessVisibility visibility, ITokenDuple parentClassName) throws ASTSemanticException { + setFilename( parentClassName ); IDerivableContainerSymbol classSymbol = (IDerivableContainerSymbol)scopeToSymbol( astClassSpec); Iterator iterator = null; List references = new ArrayList(); @@ -1037,8 +1048,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTScope scope, String name, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException + int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException { + setFilename(fn); IContainerSymbol containerSymbol = scopeToSymbol(scope); ITypeInfo.eType pstType = ITypeInfo.t_enumeration; @@ -1052,12 +1064,19 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem( e.createProblemID(), name ); } - ASTEnumerationSpecifier enumSpecifier = new ASTEnumerationSpecifier( classSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine ); + ASTEnumerationSpecifier enumSpecifier = new ASTEnumerationSpecifier( classSymbol, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn ); attachSymbolExtension(classSymbol, enumSpecifier, true ); return enumSpecifier; } - /* (non-Javadoc) + /** + * @param fn + */ + private void setFilename(char[] fn) { + filename = fn; + } + + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int, org.eclipse.cdt.core.parser.ast.IASTExpression) */ public IASTEnumerator addEnumerator( @@ -1065,8 +1084,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto String name, int startingOffset, int startingLine, - int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) throws ASTSemanticException + int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn) throws ASTSemanticException { + setFilename(fn); IContainerSymbol enumerationSymbol = (IContainerSymbol)((ISymbolOwner)enumeration).getSymbol(); ISymbol enumeratorSymbol = pst.newSymbol( name, ITypeInfo.t_enumerator ); @@ -1080,7 +1100,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem( IProblem.SEMANTIC_INVALID_OVERLOAD, name, startingOffset, endingOffset, startingLine, true ); // assert false : e1; } - ASTEnumerator enumerator = new ASTEnumerator( enumeratorSymbol, enumeration, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); + ASTEnumerator enumerator = new ASTEnumerator( enumeratorSymbol, enumeration, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue, fn ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); attachSymbolExtension( enumeratorSymbol, enumerator, true ); return enumerator; @@ -1097,6 +1117,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTTypeId typeId, ITokenDuple idExpression, String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException { + setFilename( idExpression ); if( idExpression != null ) { TraceUtil.outputTrace( @@ -1917,6 +1938,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTScope scope, ITokenDuple duple, IASTExpression expressionList) { + setFilename( duple ); List references = new ArrayList(); IContainerSymbol scopeSymbol = scopeToSymbol(scope); @@ -1966,6 +1988,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isImaginary, boolean isGlobal, Map extensionParms ) throws ASTSemanticException { + setFilename( typeName ); if( extension.overrideCreateSimpleTypeSpecifierMethod( kind )) return extension.createSimpleTypeSpecifier(pst, scope, kind, typeName, isShort, isLong, isSigned, isUnsigned, isTypename, isComplex, isImaginary, isGlobal, extensionParms ); String typeNameAsString = typeName.toString(); @@ -2097,6 +2120,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isExplicit, boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException { + setFilename( name ); List references = new ArrayList(); IContainerSymbol ownerScope = scopeToSymbol( scope ); @@ -2200,7 +2224,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto symbol = functionDeclaration; } - ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend ); + ASTFunction function = new ASTFunction( symbol, nameEndOffset, parameters, returnType, exception, startOffset, startLine, nameOffset, nameLine, ownerTemplate, references, previouslyDeclared, hasFunctionTryBlock, isFriend, filename ); attachSymbolExtension(symbol, function, isFunctionDefinition); return function; } @@ -2451,6 +2475,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, List references, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) throws ASTSemanticException { + setFilename( nameDuple ); boolean isConstructor = false; boolean isDestructor = false; @@ -2585,7 +2610,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto resolveLeftoverConstructorInitializerMembers( symbol, constructorChain ); - ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, isFriend ); + ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, startingLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, references, previouslyDeclared, isConstructor, isDestructor, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, isFriend, filename ); if( functionDeclaration != null && isFunctionDefinition ) attachSymbolExtension( symbol, (ASTSymbol) functionDeclaration.getASTExtension().getPrimaryDeclaration(), false ); attachSymbolExtension( symbol, method, isFunctionDefinition ); @@ -2654,8 +2679,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isRegister, boolean isStatic, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression) throws ASTSemanticException + int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn) throws ASTSemanticException { + setFilename( fn ); List references = new ArrayList(); IContainerSymbol ownerScope = scopeToSymbol( scope ); @@ -2685,7 +2711,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ITokenDuple newName = name.getLastSegment(); return createField(fieldParentScope, newName,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, - isRegister, isStatic, startingOffset, startingLine, newName.getStartOffset(), nameEndOffset, nameLine, constructorExpression, ASTAccessVisibility.PRIVATE, references); + isRegister, isStatic, startingOffset, startingLine, newName.getStartOffset(), nameEndOffset, nameLine, constructorExpression, ASTAccessVisibility.PRIVATE, references, fn); } } @@ -2737,7 +2763,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem(e.createProblemID(), name.getFirstToken().getImage() ); } - ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared ); + ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, constructorExpression, previouslyDeclared, filename ); if( variable.getInitializerClause() != null ) { variable.getInitializerClause().setOwnerVariableDeclaration(variable); @@ -2896,10 +2922,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto boolean isStatic, int startingOffset, int startingLine, - int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) throws ASTSemanticException + int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn) throws ASTSemanticException { return createField(scope, name,isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, - isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, null); + isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, null, fn); } public IASTField createField( @@ -2918,8 +2944,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto int nameOffset, int nameEndOffset, int nameLine, - IASTExpression constructorExpression, ASTAccessVisibility visibility, List references) throws ASTSemanticException + IASTExpression constructorExpression, ASTAccessVisibility visibility, List references, char[] fn) throws ASTSemanticException { + setFilename( fn ); IContainerSymbol ownerScope = scopeToSymbol( scope ); String image = ( name != null ) ? name.toString() : EMPTY_STRING; @@ -2975,7 +3002,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem(e.createProblemID(), image ); } - ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, previouslyDeclared, constructorExpression, visibility ); + ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, previouslyDeclared, constructorExpression, visibility, filename ); attachSymbolExtension(newSymbol, field, !isStatic ); return field; @@ -2989,8 +3016,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTScope scope, List templateParameters, boolean exported, - int startingOffset, int startingLine) throws ASTSemanticException + int startingOffset, int startingLine, char[] fn) throws ASTSemanticException { + setFilename(fn); ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME ); // the lookup requires a list of type infos @@ -3005,7 +3033,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } } - ASTTemplateDeclaration ast = new ASTTemplateDeclaration( template, scope, templateParameters); + ASTTemplateDeclaration ast = new ASTTemplateDeclaration( template, scope, templateParameters, filename); ast.setStartingOffsetAndLineNumber( startingOffset, startingLine ); attachSymbolExtension( template, ast, false ); @@ -3021,8 +3049,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, - int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) throws ASTSemanticException + int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn ) throws ASTSemanticException { + //TODO filename ISymbol symbol = null; TypeInfoProvider provider = pst.getTypeInfoProvider(); @@ -3074,7 +3103,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } catch (ParserSymbolTableException e) { } - ASTTemplateParameter ast = new ASTTemplateParameter( symbol, defaultValue, parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); + ASTTemplateParameter ast = new ASTTemplateParameter( symbol, defaultValue, parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); attachSymbolExtension( symbol, ast, false ); @@ -3085,9 +3114,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto */ public IASTTemplateInstantiation createTemplateInstantiation( IASTScope scope, - int startingOffset, int startingLine) + int startingOffset, int startingLine, char[] fn) { - ASTTemplateInstantiation inst = new ASTTemplateInstantiation( scope ); + ASTTemplateInstantiation inst = new ASTTemplateInstantiation( scope, fn ); inst.setStartingOffsetAndLineNumber( startingOffset, startingLine ); return inst; } @@ -3096,11 +3125,11 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto */ public IASTTemplateSpecialization createTemplateSpecialization( IASTScope scope, - int startingOffset, int startingLine) + int startingOffset, int startingLine, char[] fn) { ITemplateSymbol template = pst.newTemplateSymbol( ParserSymbolTable.EMPTY_NAME ); - ASTTemplateSpecialization ast = new ASTTemplateSpecialization( template, scope ); + ASTTemplateSpecialization ast = new ASTTemplateSpecialization( template, scope, fn ); ast.setStartingOffsetAndLineNumber( startingOffset, startingLine ); attachSymbolExtension( template, ast, false ); @@ -3114,8 +3143,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto String name, IASTAbstractDeclaration mapping, int startingOffset, - int startingLine, int nameOffset, int nameEndOffset, int nameLine) throws ASTSemanticException + int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) throws ASTSemanticException { + setFilename( fn ); IContainerSymbol containerSymbol = scopeToSymbol(scope); ISymbol typeSymbol = cloneSimpleTypeSymbol( name, mapping, null ); @@ -3155,7 +3185,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto { handleProblem(e.createProblemID(), name ); } - ASTTypedef d = new ASTTypedef( typeSymbol, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references ); + ASTTypedef d = new ASTTypedef( typeSymbol, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, references, filename ); attachSymbolExtension(typeSymbol, d, true ); return d; } @@ -3167,14 +3197,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, - int startingLine, int endingOffset, int endingLine, boolean isFriend) + int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn) { - return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine, isFriend); + return new ASTAbstractTypeSpecifierDeclaration( scopeToSymbol(scope), typeSpecifier, template, startingOffset, startingLine, endingOffset, endingLine, isFriend, fn ); } public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind kind, ITokenDuple name, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) throws ASTSemanticException { + setFilename( name ); IContainerSymbol currentScopeSymbol = scopeToSymbol(scope); IContainerSymbol originalScope = currentScopeSymbol; @@ -3269,7 +3300,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto .getFirstToken().getOffset(), name.getLastToken() .getEndOffset(), name.getLastToken() .getLineNumber(), endOffset, endingLine, - references, isForewardDecl); + references, isForewardDecl, filename); attachSymbolExtension(checkSymbol, elab, !isForewardDecl); } else if (isFriend) { ((IDerivableContainerSymbol) originalScope).addFriend(checkSymbol); @@ -3290,7 +3321,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto .getFirstToken().getOffset(), name .getLastToken().getEndOffset(), name .getLastToken().getLineNumber(), endOffset, - endingLine, references, isForewardDecl); + endingLine, references, isForewardDecl, filename); attachSymbolExtension(checkSymbol, elab, !isForewardDecl); return elab; } @@ -3317,6 +3348,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto */ public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) throws ASTSemanticException { + setFilename( alias ); IContainerSymbol startingSymbol = scopeToSymbol(scope); List references = new ArrayList(); @@ -3339,7 +3371,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto ASTNamespaceAlias astAlias = new ASTNamespaceAlias( newSymbol, alias.toString(), (IASTNamespaceDefinition)namespaceSymbol.getASTExtension().getPrimaryDeclaration(), - startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endOffset, endingLine, references ); + startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endOffset, endingLine, references, filename ); attachSymbolExtension( newSymbol, astAlias, true ); return astAlias; } @@ -3417,9 +3449,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto return false; } - public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) + public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) { - return new ASTParameterDeclaration( null, isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); + setFilename(fn); + return new ASTParameterDeclaration( null, isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, filename ); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java index 61d279727f0..8afa46ed0ae 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java @@ -100,7 +100,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameLine, int endingOffset, int endingLine, - IMacroDescriptor info) { + IMacroDescriptor info, char[] fn) { // TODO Auto-generated method stub return null; } @@ -121,7 +121,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameEndOffset, int nameLine, int endingOffset, - int endingLine) { + int endingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -176,7 +176,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingOffset, int startingLine, int endingOffset, - int endingLine) { + int endingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -194,7 +194,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingLine, int nameOffset, int nameEndOffset, - int nameLineNumber) + int nameLineNumber, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -243,7 +243,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac IASTScope scope, String spec, int startingOffset, - int startingLine) { + int startingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -268,7 +268,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingLine, int nameOffset, int nameEndOffset, - int nameLine) + int nameLine, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -327,7 +327,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingLine, int nameOffset, int nameEndOffset, - int nameLine) + int nameLine, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -350,7 +350,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameLine, int endingOffset, int endLine, - IASTExpression initialValue) + IASTExpression initialValue, char[] fn) throws ASTSemanticException { return null; @@ -612,7 +612,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameOffset, int nameEndOffset, int nameLine, - IASTExpression constructorExpression) + IASTExpression constructorExpression, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -647,7 +647,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameEndOffset, int nameLine, IASTExpression constructorExpression, - ASTAccessVisibility visibility) + ASTAccessVisibility visibility, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -695,7 +695,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int nameEndOffset, int nameLine, int endingOffset, - int endingLine) { + int endingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -711,7 +711,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac List templateParameters, boolean exported, int startingOffset, - int startingLine) { + int startingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -730,12 +730,12 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, - int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) { + int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) { // TODO Auto-generated method stub return null; } - /* + /*Os * (non-Javadoc) * * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation(org.eclipse.cdt.core.parser.ast.IASTScope, @@ -744,7 +744,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac public IASTTemplateInstantiation createTemplateInstantiation( IASTScope scope, int startingOffset, - int startingLine) { + int startingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -758,7 +758,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac public IASTTemplateSpecialization createTemplateSpecialization( IASTScope scope, int startingOffset, - int startingLine) { + int startingLine, char[] fn) { // TODO Auto-generated method stub return null; } @@ -779,7 +779,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingLine, int nameOffset, int nameEndOffset, - int nameLine) + int nameLine, char[] fn) throws ASTSemanticException { // TODO Auto-generated method stub return null; @@ -800,7 +800,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac int startingLine, int endingOffset, int endingLine, - boolean isFriend) { + boolean isFriend, char[] fn) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java index 59a4036d7cf..598ca7e2534 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java @@ -24,12 +24,22 @@ public class ASTASMDefinition implements IASTASMDefinition { private final String assembly; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope + * @param filename */ - public ASTASMDefinition(IASTScope scope, String assembly) { + public ASTASMDefinition(IASTScope scope, String assembly, char[] filename) { super(scope); this.assembly = assembly; + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java index 0a5ef2be149..cc44a49202e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java @@ -28,11 +28,20 @@ public class ASTAbstractTypeSpecifierDeclaration private final IASTTemplate ownerTemplate; private final IASTTypeSpecifier typeSpecifier; private final boolean isFriendDeclaration; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope * @param typeSpecifier + * @param filename */ - public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine, boolean isFriend) + public ASTAbstractTypeSpecifierDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate ownerTemplate, int startingOffset, int endingOffset, int startingLine, int endingLine, boolean isFriend, char[] filename) { super( ownerTemplate != null ? null : scope ); this.typeSpecifier = typeSpecifier; @@ -42,6 +51,7 @@ public class ASTAbstractTypeSpecifierDeclaration ownerTemplate.setOwnedDeclaration( this ); setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java index 6c221570ccd..299ae9aa090 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java @@ -35,7 +35,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl int startingOffset, int startingLine, int nameOffset, - int nameEndOffset, int nameLineNumber, ASTAccessVisibility access) + int nameEndOffset, int nameLineNumber, ASTAccessVisibility access, char[] filename) { super( scope, name ); classNameType = type; @@ -45,6 +45,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl setNameEndOffsetAndLineNumber(nameEndOffset, nameLineNumber); this.access = access; this.name = name; + fn = filename; } private final String name; @@ -54,6 +55,14 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl private ASTAccessVisibility access; private final ClassNameType classNameType; private final ASTClassKind classKind; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getClassNameType() */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java index 96d3acf809d..dc295d8408d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java @@ -27,13 +27,22 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate private final String typeName; private final ASTClassKind classKind; private final ASTQualifiedNamedElement qualifiedName; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param elaboratedClassKind * @param typeName * @param startingOffset * @param endOffset + * @param filename */ - public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) + public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine, char[] filename) { classKind = elaboratedClassKind; this.typeName = typeName; @@ -42,6 +51,7 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setEndingOffsetAndLineNumber( endOffset, endingLine ); qualifiedName = new ASTQualifiedNamedElement( scope, typeName ); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java index 5dcb68c96e8..67d5df8fbeb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java @@ -29,18 +29,28 @@ public class ASTEnumerationSpecifier extends ASTScopedTypeSpecifier implements IASTEnumerationSpecifier, IASTOffsetableNamedElement { private final String name; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param name * @param startingOffset + * @param filename */ - public ASTEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) + public ASTEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename ) { super( scope, name ); this.name = name; setNameOffset( nameOffset ); setStartingOffsetAndLineNumber( startingOffset, startingLine); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java index 5d8044f768c..b5d6a57ec54 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java @@ -28,15 +28,23 @@ public class ASTEnumerator extends ASTNode private final IASTExpression initialValue; private final String name; private final IASTEnumerationSpecifier enumeration; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param enumeration * @param string * @param startingOffset * @param endingOffset + * @param filename */ - public ASTEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) + public ASTEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] filename) { this.enumeration = enumeration; name = string; @@ -45,6 +53,7 @@ public class ASTEnumerator extends ASTNode setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); setEndingOffsetAndLineNumber( endingOffset, endLine ); this.initialValue = initialValue; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java index 2fbfec85385..2326bc53a07 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java @@ -39,7 +39,7 @@ public class ASTField extends ASTVariable implements IASTField * @param isRegister * @param isStatic */ - public ASTField(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) + public ASTField(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char [] filename) { super( scope, @@ -51,7 +51,7 @@ public class ASTField extends ASTVariable implements IASTField isMutable, isExtern, isRegister, - isStatic, startingOffset, startLine, nameOffset, nameEndOffset, nameLine, constructorExpression ); + isStatic, startingOffset, startLine, nameOffset, nameEndOffset, nameLine, constructorExpression, filename ); this.visibility = visibility; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java index 71aab54ffa4..a375adc1760 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java @@ -33,9 +33,10 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction { /** * @param scope + * @param filename */ public ASTFunction(IASTScope scope, String name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, - boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, IASTTemplate ownerTemplate, boolean hasFunctionTryBlock, boolean hasVarArgs, int nameLine ) + boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, IASTTemplate ownerTemplate, boolean hasFunctionTryBlock, boolean hasVarArgs, int nameLine, char[] filename ) { super(ownerTemplate != null ? null : scope ); this.name = name; @@ -54,6 +55,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); this.hasFunctionTryBlock = hasFunctionTryBlock; this.varArgs = hasVarArgs; + fn = filename; } private boolean previouslyDeclared; @@ -66,6 +68,14 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction private final List parms; private final IASTAbstractDeclaration returnType; private final boolean isInline, isFriend, isStatic; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java index 5bdff26538c..d682f9c0a8c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java @@ -29,12 +29,20 @@ public class ASTLinkageSpecification implements IASTDeclaration, IASTLinkageSpecification, IASTQScope { private final String linkage; - - public ASTLinkageSpecification( IASTScope scope, String linkage, int startingOffset, int startingLine ) + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + + public ASTLinkageSpecification( IASTScope scope, String linkage, int startingOffset, int startingLine, char[] filename ) { super( scope ); this.linkage = linkage; setStartingOffsetAndLineNumber(startingOffset, startingLine); + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java index 1a5a77ac8f2..71fc87f924e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java @@ -52,6 +52,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod * @param startOffset * @param nameOffset * @param ownerTemplate + * @param filename */ public ASTMethod( IASTScope scope, @@ -73,7 +74,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod boolean isConstructor, boolean isDestructor, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, - ASTAccessVisibility visibility, List constructorChainElements, boolean hasFunctionTryBlock, boolean hasVarArgs ) + ASTAccessVisibility visibility, List constructorChainElements, boolean hasFunctionTryBlock, boolean hasVarArgs, char []filename ) { super( scope, @@ -87,7 +88,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod startOffset, startLine, nameOffset, - nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVarArgs, nameLine); + nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVarArgs, nameLine, filename); this.isVirtual = isVirtual; this.isPureVirtual = isPureVirtual; this.isConstructor = isConstructor; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java index eac5bd17368..c98231ae2f9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java @@ -26,6 +26,14 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl private final String alias; private final String identifier; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope * @param identifier @@ -33,8 +41,9 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl * @param startingOffset * @param nameOffset * @param endOffset + * @param filename */ - public ASTNamespaceAlias(IASTScope scope, String identifier, String string, int startingOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endingLine) + public ASTNamespaceAlias(IASTScope scope, String identifier, String string, int startingOffset, int nameOffset, int nameEndOffset, int endOffset, int startingLine, int nameLine, int endingLine, char[] filename) { super( scope ); setStartingOffsetAndLineNumber(startingOffset, startingLine); @@ -43,6 +52,7 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl setEndingOffsetAndLineNumber(endOffset, endingLine); this.identifier = identifier; this.alias = string; + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java index b3cfb6a69ad..0c0999587ff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java @@ -29,8 +29,15 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp private final String name; private final ASTQualifiedNamedElement qualifiedNameElement; - - public ASTNamespaceDefinition( IASTScope scope, String name, int startOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + + public ASTNamespaceDefinition( IASTScope scope, String name, int startOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename ) { super( scope ); qualifiedNameElement = new ASTQualifiedNamedElement( scope, name ); @@ -38,6 +45,7 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp setStartingOffsetAndLineNumber(startOffset, startingLine); setNameOffset(nameOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameEndOffset); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java index 430215d6e57..9185a30f448 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTParameterDeclaration.java @@ -28,6 +28,14 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I { private final String parameterName; private final IASTInitializerClause initializerClause; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param isConst * @param typeSpecifier @@ -35,8 +43,9 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I * @param arrayModifiers * @param parameterName * @param initializerClause + * @param filename */ - public ASTParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) + public ASTParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename ) { super( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp ); this.parameterName = parameterName; @@ -45,6 +54,7 @@ public class ASTParameterDeclaration extends ASTAbstractDeclaration implements I setEndingOffsetAndLineNumber( endingOffset, endingLine ); setNameOffset( nameOffset ); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java index 32ce5505245..77ab980fa5b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java @@ -31,15 +31,25 @@ public class ASTTemplateDeclaration extends ASTDeclaration implements IASTTempla private IASTDeclaration ownedDeclaration; private List templateParameters; private final boolean isExported; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param templateParameters + * @param filename */ - public ASTTemplateDeclaration(IASTScope scope, List templateParameters, int startingOffset, int startingLine, boolean isExported) + public ASTTemplateDeclaration(IASTScope scope, List templateParameters, int startingOffset, int startingLine, boolean isExported, char[] filename) { super( scope ); this.templateParameters = templateParameters; setStartingOffsetAndLineNumber(startingOffset, startingLine); this.isExported = isExported; + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java index 59c1ef2f065..e3bd0b10a6e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java @@ -27,15 +27,24 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager; public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemplateInstantiation { private IASTDeclaration declaration; - + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope + * @param filename */ - public ASTTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine) + public ASTTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] filename) { super( scope ); setStartingOffsetAndLineNumber(startingOffset, startingLine); + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java index dbf44b589c5..f2a40f1a7cd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java @@ -33,13 +33,22 @@ public class ASTTemplateParameter implements IASTTemplateParameter, IASTOffsetab private final ParamKind kind; private final String identifier; private final String defaultValue; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param kind * @param identifier * @param defaultValue * @param parameter + * @param filename */ - public ASTTemplateParameter(ParamKind kind, String identifier, String defaultValue, IASTParameterDeclaration parameter, List templateParms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine ) + public ASTTemplateParameter(ParamKind kind, String identifier, String defaultValue, IASTParameterDeclaration parameter, List templateParms, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] filename ) { this.kind = kind; this.identifier = identifier; @@ -50,6 +59,7 @@ public class ASTTemplateParameter implements IASTTemplateParameter, IASTOffsetab setEndingOffsetAndLineNumber( endingOffset, endingLine ); setNameOffset( nameOffset ); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); + fn = filename; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java index b6b35795722..ed19a8bcd6e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java @@ -24,9 +24,9 @@ public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements /** * @param scope */ - public ASTTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine ) + public ASTTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char [] filename ) { - super(scope, null, startingOffset, startingLine, false ); + super(scope, null, startingOffset, startingLine, false, filename ); setStartingOffsetAndLineNumber(startingOffset, startingLine); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java index 3915b9becfa..bb10ffb5add 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java @@ -29,12 +29,21 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef private final String name; private final IASTAbstractDeclaration mapping; private final ASTQualifiedNamedElement qualifiedName; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope * @param name * @param mapping + * @param filename */ - public ASTTypedefDeclaration(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) + public ASTTypedefDeclaration(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] filename ) { super( scope ); this.name = name; @@ -43,6 +52,7 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef setNameOffset(nameOffset); setNameEndOffsetAndLineNumber(nameEndOffset, nameLine); qualifiedName = new ASTQualifiedNamedElement( scope, name ); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTTypedef#getName() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java index 4866c384559..53ced46655e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java @@ -28,14 +28,23 @@ public class ASTUsingDeclaration private final boolean isTypename; private final String mappingName; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + - public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine ) + public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, String mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) { super( scope ); isTypename = isTypeName; this.mappingName = mappingName; setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java index c2a576c3d37..1d5f085cbbf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java @@ -25,14 +25,21 @@ public class ASTUsingDirective extends ASTDeclaration implements IASTUsingDirective { + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } - public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine ) + public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) { super( scope ); this.namespaceName = name; setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); - + fn = filename; } private final String namespaceName; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java index 723b500ae88..7b96a142215 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java @@ -36,11 +36,20 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable private final boolean isStatic; private final String name; private final ASTQualifiedNamedElement qualifiedName; + private final char [] fn; + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getFilename() + */ + public char[] getFilename() { + return fn; + } + /** * @param scope + * @param filename */ public ASTVariable(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, - IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression ) + IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] filename ) { super(scope); this.isAuto = isAuto; @@ -59,6 +68,7 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable setNameEndOffsetAndLineNumber( nameEndOffset, nameLine ); if( initializerClause != null ) initializerClause.setOwnerVariableDeclaration(this); + fn = filename; } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTVariable#isAuto() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index 36fea07d645..24a6263da1b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -81,14 +81,14 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createUsingDirective(org.eclipse.cdt.internal.core.parser.ast.IASTScope, org.eclipse.cdt.internal.core.parser.TokenDuple) */ public IASTUsingDirective createUsingDirective(IASTScope scope, ITokenDuple duple, int startingOffset, int startingLine, int endingOffset, int endingLine) { - return new ASTUsingDirective( scope, duple.toString(), startingOffset, startingLine, endingOffset, endingLine ); + return new ASTUsingDirective( scope, duple.toString(), startingOffset, startingLine, endingOffset, endingLine, duple.getFilename() ); } /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createASMDefinition(org.eclipse.cdt.internal.core.parser.ast.IASTScope, java.lang.String, int, int) */ - public IASTASMDefinition createASMDefinition(IASTScope scope, String assembly, int startingOffset, int startingLine, int endingOffset, int endingLine) { - IASTASMDefinition definition = new ASTASMDefinition( scope, assembly ); + public IASTASMDefinition createASMDefinition(IASTScope scope, String assembly, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] fn) { + IASTASMDefinition definition = new ASTASMDefinition( scope, assembly, fn ); definition.setStartingOffsetAndLineNumber( startingOffset, startingLine ); definition.setEndingOffsetAndLineNumber( endingOffset, endingLine ); return definition; @@ -97,8 +97,8 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createNamespaceDefinition(int, java.lang.String, int) */ - public IASTNamespaceDefinition createNamespaceDefinition(IASTScope scope, String identifier, int first, int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber) { - IASTNamespaceDefinition definition = new ASTNamespaceDefinition( scope, identifier, first, startingLine, nameOffset, nameEndOffset, nameLineNumber ); + public IASTNamespaceDefinition createNamespaceDefinition(IASTScope scope, String identifier, int first, int startingLine, int nameOffset, int nameEndOffset, int nameLineNumber, char[] fn) { + IASTNamespaceDefinition definition = new ASTNamespaceDefinition( scope, identifier, first, startingLine, nameOffset, nameEndOffset, nameLineNumber, fn ); return definition; } @@ -112,22 +112,22 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.ast.IASTFactory#createLinkageSpecification(java.lang.String) */ - public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec, int startingOffset, int startingLine) { - return new ASTLinkageSpecification( scope, spec, startingOffset, startingLine ); + public IASTLinkageSpecification createLinkageSpecification(IASTScope scope, String spec, int startingOffset, int startingLine, char[] fn) { + return new ASTLinkageSpecification( scope, spec, startingOffset, startingLine, fn ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.internal.core.parser.TokenDuple) */ public IASTUsingDeclaration createUsingDeclaration(IASTScope scope, boolean isTypeName, ITokenDuple name, int startingOffset, int startingLine, int endingOffset, int endingLine) { - return new ASTUsingDeclaration( scope, isTypeName, name.toString(), startingOffset, startingLine, endingOffset, endingLine ); + return new ASTUsingDeclaration( scope, isTypeName, name.toString(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename() ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ClassKind, org.eclipse.cdt.core.parser.ast.ClassNameType, org.eclipse.cdt.core.parser.ast.AccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration) */ - public IASTClassSpecifier createClassSpecifier(IASTScope scope, ITokenDuple name, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine ) { - return new ASTClassSpecifier( scope, name == null ? "" : name.toString() , kind, type, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, access ); //$NON-NLS-1$ + public IASTClassSpecifier createClassSpecifier(IASTScope scope, ITokenDuple name, ASTClassKind kind, ClassNameType type, ASTAccessVisibility access, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn ) { + return new ASTClassSpecifier( scope, name == null ? "" : name.toString() , kind, type, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, access, fn ); //$NON-NLS-1$ } /* (non-Javadoc) @@ -141,17 +141,17 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createEnumerationSpecifier(java.lang.String, int) */ - public IASTEnumerationSpecifier createEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) + public IASTEnumerationSpecifier createEnumerationSpecifier(IASTScope scope, String name, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) { - return new ASTEnumerationSpecifier( scope, name, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine ); + return new ASTEnumerationSpecifier( scope, name, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#addEnumerator(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier, java.lang.String, int, int) */ - public IASTEnumerator addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue) + public IASTEnumerator addEnumerator(IASTEnumerationSpecifier enumeration, String string, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endLine, IASTExpression initialValue, char[] fn) { - IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue ); + IASTEnumerator enumerator = new ASTEnumerator( enumeration, string, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endLine, initialValue, fn ); ((ASTEnumerationSpecifier)enumeration).addEnumerator( enumerator ); return enumerator; } @@ -200,7 +200,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory */ public IASTFunction createFunction(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) { - ASTFunction function = new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine ); + ASTFunction function = new ASTFunction(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, ownerTemplate, hasFunctionTryBlock, hasVariableArguments, nameLine, name.getFilename() ); if( isFriend && scope instanceof IASTQClassSpecifier ){ ((IASTQClassSpecifier)scope).addFriendDeclaration( function ); } @@ -212,7 +212,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory */ public IASTMethod createMethod(IASTScope scope, ITokenDuple name, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, boolean isInline, boolean isFriend, boolean isStatic, int startOffset, int startLine, int nameOffset, int nameEndOffset, int nameLine, IASTTemplate ownerTemplate, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit, boolean isPureVirtual, ASTAccessVisibility visibility, List constructorChain, boolean isFunctionDefinition, boolean hasFunctionTryBlock, boolean hasVariableArguments ) { - ASTMethod method = new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments); + ASTMethod method = new ASTMethod(scope, name.toString(), parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, startLine, nameOffset, nameEndOffset, nameLine, ownerTemplate, isConst, isVolatile, false, false, isVirtual, isExplicit, isPureVirtual, visibility, constructorChain, hasFunctionTryBlock, hasVariableArguments, name.getFilename()); if( isFriend && scope instanceof IASTQClassSpecifier ){ ((IASTQClassSpecifier)scope).addFriendDeclaration( method ); } @@ -222,65 +222,65 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createVariable(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean) */ - public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression) + public IASTVariable createVariable(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, char[] fn) { - return new ASTVariable(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression); //$NON-NLS-1$ + return new ASTVariable(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, fn); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createField(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility) */ - public IASTField createField(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility) + public IASTField createField(IASTScope scope, ITokenDuple name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, IASTExpression constructorExpression, ASTAccessVisibility visibility, char[] fn) { - return new ASTField(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility); //$NON-NLS-1$ + return new ASTField(scope, ( name != null ? name.toString() : "" ), isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, constructorExpression, visibility, fn); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(java.util.List) */ - public IASTTemplateDeclaration createTemplateDeclaration(IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine) + public IASTTemplateDeclaration createTemplateDeclaration(IASTScope scope, List templateParameters, boolean exported, int startingOffset, int startingLine, char[] fn) { - return new ASTTemplateDeclaration( scope, templateParameters, startingOffset, startingLine, exported ); + return new ASTTemplateDeclaration( scope, templateParameters, startingOffset, startingLine, exported, fn ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateParameter(org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParameterKind, org.eclipse.cdt.core.parser.IToken, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration) */ - public IASTTemplateParameter createTemplateParameter(IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) + public IASTTemplateParameter createTemplateParameter(IASTTemplateParameter.ParamKind kind, String identifier, IASTTypeId defaultValue, IASTParameterDeclaration parameter, List parms, IASTCodeScope parameterScope, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) { - return new ASTTemplateParameter( kind, identifier, defaultValue != null ? defaultValue.getTypeOrClassName() : "", parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); //$NON-NLS-1$ + return new ASTTemplateParameter( kind, identifier, defaultValue != null ? defaultValue.getTypeOrClassName() : "", parameter, parms, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateInstantiation() */ - public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine) + public IASTTemplateInstantiation createTemplateInstantiation(IASTScope scope, int startingOffset, int startingLine, char[] fn) { - return new ASTTemplateInstantiation(scope, startingOffset, startingLine); + return new ASTTemplateInstantiation(scope, startingOffset, startingLine, fn); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateSpecialization() */ - public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine) + public IASTTemplateSpecialization createTemplateSpecialization(IASTScope scope, int startingOffset, int startingLine, char[] fn) { - return new ASTTemplateSpecialization(scope, startingOffset, startingLine ); + return new ASTTemplateSpecialization(scope, startingOffset, startingLine, fn ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypedef(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration) */ - public IASTTypedefDeclaration createTypedef(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine) + public IASTTypedefDeclaration createTypedef(IASTScope scope, String name, IASTAbstractDeclaration mapping, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, char[] fn) { - return new ASTTypedefDeclaration( scope, name, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine); + return new ASTTypedefDeclaration( scope, name, mapping, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, fn); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeSpecDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List) */ - public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend) + public IASTAbstractTypeSpecifierDeclaration createTypeSpecDeclaration(IASTScope scope, IASTTypeSpecifier typeSpecifier, IASTTemplate template, int startingOffset, int startingLine, int endingOffset, int endingLine, boolean isFriend, char[] fn) { - ASTAbstractTypeSpecifierDeclaration abs = new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine, isFriend ); + ASTAbstractTypeSpecifierDeclaration abs = new ASTAbstractTypeSpecifierDeclaration( scope, typeSpecifier, template, startingOffset, endingOffset, startingLine, endingLine, isFriend, fn ); if( isFriend && scope instanceof IASTQClassSpecifier ){ ((IASTQClassSpecifier)scope).addFriendDeclaration( abs ); } @@ -289,7 +289,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int startingLine, int endOffset, int endingLine, boolean isForewardDecl, boolean isFriend) { - return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, startingLine, typeName.getFirstToken().getOffset(), typeName.getLastToken().getEndOffset(), typeName.getLastToken().getLineNumber(), endOffset, endingLine ); + return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, startingLine, typeName.getFirstToken().getOffset(), typeName.getLastToken().getEndOffset(), typeName.getLastToken().getLineNumber(), endOffset, endingLine, typeName.getFilename() ); } /* (non-Javadoc) @@ -297,7 +297,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory */ public IASTNamespaceAlias createNamespaceAlias(IASTScope scope, String identifier, ITokenDuple alias, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endOffset, int endingLine) { - return new ASTNamespaceAlias( scope, identifier, alias.toString(), startingOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endingLine ); + return new ASTNamespaceAlias( scope, identifier, alias.toString(), startingOffset, nameOffset, nameEndOffset, endOffset, startingLine, nameLine, endingLine, alias.getFilename()); } /* (non-Javadoc) @@ -314,9 +314,9 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory return true; // we have no information to say that it is not } - public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine) + public IASTParameterDeclaration createParameterDeclaration(boolean isConst, boolean isVolatile, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, List parameters, ASTPointerOperator pointerOp, String parameterName, IASTInitializerClause initializerClause, int startingOffset, int startingLine, int nameOffset, int nameEndOffset, int nameLine, int endingOffset, int endingLine, char[] fn) { - return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine ); + return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause, startingOffset, startingLine, nameOffset, nameEndOffset, nameLine, endingOffset, endingLine, fn ); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java index f54bba5646b..9428bf3ea76 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java @@ -112,7 +112,7 @@ public class ContextStack { } public void updateInclusionContext(CodeReader code, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ContextException { - addInclusionFilename( code.filename ); + addInclusionFilename( new String( code.filename )); ScannerContextInclusion context = new ScannerContextInclusion( code, inclusion, currentInclusionIndex - 1 ); if( isCircularInclusion( context.getContextName() ) ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java index afd63ff6f80..ca0184d3d93 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java @@ -168,7 +168,7 @@ public final class Scanner implements IScanner, IScannerData { this.contextStack = new ContextStack( this, log ); this.workingCopies = workingCopies; this.scannerExtension = extension; - this.astFactory = ParserFactory.createASTFactory( this, parserMode, language ); + this.astFactory = ParserFactory.createASTFactory( parserMode, language ); if (reader.isFile()) fileCache.put(reader.filename, reader); @@ -631,12 +631,12 @@ public final class Scanner implements IScanner, IScannerData { inclusion = getASTFactory().createInclusion( fileName, - duple.filename, + new String( duple.filename ), !useIncludePaths, beginOffset, startLine, nameOffset, - nameOffset + fileName.length(), nameLine, endOffset, endLine); + nameOffset + fileName.length(), nameLine, endOffset, endLine, getCurrentFilename()); } catch (Exception e) { @@ -2786,7 +2786,7 @@ public final class Scanner implements IScanner, IScannerData { beginningOffset, startLine, directive.getStartOffset(), - directive.getStartOffset() + directive.getFilename().length(), nameLine, directive.getEndOffset(), endLine); + directive.getStartOffset() + directive.getFilename().length(), nameLine, directive.getEndOffset(), endLine, getCurrentFilename()); } catch (Exception e) { @@ -3090,7 +3090,7 @@ public final class Scanner implements IScanner, IScannerData { try { - getASTFactory().createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor ).acceptElement( requestor, null ); + getASTFactory().createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor, getCurrentFilename() ).acceptElement( requestor, null ); } catch (Exception e) { @@ -3554,7 +3554,7 @@ public final class Scanner implements IScanner, IScannerData { */ public IASTFactory getASTFactory() { if( astFactory == null ) - astFactory = ParserFactory.createASTFactory( this, parserMode, language ); + astFactory = ParserFactory.createASTFactory( parserMode, language ); return astFactory; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java index d27fb08ce8c..b68bfffc470 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java @@ -37,7 +37,7 @@ public class ScannerContextInclusion implements IScannerContext public final String getContextName() { - return code.filename; + return new String( code.filename ); } public int getOffset() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroExpansionToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroExpansionToken.java index 655a5d4ae6b..38f625a033a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroExpansionToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroExpansionToken.java @@ -147,4 +147,11 @@ public class MacroExpansionToken implements IToken { } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IToken#getFilename() + */ + public char[] getFilename() { + return null; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index f69b91b170b..e22b5e2646c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -61,16 +61,15 @@ public class Scanner2 implements IScanner, IScannerData { public final IASTInclusion inclusion; public final CodeReader reader; - public final int index; + /** * @param reader * @param inclusion */ - public InclusionData(CodeReader reader, IASTInclusion inclusion, int index ) { + public InclusionData(CodeReader reader, IASTInclusion inclusion ) { this.reader = reader; this.inclusion = inclusion; - this.index = index; } } @@ -133,7 +132,6 @@ public class Scanner2 implements IScanner, IScannerData { fileCache.put(reader.filename, reader); pushContext(reader.buffer, reader); - addToFileIndex( reader.filename.toCharArray() ); setupBuiltInMacros(); @@ -266,6 +264,8 @@ public class Scanner2 implements IScanner, IScannerData { private static final String EMPTY_STRING = ""; //$NON-NLS-1$ + + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.IScanner#nextToken() */ @@ -318,7 +318,7 @@ public class Scanner2 implements IScanner, IScannerData { int tokenType = IToken.tSTRING; if( lastToken.getType() == IToken.tLSTRING || nextToken.getType() == IToken.tLSTRING ) tokenType = IToken.tLSTRING; - lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset()); //TODO Fix this + lastToken = new ImagedToken(tokenType, (lastToken.getImage() + nextToken.getImage()).toCharArray(), nextToken.getEndOffset(), getCurrentFilename() ); //TODO Fix this if (oldToken != null) oldToken.setNext(lastToken); nextToken = fetchToken(); @@ -464,20 +464,20 @@ public class Scanner2 implements IScanner, IScannerData { if (pos + 2 < limit) { if (buffer[pos + 2] == '.') { bufferPos[bufferStackPos] += 2; - return new SimpleToken(IToken.tELLIPSIS, bufferPos[bufferStackPos] + 1 ); + return new SimpleToken(IToken.tELLIPSIS, bufferPos[bufferStackPos] + 1 , getCurrentFilename() ); } } case '*': ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tDOTSTAR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tDOTSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tDOT, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tDOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '#': if (pos + 1 < limit && buffer[pos + 1] == '#') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tPOUNDPOUND, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tPOUNDPOUND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } // Should really check to make sure this is the first @@ -486,49 +486,49 @@ public class Scanner2 implements IScanner, IScannerData { continue; case '{': - return new SimpleToken(IToken.tLBRACE, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tLBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '}': - return new SimpleToken(IToken.tRBRACE, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tRBRACE, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '[': - return new SimpleToken(IToken.tLBRACKET, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tLBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case ']': - return new SimpleToken(IToken.tRBRACKET, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tRBRACKET, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '(': - return new SimpleToken(IToken.tLPAREN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tLPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case ')': - return new SimpleToken(IToken.tRPAREN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tRPAREN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case ';': - return new SimpleToken(IToken.tSEMI, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSEMI, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case ':': if (pos + 1 < limit) { if (buffer[pos + 1] == ':') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tCOLONCOLON, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tCOLONCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tCOLON, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tCOLON, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '?': - return new SimpleToken(IToken.tQUESTION, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tQUESTION, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '+': if (pos + 1 < limit) { if (buffer[pos + 1] == '+') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tINCR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tINCR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tPLUSASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tPLUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tPLUS, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tPLUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '-': if (pos + 1 < limit) { @@ -536,140 +536,140 @@ public class Scanner2 implements IScanner, IScannerData { if (pos + 2 < limit) { if (buffer[pos + 2] == '*') { bufferPos[bufferStackPos] += 2; - return new SimpleToken(IToken.tARROWSTAR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tARROWSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tARROW, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tARROW, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '-') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tDECR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tDECR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tMINUSASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tMINUSASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tMINUS, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tMINUS, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '*': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tSTARASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSTARASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tSTAR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSTAR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '/': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tDIVASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tDIVASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tDIV, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tDIV, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '%': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tMODASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tMODASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tMOD, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tMOD, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '^': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tXORASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tXORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tXOR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tXOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '&': if (pos + 1 < limit) { if (buffer[pos + 1] == '&') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tAND, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tAND, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tAMPERASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tAMPERASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tAMPER, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tAMPER, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '|': if (pos + 1 < limit) { if (buffer[pos + 1] == '|') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tOR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tBITORASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tBITORASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tBITOR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tBITOR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '~': - return new SimpleToken(IToken.tCOMPL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tCOMPL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '!': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tNOTEQUAL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tNOTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tNOT, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tNOT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '=': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tEQUAL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '<': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tLTEQUAL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tLTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '<') { if (pos + 2 < limit) { if (buffer[pos + 2] == '=') { bufferPos[bufferStackPos] += 2; - return new SimpleToken(IToken.tSHIFTLASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSHIFTLASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tSHIFTL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSHIFTL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tLT, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tLT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case '>': if (pos + 1 < limit) { if (buffer[pos + 1] == '=') { ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tGTEQUAL, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tGTEQUAL, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } else if (buffer[pos + 1] == '>') { if (pos + 2 < limit) { if (buffer[pos + 2] == '=') { bufferPos[bufferStackPos] += 2; - return new SimpleToken(IToken.tSHIFTRASSIGN, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSHIFTRASSIGN, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } ++bufferPos[bufferStackPos]; - return new SimpleToken(IToken.tSHIFTR, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tSHIFTR, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } } - return new SimpleToken(IToken.tGT, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tGT, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); case ',': - return new SimpleToken(IToken.tCOMMA, bufferPos[bufferStackPos]+ 1); + return new SimpleToken(IToken.tCOMMA, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); default: // skip over anything we don't handle @@ -739,8 +739,8 @@ public class Scanner2 implements IScanner, IScannerData { int tokenType = keywords.get(buffer, start, len); char [] result = removedEscapedNewline( CharArrayUtils.extract( buffer, start, len ) ); if (tokenType == keywords.undefined) - return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1); - return new SimpleToken(tokenType, start + len); + return new ImagedToken(IToken.tIDENTIFIER, result, bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); + return new SimpleToken(tokenType, start + len, getCurrentFilename() ); } private IToken scanString() { @@ -774,7 +774,7 @@ public class Scanner2 implements IScanner, IScannerData { // We should really throw an exception if we didn't get the terminating // quote before the end of buffer - return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1); + return new ImagedToken(tokenType, CharArrayUtils.extract(buffer, stringStart, stringLen), stringStart + stringLen+ 1, getCurrentFilename() ); } private IToken scanCharLiteral(boolean b) { @@ -791,7 +791,7 @@ public class Scanner2 implements IScanner, IScannerData { } if (start >= limit) { - return new ImagedToken(tokenType, emptyCharArray, start); + return new ImagedToken(tokenType, emptyCharArray, start, getCurrentFilename() ); } @@ -814,7 +814,7 @@ public class Scanner2 implements IScanner, IScannerData { ? CharArrayUtils.extract(buffer, start, length) : emptyCharArray; - return new ImagedToken(tokenType, image, start + length+ 1 ); + return new ImagedToken(tokenType, image, start + length+ 1 , getCurrentFilename() ); } private IToken scanNumber() { @@ -992,7 +992,7 @@ public class Scanner2 implements IScanner, IScannerData { return new ImagedToken(isFloat ? IToken.tFLOATINGPT : IToken.tINTEGER, CharArrayUtils.extract(buffer, start, - bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1); + bufferPos[bufferStackPos] - start + 1), bufferPos[bufferStackPos]+ 1, getCurrentFilename() ); } private void handlePPDirective(int pos) throws ScannerException { @@ -1171,7 +1171,7 @@ public class Scanner2 implements IScanner, IScannerData { if( parserMode == ParserMode.QUICK_PARSE ) { - IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), EMPTY_STRING, local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); + IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), EMPTY_STRING, local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() ); requestor.enterInclusion( inclusion ); requestor.exitInclusion( inclusion ); } @@ -1189,8 +1189,8 @@ public class Scanner2 implements IScanner, IScannerData { if (reader.filename != null) fileCache.put(reader.filename, reader); if (dlog != null) dlog.println("#include \"" + finalPath + "\""); //$NON-NLS-1$ //$NON-NLS-2$ - IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); - pushContext(reader.buffer, new InclusionData( reader, inclusion, addToFileIndex( reader.filename.toCharArray() ) )); + IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() ); + pushContext(reader.buffer, new InclusionData( reader, inclusion )); return; } } @@ -1215,8 +1215,8 @@ public class Scanner2 implements IScanner, IScannerData { if (reader.filename != null) fileCache.put(reader.filename, reader); if (dlog != null) dlog.println("#include <" + finalPath + ">"); //$NON-NLS-1$ //$NON-NLS-2$ - IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine ); - pushContext(reader.buffer, new InclusionData( reader, inclusion, addToFileIndex( reader.filename.toCharArray() ) )); + IASTInclusion inclusion = getASTFactory().createInclusion( new String( filename ), new String( reader.filename ), local, startOffset, startLine, nameOffset, nameEndOffset, nameLine, endOffset, endLine, getCurrentFilename() ); + pushContext(reader.buffer, new InclusionData( reader, inclusion )); return; } } @@ -1337,7 +1337,7 @@ public class Scanner2 implements IScanner, IScannerData { ? new ObjectStyleMacro(name, text) : new FunctionStyleMacro(name, text, arglist) ); - requestor.acceptMacro( getASTFactory().createMacro( new String( name ), startingOffset, startingLine, idstart, idstart + idlen, nameLine, textstart + textlen, endingLine, null )); //TODO - IMacroDescriptor? + requestor.acceptMacro( getASTFactory().createMacro( new String( name ), startingOffset, startingLine, idstart, idstart + idlen, nameLine, textstart + textlen, endingLine, null, getCurrentFilename() )); //TODO - IMacroDescriptor? } @@ -2388,7 +2388,7 @@ public class Scanner2 implements IScanner, IScannerData { */ public final IASTFactory getASTFactory() { if( astFactory == null ) - astFactory = ParserFactory.createASTFactory( this, parserMode, language ); + astFactory = ParserFactory.createASTFactory( parserMode, language ); return astFactory; } /* (non-Javadoc) @@ -2515,52 +2515,17 @@ public class Scanner2 implements IScanner, IScannerData { } - protected static final int STARTING_FILECACHE_SIZE = 32; - protected char [][] fileNames = new char[STARTING_FILECACHE_SIZE][]; - protected int fileIndexCounter = 0; - - /** - * @param cs - * @return - */ - private int addToFileIndex(char[] cs) { - if( fileIndexCounter >= fileNames.length ) - { - char [][] prev = fileNames; - fileNames = new char[ prev.length * 2 ][]; - System.arraycopy( prev, 0, fileNames, 0, prev.length ); - } - int result = fileIndexCounter; - fileNames[ fileIndexCounter ] = cs; - ++fileIndexCounter; - return result; - } - - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFileIndex() - */ - public final int getCurrentFileIndex() { - for( int i = bufferStackPos; i >= 0; --i ) - { - if( bufferData[i] instanceof InclusionData ) - return ((InclusionData)bufferData[i]).index; - } - return 0; - } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.IFilenameProvider#getCurrentFilename() */ public final char[] getCurrentFilename() { - return fileNames[ getCurrentFileIndex() ]; - } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.IFilenameProvider#getFilenameForIndex(int) - */ - public String getFilenameForIndex(int index) { - if( index >= 0 && index < fileIndexCounter ) - return new String( fileNames[index] ); - return EMPTY_STRING; + for( int i = bufferStackPos; i >= 0; --i ) + { + if( bufferData[i] instanceof InclusionData ) + return ((InclusionData)bufferData[i]).reader.filename; + } + return emptyCharArray; + } private static CharArrayIntMap keywords; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java index f6eabc184f8..e6f8b819627 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java @@ -24,15 +24,19 @@ import org.eclipse.cdt.core.parser.ast.IReferenceManager; */ public abstract class AbstractToken implements IToken, ITokenDuple { - public AbstractToken( int type, int lineNumber ) + private final char[] filename; + + public AbstractToken( int type, int lineNumber, char [] filename ) { setType( type ); this.lineNumber = lineNumber; + this.filename = filename; } - public AbstractToken( int type ) + public AbstractToken( int type, char [] filename ) { setType( type ); + this.filename = filename; } public String toString() { @@ -53,6 +57,13 @@ public abstract class AbstractToken implements IToken, ITokenDuple { return lineNumber; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IToken#getFilename() + */ + public char[] getFilename() { + return filename; + } + public int getEndOffset() { return getOffset() + getLength(); } protected int type; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java index d360a2f9cc3..1a61843bb4b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java @@ -501,5 +501,12 @@ public class BasicTokenDuple implements ITokenDuple { return toString().toCharArray(); //TODO fix me! } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ITokenDuple#getFilename() + */ + public char[] getFilename() { + return firstToken.getFilename(); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedExpansionToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedExpansionToken.java index 05ad7a6910b..bf4c78c8f9d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedExpansionToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedExpansionToken.java @@ -25,8 +25,8 @@ public class ImagedExpansionToken extends ImagedToken implements IToken { * @param contextStack * @param i */ - public ImagedExpansionToken(int t, ContextStack contextStack, char[] i) { - super(t, contextStack, i); + public ImagedExpansionToken(int t, ContextStack contextStack, char[] i, char [] f) { + super(t, contextStack, i, f); } /** @@ -34,8 +34,8 @@ public class ImagedExpansionToken extends ImagedToken implements IToken { * @param contextStack * @param i */ - public ImagedExpansionToken(int t, char[] i, int macroOffset, int macroLength ) { - super(t, i, macroOffset ); + public ImagedExpansionToken(int t, char[] i, int macroOffset, int macroLength, char [] f) { + super(t, i, macroOffset, f ); setOffsetAndLength( macroOffset, macroLength ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java index 0019d3092ab..2003a2c9055 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/ImagedToken.java @@ -25,14 +25,14 @@ public class ImagedToken extends SimpleToken { * @param contextStack * @param i */ - public ImagedToken(int t, ContextStack contextStack, char[] i) { - super(t, contextStack); + public ImagedToken(int t, ContextStack contextStack, char[] i, char [] f) { + super(t, contextStack, f ); setImage( i ); setOffsetAndLength(contextStack.getCurrentContext()); } - public ImagedToken( int t, char[] i, int endOffset) { - super( t, 0 ); + public ImagedToken( int t, char[] i, int endOffset, char [] f ) { + super( t, 0, f ); setImage(i); setOffsetAndLength( endOffset ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleExpansionToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleExpansionToken.java index d7f4505c70f..a9a78b78ee6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleExpansionToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleExpansionToken.java @@ -24,8 +24,8 @@ public class SimpleExpansionToken extends SimpleToken implements IToken { * @param tokenType * @param stack */ - public SimpleExpansionToken(int tokenType, ContextStack stack) { - super( tokenType, stack ); + public SimpleExpansionToken(int tokenType, ContextStack stack, char [] f) { + super( tokenType, stack, f ); } protected int length; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java index 01903331a96..dd4a768fb77 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/SimpleToken.java @@ -18,14 +18,14 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerContext; public class SimpleToken extends AbstractToken implements IToken { - public SimpleToken(int t, ContextStack contextStack ) { - super(t,contextStack.getCurrentLineNumber()); + public SimpleToken(int t, ContextStack contextStack, char [] filename ) { + super(t,contextStack.getCurrentLineNumber(), filename ); setOffsetAndLength(contextStack.getCurrentContext()); } - public SimpleToken( int t, int endOffset ) + public SimpleToken( int t, int endOffset, char [] filename ) { - super( t ); + super( t, filename ); setOffsetAndLength( endOffset ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java index d3b65e1c5f4..0dbefadc5f1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TokenFactory.java @@ -24,12 +24,21 @@ import org.eclipse.cdt.internal.core.parser.scanner.IScannerData; */ public class TokenFactory { + protected static final char[] EMPTY_CHAR_ARRAY = "".toCharArray(); //$NON-NLS-1$ public static IToken createToken( int tokenType, IScannerData scannerData ) { if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) - return new SimpleExpansionToken( tokenType, scannerData.getContextStack() ); + return new SimpleExpansionToken( tokenType, scannerData.getContextStack(), getCurrentFilename(scannerData) ); - return new SimpleToken( tokenType, scannerData.getContextStack() ); + return new SimpleToken( tokenType, scannerData.getContextStack(), getCurrentFilename(scannerData) ); + } + + /** + * @param scannerData + * @return + */ + private static char[] getCurrentFilename(IScannerData scannerData) { + return scannerData.getContextStack().getInclusionFilename(scannerData.getContextStack().getMostRelevantFileContextIndex() ).toCharArray(); } /** @@ -40,14 +49,14 @@ public class TokenFactory { */ public static IToken createUniquelyImagedToken(int type, String image, IScannerData scannerData) { if( scannerData.getContextStack().getCurrentContext().getKind() == IScannerContext.ContextKind.MACROEXPANSION ) - return new ImagedExpansionToken( type, scannerData.getContextStack(), image.toCharArray() ); + return new ImagedExpansionToken( type, scannerData.getContextStack(), image.toCharArray(), getCurrentFilename(scannerData) ); - return new ImagedToken(type, scannerData.getContextStack(), image.toCharArray() ); + return new ImagedToken(type, scannerData.getContextStack(), image.toCharArray(), getCurrentFilename(scannerData)); } public static IToken createStandAloneToken( int type, String image ) { - return new ImagedToken( type, image.toCharArray(), 0); + return new ImagedToken( type, image.toCharArray(), 0, EMPTY_CHAR_ARRAY); } public static ITokenDuple createTokenDuple( IToken first, IToken last )