1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Return proper IASTFileLocation for an empty translation unit.

This commit is contained in:
Sergey Prigogin 2011-10-26 17:18:43 -07:00
parent e03958b6ad
commit c06295ea39

View file

@ -35,7 +35,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.Token;
*/ */
public abstract class ASTNode implements IASTNode { public abstract class ASTNode implements IASTNode {
protected static final ICPPFunction UNINITIALIZED_FUNCTION = new CPPFunction(null); protected static final ICPPFunction UNINITIALIZED_FUNCTION = new CPPFunction(null);
private static final IASTNodeLocation[] EMPTY_LOCATION_ARRAY = new IASTNodeLocation[0]; private static final IASTNodeLocation[] EMPTY_LOCATION_ARRAY = {};
private IASTNode parent; private IASTNode parent;
private ASTNodeProperty property; private ASTNodeProperty property;
@ -184,7 +184,8 @@ public abstract class ASTNode implements IASTNode {
public IASTFileLocation getFileLocation() { public IASTFileLocation getFileLocation() {
if (fileLocation != null) if (fileLocation != null)
return fileLocation; return fileLocation;
if (offset <= 0 && (length == 0 || offset < 0)) { // TODO(sprigogin): The purpose of offset == 0 && length == 0 condition is not clear to me.
if (offset < 0 || (offset == 0 && length == 0 && !(this instanceof IASTTranslationUnit))) {
return null; return null;
} }
IASTTranslationUnit ast = getTranslationUnit(); IASTTranslationUnit ast = getTranslationUnit();
@ -193,7 +194,7 @@ public abstract class ASTNode implements IASTNode {
if (lr != null) { if (lr != null) {
fileLocation= lr.getMappedFileLocation(offset, length); fileLocation= lr.getMappedFileLocation(offset, length);
} else { } else {
// support for old location map // Support for old location map
fileLocation= ast.flattenLocationsToFile(getNodeLocations()); fileLocation= ast.flattenLocationsToFile(getNodeLocations());
} }
} }