From 9ac724d2edcb3085225e8e4e3281e34bca88c97d Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 7 Sep 2004 20:04:30 +0000 Subject: [PATCH] Fixed 71534 - [Parser] IUsing does not have starting offset (IASTUsingDirective) --- .../internal/core/model/CModelBuilder.java | 4 +- .../core/parser/ast/IASTUsingDeclaration.java | 2 +- .../core/parser/ast/IASTUsingDirective.java | 2 +- .../ast/complete/ASTUsingDeclaration.java | 61 ++++++++++++++++++- .../ast/complete/ASTUsingDirective.java | 61 ++++++++++++++++++- .../ast/complete/CompleteParseASTFactory.java | 4 +- .../parser/ast/quick/ASTUsingDeclaration.java | 56 ++++++++++++++++- .../parser/ast/quick/ASTUsingDirective.java | 57 ++++++++++++++++- .../ast/quick/QuickParseASTFactory.java | 4 +- 9 files changed, 239 insertions(+), 12 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java index b890b1c0cf5..3a6ca5698c8 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java @@ -753,7 +753,7 @@ public class CModelBuilder { parent.addChild(element); // set positions - //element.setIdPos(usingDirDeclaration.getNameOffset(), (usingDirective.getNameEndOffset() - usingDirDeclaration.getNameOffset())); + element.setIdPos(usingDirDeclaration.getNameOffset(), (usingDirDeclaration.getNameEndOffset() - usingDirDeclaration.getNameOffset())); element.setPos(usingDirDeclaration.getStartingOffset(), usingDirDeclaration.getEndingOffset() - usingDirDeclaration.getStartingOffset()); element.setLines(usingDirDeclaration.getStartingLine(), usingDirDeclaration.getEndingLine() ); this.newElements.put(element, element.getElementInfo()); @@ -770,7 +770,7 @@ public class CModelBuilder { parent.addChild(element); // set positions - //element.setIdPos(usingDeclaration.getNameOffset(), (usingDeclaration.getNameEndOffset() - usingDeclaration.getNameOffset())); + element.setIdPos(usingDeclaration.getNameOffset(), (usingDeclaration.getNameEndOffset() - usingDeclaration.getNameOffset())); element.setPos(usingDeclaration.getStartingOffset(), usingDeclaration.getEndingOffset() - usingDeclaration.getStartingOffset()); element.setLines(usingDeclaration.getStartingLine(), usingDeclaration.getEndingLine() ); this.newElements.put(element, element.getElementInfo()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java index f658085f97d..0aa3869a020 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDeclaration.java @@ -16,7 +16,7 @@ import java.util.Iterator; * @author jcamelon * */ -public interface IASTUsingDeclaration extends IASTDeclaration, IASTOffsetableElement { +public interface IASTUsingDeclaration extends IASTDeclaration, IASTOffsetableNamedElement { public boolean isTypename(); public String usingTypeName(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDirective.java index bb8f1ba5a2b..7254f580f4a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTUsingDirective.java @@ -14,7 +14,7 @@ package org.eclipse.cdt.core.parser.ast; * @author jcamelon * */ -public interface IASTUsingDirective extends IASTDeclaration, IASTOffsetableElement { +public interface IASTUsingDirective extends IASTDeclaration, IASTOffsetableNamedElement { public String getNamespaceName(); public IASTNamespaceDefinition getNamespaceDefinition() throws ASTNotImplementedException; 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 645ca51cde1..98ed9dbf085 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 @@ -41,9 +41,12 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration /** * @param filename + * @param nStart + * @param nEnd + * @param nLine * */ - public ASTUsingDeclaration( IASTScope ownerScope, char[] name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename ) + public ASTUsingDeclaration( IASTScope ownerScope, char[] name, List declarations, boolean isTypeName, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename, int nStart, int nEnd, int nLine ) { this.ownerScope = ownerScope; this.isTypeName = isTypeName; @@ -53,6 +56,8 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration setEndingOffsetAndLineNumber(endingOffset, endingLine); this.references = references; fn = filename; + setNameOffset(nStart); + setNameEndOffsetAndLineNumber( nEnd, nLine ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() @@ -159,4 +164,58 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration return endingOffset; } + private int nameEndOffset; + private int nameStartOffset; + private int nameLine; + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() + */ + public String getName() { + return new String( name ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameCharArray() + */ + public char[] getNameCharArray() { + return name; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset() + */ + public int getNameOffset() { + return nameStartOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int) + */ + public void setNameOffset(int o) { + nameStartOffset = o; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameEndOffset() + */ + public int getNameEndOffset() { + return nameEndOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameEndOffsetAndLineNumber(int, int) + */ + public void setNameEndOffsetAndLineNumber(int offset, int lineNumber) { + nameLine = lineNumber; + nameEndOffset = offset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameLineNumber() + */ + public int getNameLineNumber() { + return nameLine; + } + } 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 c8eef34f6a1..ba080ba776d 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 @@ -40,9 +40,12 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs * @param startingOffset * @param endingOffset * @param filename + * @param nStart + * @param nEnd + * @param nLine */ //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, char[] filename ) + public ASTUsingDirective(IContainerSymbol ownerSymbol, IUsingDirectiveSymbol usingDirective, int startingOffset, int startingLine, int endingOffset, int endingLine, List references, char[] filename, int nStart, int nEnd, int nLine ) { super( ownerSymbol ); //namespace = namespaceDefinition; @@ -51,6 +54,8 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs setEndingOffsetAndLineNumber(endingOffset, endingLine); this.references = references; fn = filename; + setNameOffset( nStart ); + setNameEndOffsetAndLineNumber( nEnd, nLine ); } /* (non-Javadoc) @@ -153,4 +158,58 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs return endingOffset; } + private int nameEndOffset; + private int nameStartOffset; + private int nameLine; + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() + */ + public String getName() { + return getNamespaceName(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameCharArray() + */ + public char[] getNameCharArray() { + return getName().toCharArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset() + */ + public int getNameOffset() { + return nameStartOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int) + */ + public void setNameOffset(int o) { + nameStartOffset = o; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameEndOffset() + */ + public int getNameEndOffset() { + return nameEndOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameEndOffsetAndLineNumber(int, int) + */ + public void setNameEndOffsetAndLineNumber(int offset, int lineNumber) { + nameLine = lineNumber; + nameEndOffset = offset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameLineNumber() + */ + public int getNameLineNumber() { + return nameLine; + } + } 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 c191d04747f..83b3b140700 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 @@ -459,7 +459,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto handleProblem( pste.createProblemID(), duple.toCharArray(), startingOffset, endingOffset, startingLine, true ); } - ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references, filename ); + ASTUsingDirective using = new ASTUsingDirective( scopeToSymbol(scope), usingDirective, startingOffset, startingLine, endingOffset, endingLine, references, filename, duple.getStartOffset(), duple.getEndOffset(), duple.getLineNumber() ); attachSymbolExtension( usingDirective, using ); return using; @@ -548,7 +548,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } ASTUsingDeclaration using = new ASTUsingDeclaration( scope, name.getLastToken().getCharImage(), - endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references, filename ); + endResult.getReferencedSymbols(), isTypeName, startingOffset, startingLine, endingOffset, endingLine, references, filename, name.getStartOffset(), name.getEndOffset(), name.getLineNumber() ); attachSymbolExtension( endResult, using ); return using; 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 614ecba5255..04e06bbf708 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 @@ -36,7 +36,7 @@ public class ASTUsingDeclaration } - public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, char[] mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) + public ASTUsingDeclaration( IASTScope scope, boolean isTypeName, char[] mappingName, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename, int nStart, int nEnd, int nLine ) { super( scope ); isTypename = isTypeName; @@ -44,6 +44,8 @@ public class ASTUsingDeclaration setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); fn = filename; + setNameOffset( nStart ); + setNameEndOffsetAndLineNumber( nEnd, nLine ); } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration#isTypename() @@ -96,6 +98,9 @@ public class ASTUsingDeclaration throw new ASTNotImplementedException(); } private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; + private int nameStartOffset; + private int nameEndOffset; + private int nameLine; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() */ @@ -139,5 +144,54 @@ public class ASTUsingDeclaration { return endingOffset; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() + */ + public String getName() { + return new String( mappingName ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameCharArray() + */ + public char[] getNameCharArray() { + return mappingName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset() + */ + public int getNameOffset() { + return nameStartOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int) + */ + public void setNameOffset(int o) { + nameStartOffset = o; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameEndOffset() + */ + public int getNameEndOffset() { + return nameEndOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameEndOffsetAndLineNumber(int, int) + */ + public void setNameEndOffsetAndLineNumber(int offset, int lineNumber) { + nameEndOffset = offset; + nameLine = lineNumber; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameLineNumber() + */ + public int getNameLineNumber() { + return nameLine; + } } 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 4ebcf1eaae2..b41afa9c15a 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 @@ -32,13 +32,15 @@ public class ASTUsingDirective return fn; } - public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename ) + public ASTUsingDirective( IASTScope scope, String name, int startingOffset, int startingLine, int endingOffset, int endingLine, char[] filename, int nStart, int nEnd, int nLine ) { super( scope ); this.namespaceName = name; setStartingOffsetAndLineNumber(startingOffset, startingLine); setEndingOffsetAndLineNumber(endingOffset, endingLine); fn = filename; + setNameOffset( nStart ); + setNameEndOffsetAndLineNumber( nEnd, nLine ); } private final String namespaceName; @@ -82,6 +84,9 @@ public class ASTUsingDirective throw new ASTNotImplementedException(); } private int startingLineNumber, startingOffset, endingLineNumber, endingOffset; + private int nameStartOffset; + private int nameEndOffset; + private int nameLine; /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingLine() */ @@ -126,4 +131,54 @@ public class ASTUsingDirective return endingOffset; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() + */ + public String getName() { + return namespaceName; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameCharArray() + */ + public char[] getNameCharArray() { + return namespaceName.toCharArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset() + */ + public int getNameOffset() { + return nameStartOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int) + */ + public void setNameOffset(int o) { + nameStartOffset = o; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameEndOffset() + */ + public int getNameEndOffset() { + return nameEndOffset; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameEndOffsetAndLineNumber(int, int) + */ + public void setNameEndOffsetAndLineNumber(int offset, int lineNumber) { + nameEndOffset = offset; + nameLine = lineNumber; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameLineNumber() + */ + public int getNameLineNumber() { + return nameLine; + } + } 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 be742022fc2..bad277c0d45 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 @@ -80,7 +80,7 @@ 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, duple.getFilename() ); + return new ASTUsingDirective( scope, duple.toString(), startingOffset, startingLine, endingOffset, endingLine, duple.getFilename(), duple.getStartOffset(), duple.getEndOffset(), duple.getLineNumber() ); } /* (non-Javadoc) @@ -119,7 +119,7 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory * @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.toCharArray(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename() ); + return new ASTUsingDeclaration( scope, isTypeName, name.toCharArray(), startingOffset, startingLine, endingOffset, endingLine, name.getFilename(), name.getStartOffset(), name.getEndOffset(), name.getLineNumber() ); } /* (non-Javadoc)