[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Parser patch - Bug 35939 The Parser does not provide the Endline of the ICElement
|
Core fix for Outline View
- Fixed bug35939. Proper CElement position is set on Simple Declarations,
Class Specifications, Namespaces, Enumerations and Enumerators, Macros and
Inclusions. Callbacks updated to provide additional offset information.
JohnC
Index: dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java,v
retrieving revision 1.13
diff -u -r1.13 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java 4 Apr 2003 14:05:18 -0000 1.13
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java 4 Apr 2003 16:49:42 -0000
@@ -72,7 +72,7 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#classEnd()
*/
- public void classSpecifierEnd(Object classSpecifier) {
+ public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/**
@@ -141,13 +141,13 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#functionBodyEnd()
*/
- public void functionBodyEnd(Object functionBody) {
+ public void functionBodyEnd(Object functionBody ) {
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#inclusionBegin(java.lang.String)
*/
- public void inclusionBegin(String includeFile, int offset) {
+ public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/**
@@ -159,13 +159,13 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#macro(java.lang.String)
*/
- public void macro(String macroName, int offset) {
+ public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationBegin(org.eclipse.cdt.internal.core.newparser.Token)
*/
- public Object simpleDeclarationBegin(Object container) {
+ public Object simpleDeclarationBegin(Object container, Token firstToken) {
SimpleDeclaration decl = new SimpleDeclaration();
((IScope)container).addDeclaration(decl);
return decl;
@@ -174,7 +174,7 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationEnd(org.eclipse.cdt.internal.core.newparser.Token)
*/
- public void simpleDeclarationEnd(Object declaration) {
+ public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/**
@@ -488,10 +488,10 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
- public Object namespaceDefinitionBegin(Object container) {
+ public Object namespaceDefinitionBegin(Object container, Token namespace) {
IScope ownerScope = (IScope)container;
- NamespaceDefinition namespace = new NamespaceDefinition(ownerScope);
- return namespace;
+ NamespaceDefinition namespaceDef = new NamespaceDefinition(ownerScope);
+ return namespaceDef;
}
@@ -512,7 +512,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
- public void namespaceDefinitionEnd(Object namespace) {
+ public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
NamespaceDefinition ns = (NamespaceDefinition)namespace;
ns.getOwnerScope().addDeclaration(ns);
}
@@ -626,13 +626,13 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
- public void enumSpecifierEnd(Object enumSpec) {
+ public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
- public Object enumDefinitionBegin(Object enumSpec) {
+ public Object enumeratorBegin(Object enumSpec) {
EnumerationSpecifier es = (EnumerationSpecifier)enumSpec;
EnumeratorDefinition definition = new EnumeratorDefinition();
es.addEnumeratorDefinition(definition);
@@ -642,7 +642,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
- public void enumDefinitionId(Object enumDefn) {
+ public void enumeratorId(Object enumDefn) {
EnumeratorDefinition definition = (EnumeratorDefinition)enumDefn;
definition.setName( currName );
}
@@ -650,7 +650,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
- public void enumDefinitionEnd(Object enumDefn) {
+ public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
/* (non-Javadoc)
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.19
diff -u -r1.19 ChangeLog
--- parser/ChangeLog 4 Apr 2003 14:05:18 -0000 1.19
+++ parser/ChangeLog 4 Apr 2003 16:49:42 -0000
@@ -1,3 +1,7 @@
+2003-04-04 John Camelon
+ Fixed defect 35939. Proper CElement::pos() is set on Simple Declarations,
+ Class Specifications, Namespaces, Enumerations and Enumerators, Macros and Inclusions.
+
2003-04-03 John Camelon
Fixed defects 36019, 36020, 36045.
Finished template declarations and their callbacks for the DOM (not the Code Model).
Index: parser/org/eclipse/cdt/internal/core/model/EnumeratorWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/EnumeratorWrapper.java,v
retrieving revision 1.1
diff -u -r1.1 EnumeratorWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/EnumeratorWrapper.java 1 Apr 2003 18:52:37 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/model/EnumeratorWrapper.java 4 Apr 2003 16:49:42 -0000
@@ -12,6 +12,7 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.model;
+import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**
@@ -22,6 +23,7 @@
private final EnumerationWrapper parent;
private Name name;
+ private Token lastToken = null;
EnumeratorWrapper( EnumerationWrapper myParent )
{
@@ -48,6 +50,20 @@
*/
public void setName(Name name) {
this.name = name;
+ }
+
+ /**
+ * @return
+ */
+ public Token getLastToken() {
+ return lastToken;
+ }
+
+ /**
+ * @param token
+ */
+ public void setLastToken(Token token) {
+ lastToken = token;
}
}
Index: parser/org/eclipse/cdt/internal/core/model/NamespaceWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NamespaceWrapper.java,v
retrieving revision 1.1
diff -u -r1.1 NamespaceWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/NamespaceWrapper.java 3 Apr 2003 15:38:47 -0000 1.1
+++ parser/org/eclipse/cdt/internal/core/model/NamespaceWrapper.java 4 Apr 2003 16:49:42 -0000
@@ -1,7 +1,8 @@
package org.eclipse.cdt.internal.core.model;
-import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.IParent;
+import org.eclipse.cdt.internal.core.parser.Token;
import org.eclipse.cdt.internal.core.parser.util.Name;
/**********************************************************************
@@ -19,11 +20,13 @@
public class NamespaceWrapper implements ICElementWrapper{
private Name name;
private final IParent parent;
- private ICElement element;
+ private ICElement element;
+ private Token firstToken;
- public NamespaceWrapper( IParent incoming)
+ public NamespaceWrapper( IParent incoming, Token namespace)
{
this.parent= incoming;
+ firstToken = namespace;
}
/**
@@ -63,5 +66,13 @@
public void setElement(ICElement item) {
element = item;
}
+
+ /**
+ * @return
+ */
+ public Token getFirstToken() {
+ return firstToken;
+ }
+
}
Index: parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java,v
retrieving revision 1.20
diff -u -r1.20 NewModelBuilder.java
--- parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 4 Apr 2003 14:05:18 -0000 1.20
+++ parser/org/eclipse/cdt/internal/core/model/NewModelBuilder.java 4 Apr 2003 16:49:43 -0000
@@ -83,7 +83,11 @@
/**
* @see org.eclipse.cdt.core.newparser.IParserCallback#endClass()
*/
- public void classSpecifierEnd(Object classSpecifier) {
+ public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
+ SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)classSpecifier;
+ Structure s = (Structure)wrapper.getElement();
+ s.setPos( wrapper.getClassKind().getOffset(),
+ wrapper.getClassKind().getDelta( closingBrace ));
}
/**
@@ -121,10 +125,10 @@
/**
* @see org.eclipse.cdt.core.newparser.IParserCallback#macro(String)
*/
- public void macro(String macroName, int offset) {
+ public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
Macro elem = new Macro((TranslationUnit)translationUnit.getElement(), macroName);
elem.setIdPos(offset, macroName.length());
- elem.setPos(offset, macroName.length());
+ elem.setPos(macroBeginOffset, macroEndOffset - macroBeginOffset);
((TranslationUnit)translationUnit.getElement()).addChild(elem);
}
@@ -135,12 +139,13 @@
* @see
org.eclipse.cdt.internal.core.newparser.IParserCallback#beginSimpleDeclaration(Token)
*/
- public Object simpleDeclarationBegin(Object container) {
+ public Object simpleDeclarationBegin(Object container, Token firstToken) {
ICElementWrapper wrapper = (ICElementWrapper)container;
// Assuming that the parent is the container's element
IParent parent = (IParent)wrapper.getElement();
SimpleDeclarationWrapper result = new SimpleDeclarationWrapper();
result.setParent( parent );
+ result.setFirst( firstToken );
// A special case to transfere the visibility
if( wrapper instanceof SimpleDeclarationWrapper ){
result.setCurrentVisibility(((SimpleDeclarationWrapper)wrapper).getCurrentVisibility());
@@ -151,13 +156,13 @@
/**
- * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#beginInclusion(String)
+ * @see org.eclipse.cdt.internal.core.newmparser.IParserCallback#beginInclusion(String)
*/
- public void inclusionBegin(String includeFile, int offset) {
+ public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
Include elem = new Include(((TranslationUnit)translationUnit.getElement()), includeFile);
((TranslationUnit)translationUnit.getElement()).addChild(elem);
elem.setIdPos(offset, includeFile.length());
- elem.setPos(offset, includeFile.length());
+ elem.setPos(inclusionBeginOffset, offset + includeFile.length() + 1 );
}
/**
@@ -186,8 +191,9 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
- public void simpleDeclarationEnd(Object declaration) {
+ public void simpleDeclarationEnd(Object declaration, Token lastToken) {
SimpleDeclarationWrapper wrapper = (SimpleDeclarationWrapper)declaration;
+ wrapper.setLast( lastToken );
wrapper.createElements();
}
@@ -267,7 +273,7 @@
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#functionBodyEnd()
*/
- public void functionBodyEnd(Object functionBody) {
+ public void functionBodyEnd(Object functionBody ) {
}
/**
@@ -358,13 +364,11 @@
{
elem.setTypeName( wrapper.getClassKind().getImage() );
elem.setIdPos(wrapper.getName().getStartOffset(), elementName.length());
- elem.setPos(wrapper.getName().getStartOffset(), elementName.length());
}
else
{
elem.setTypeName( wrapper.getClassKind().getImage() );
- elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
- elem.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
+ elem.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
}
}
/**
@@ -551,10 +555,10 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
- public Object namespaceDefinitionBegin(Object container) {
+ public Object namespaceDefinitionBegin(Object container, Token namespace) {
ICElementWrapper c = (ICElementWrapper)container;
- NamespaceWrapper wrapper = new NamespaceWrapper((IParent)c.getElement());
+ NamespaceWrapper wrapper = new NamespaceWrapper((IParent)c.getElement(), namespace);
return wrapper;
}
@@ -574,8 +578,7 @@
realParent.addChild( newNameSpace );
// set the positions
- newNameSpace.setIdPos(wrapper.getName().getStartOffset(), namespaceName.length());
- newNameSpace.setPos(wrapper.getName().getStartOffset(), namespaceName.length());
+ newNameSpace.setIdPos(wrapper.getName().getStartOffset(), namespaceName.length());
}
/* (non-Javadoc)
@@ -588,7 +591,10 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
- public void namespaceDefinitionEnd(Object namespace) {
+ public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
+ NamespaceWrapper wrapper = (NamespaceWrapper)namespace;
+ Namespace celement = (Namespace)wrapper.getElement();
+ celement.setPos( wrapper.getFirstToken().getOffset(), wrapper.getFirstToken().getDelta(closingBrace));
}
/* (non-Javadoc)
@@ -696,7 +702,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
- public void enumSpecifierEnd(Object enumSpec) {
+ public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
EnumerationWrapper wrapper = (EnumerationWrapper)enumSpec;
List enumerators = wrapper.getEnumerators();
@@ -716,7 +722,8 @@
String enumeratorName = subwrapper.getName().toString();
enumerator.setIdPos(subwrapper.getName().getStartOffset(), enumeratorName.length());
- enumerator.setPos(subwrapper.getName().getStartOffset(), enumeratorName.length());
+ enumerator.setPos(subwrapper.getName().getStartOffset(),
+ subwrapper.getName().getNameStart().getDelta( subwrapper.getLastToken()));
enumeration.addChild( enumerator );
}
@@ -725,19 +732,19 @@
if( wrapper.getName() != null )
{
enumeration.setIdPos(wrapper.getName().getStartOffset(), enumName.length());
- enumeration.setPos(wrapper.getName().getStartOffset(), enumName.length());
}
else
{
enumeration.setIdPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
- enumeration.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getLength());
}
+ enumeration.setPos(wrapper.getClassKind().getOffset(), wrapper.getClassKind().getDelta( closingBrace ));
+
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
- public Object enumDefinitionBegin(Object enumSpec) {
+ public Object enumeratorBegin(Object enumSpec) {
EnumerationWrapper wrapper = (EnumerationWrapper)enumSpec;
EnumeratorWrapper result = new EnumeratorWrapper(wrapper);
return result;
@@ -746,7 +753,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
- public void enumDefinitionId(Object enumDefn) {
+ public void enumeratorId(Object enumDefn) {
EnumeratorWrapper wrapper = (EnumeratorWrapper)enumDefn;
wrapper.setName( currName );
}
@@ -754,8 +761,9 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
- public void enumDefinitionEnd(Object enumDefn) {
+ public void enumeratorEnd(Object enumDefn, Token lastToken) {
EnumeratorWrapper wrapper = (EnumeratorWrapper)enumDefn;
+ wrapper.setLastToken( lastToken );
wrapper.getParent().addEnumerator( wrapper );
}
Index: parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java,v
retrieving revision 1.17
diff -u -r1.17 SimpleDeclarationWrapper.java
--- parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java 4 Apr 2003 14:01:29 -0000 1.17
+++ parser/org/eclipse/cdt/internal/core/model/SimpleDeclarationWrapper.java 4 Apr 2003 16:49:43 -0000
@@ -3,9 +3,9 @@
import java.util.LinkedList;
import java.util.List;
+import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.IParent;
-import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.core.parser.Token;
@@ -22,6 +22,7 @@
private ICElement element = null;
private IParent parent = null;
+ Token first = null, last = null;
private Name name = null;
private boolean functionDefinition = false;
@@ -147,13 +148,13 @@
{
// hook up the offsets
declaration.setIdPos( currentDeclarator.getName().getStartOffset(), currentDeclarator.getName().length() );
- declaration.setPos( currentDeclarator.getName().getStartOffset(), currentDeclarator.getName().length());
}
else
{
declaration.setIdPos( classKind.getOffset(), classKind.getImage().toString().length());
- declaration.setPos( classKind.getOffset(), classKind.getImage().toString().length());
}
+
+ declaration.setPos( getFirst().getOffset(), getFirst().getDelta( getLast() ));
// add to parent
parentElement.addChild( declaration );
@@ -413,6 +414,34 @@
*/
public void setClassKind(Token classKind) {
this.classKind = classKind;
+ }
+
+ /**
+ * @return
+ */
+ public Token getFirst() {
+ return first;
+ }
+
+ /**
+ * @return
+ */
+ public Token getLast() {
+ return last;
+ }
+
+ /**
+ * @param token
+ */
+ public void setFirst(Token token) {
+ first = token;
+ }
+
+ /**
+ * @param token
+ */
+ public void setLast(Token token) {
+ last = token;
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/Declaration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Declaration.java,v
retrieving revision 1.6
diff -u -r1.6 Declaration.java
--- parser/org/eclipse/cdt/internal/core/parser/Declaration.java 31 Mar 2003 20:43:07 -0000 1.6
+++ parser/org/eclipse/cdt/internal/core/parser/Declaration.java 4 Apr 2003 16:49:43 -0000
@@ -12,9 +12,9 @@
package org.eclipse.cdt.internal.core.parser;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
-import java.util.Iterator;
import org.eclipse.cdt.internal.core.parser.util.TypeInfo;
Index: parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java,v
retrieving revision 1.14
diff -u -r1.14 ExpressionEvaluator.java
--- parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java 4 Apr 2003 14:05:18 -0000 1.14
+++ parser/org/eclipse/cdt/internal/core/parser/ExpressionEvaluator.java 4 Apr 2003 16:49:43 -0000
@@ -122,7 +122,7 @@
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
*/
- public void inclusionBegin(String includeFile, int offset) {
+ public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionEnd()
@@ -132,18 +132,18 @@
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
*/
- public void macro(String macroName, int offset) {
+ public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
*/
- public Object simpleDeclarationBegin(Object Container) {
+ public Object simpleDeclarationBegin(Object Container, Token firstToken) {
return null;
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
- public void simpleDeclarationEnd(Object declaration) {
+ public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#parameterDeclarationBegin(java.lang.Object)
@@ -212,7 +212,7 @@
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#functionBodyEnd()
*/
- public void functionBodyEnd(Object functionBody) {
+ public void functionBodyEnd(Object functionBody ) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierBegin(java.lang.Object, org.eclipse.cdt.internal.core.parser.Token)
@@ -228,7 +228,7 @@
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
*/
- public void classSpecifierEnd(Object classSpecifier) {
+ public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/**
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#baseSpecifierBegin(java.lang.Object)
@@ -405,7 +405,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
- public Object namespaceDefinitionBegin(Object container) {
+ public Object namespaceDefinitionBegin(Object container, Token namespace) {
return null;
}
@@ -429,7 +429,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
- public void namespaceDefinitionEnd(Object namespace) {
+ public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
}
@@ -536,7 +536,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
- public void enumSpecifierEnd(Object enumSpec) {
+ public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
@@ -544,7 +544,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
- public Object enumDefinitionBegin(Object enumSpec) {
+ public Object enumeratorBegin(Object enumSpec) {
return null;
}
@@ -552,7 +552,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
- public void enumDefinitionId(Object enumDefn) {
+ public void enumeratorId(Object enumDefn) {
}
@@ -560,7 +560,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
- public void enumDefinitionEnd(Object enumDefn) {
+ public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
@@ -722,5 +722,4 @@
*/
public void templateParameterListEnd(Object parameterList) {
}
-
}
Index: parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java,v
retrieving revision 1.13
diff -u -r1.13 IParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java 4 Apr 2003 14:05:18 -0000 1.13
+++ parser/org/eclipse/cdt/internal/core/parser/IParserCallback.java 4 Apr 2003 16:49:43 -0000
@@ -15,14 +15,14 @@
public Object translationUnitBegin();
public void translationUnitEnd(Object unit);
- public void inclusionBegin(String includeFile, int offset);
+ public void inclusionBegin(String includeFile, int nameBeginOffset, int inclusionBeginOffset);
public void inclusionEnd();
- public void macro(String macroName, int offset);
+ public void macro(String macroName, int macroNameOffset, int macroBeginOffset, int macroEndOffset);
- public Object simpleDeclarationBegin(Object Container);
+ public Object simpleDeclarationBegin(Object Container, Token firstToken);
public void simpleDeclSpecifier(Object Container, Token specifier);
public void simpleDeclSpecifierName( Object declaration );
- public void simpleDeclarationEnd(Object declaration);
+ public void simpleDeclarationEnd(Object declaration, Token lastToken);
public Object parameterDeclarationBegin( Object Container );
public void parameterDeclarationEnd( Object declaration );
@@ -60,7 +60,7 @@
public void classSpecifierAbort( Object classSpecifier );
public void classSpecifierSafe( Object classSpecifier );
public void classMemberVisibility( Object classSpecifier, Token visibility );
- public void classSpecifierEnd(Object classSpecifier);
+ public void classSpecifierEnd(Object classSpecifier, Token closingBrace );
public Object baseSpecifierBegin( Object containingClassSpec );
public void baseSpecifierName( Object baseSpecifier );
@@ -78,10 +78,10 @@
public void elaboratedTypeSpecifierName( Object elab );
public void elaboratedTypeSpecifierEnd( Object elab );
- public Object namespaceDefinitionBegin( Object container );
+ public Object namespaceDefinitionBegin( Object container, Token namespace );
public void namespaceDefinitionId( Object namespace );
public void namespaceDefinitionAbort( Object namespace );
- public void namespaceDefinitionEnd( Object namespace );
+ public void namespaceDefinitionEnd( Object namespace, Token closingBrace );
public Object linkageSpecificationBegin( Object container, String literal );
public void linkageSpecificationEnd( Object linkageSpec );
@@ -99,11 +99,11 @@
public Object enumSpecifierBegin( Object container, Token enumKey );
public void enumSpecifierId( Object enumSpec );
public void enumSpecifierAbort( Object enumSpec );
- public void enumSpecifierEnd( Object enumSpec );
+ public void enumSpecifierEnd( Object enumSpec, Token closingBrace );
- public Object enumDefinitionBegin( Object enumSpec );
- public void enumDefinitionId( Object enumDefn );
- public void enumDefinitionEnd( Object enumDefn );
+ public Object enumeratorBegin( Object enumSpec );
+ public void enumeratorId( Object enumDefn );
+ public void enumeratorEnd( Object enumDefn, Token lastToken );
public void asmDefinition( Object container, String assemblyCode );
Index: parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java,v
retrieving revision 1.13
diff -u -r1.13 NullParserCallback.java
--- parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java 4 Apr 2003 14:05:18 -0000 1.13
+++ parser/org/eclipse/cdt/internal/core/parser/NullParserCallback.java 4 Apr 2003 16:49:43 -0000
@@ -18,7 +18,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#inclusionBegin(java.lang.String, int)
*/
- public void inclusionBegin(String includeFile, int offset) {
+ public void inclusionBegin(String includeFile, int offset, int inclusionBeginOffset) {
}
/* (non-Javadoc)
@@ -30,13 +30,13 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#macro(java.lang.String, int)
*/
- public void macro(String macroName, int offset) {
+ public void macro(String macroName, int offset, int macroBeginOffset, int macroEndOffset) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationBegin(java.lang.Object)
*/
- public Object simpleDeclarationBegin(Object Container) {
+ public Object simpleDeclarationBegin(Object Container, Token firstToken) {
return null;
}
@@ -55,7 +55,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#simpleDeclarationEnd(java.lang.Object)
*/
- public void simpleDeclarationEnd(Object declaration) {
+ public void simpleDeclarationEnd(Object declaration, Token lastToken) {
}
/* (non-Javadoc)
@@ -224,7 +224,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#classSpecifierEnd(java.lang.Object)
*/
- public void classSpecifierEnd(Object classSpecifier) {
+ public void classSpecifierEnd(Object classSpecifier, Token closingBrace) {
}
/* (non-Javadoc)
@@ -317,7 +317,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationBegin(java.lang.Object)
*/
- public Object namespaceDefinitionBegin(Object container) {
+ public Object namespaceDefinitionBegin(Object container, Token namespace) {
return null;
}
@@ -336,7 +336,7 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#namespaceDeclarationEnd(java.lang.Object)
*/
- public void namespaceDefinitionEnd(Object namespace) {
+ public void namespaceDefinitionEnd(Object namespace, Token closingBrace) {
}
/* (non-Javadoc)
@@ -432,26 +432,26 @@
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumSpecifierEnd(java.lang.Object)
*/
- public void enumSpecifierEnd(Object enumSpec) {
+ public void enumSpecifierEnd(Object enumSpec, Token closingBrace) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionBegin(java.lang.Object)
*/
- public Object enumDefinitionBegin(Object enumSpec) {
+ public Object enumeratorBegin(Object enumSpec) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionId(java.lang.Object)
*/
- public void enumDefinitionId(Object enumDefn) {
+ public void enumeratorId(Object enumDefn) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IParserCallback#enumDefinitionEnd(java.lang.Object)
*/
- public void enumDefinitionEnd(Object enumDefn) {
+ public void enumeratorEnd(Object enumDefn, Token lastToken) {
}
/* (non-Javadoc)
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.21
diff -u -r1.21 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java 4 Apr 2003 14:05:18 -0000 1.21
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java 4 Apr 2003 16:49:44 -0000
@@ -459,9 +459,8 @@
protected void namespaceDefinition( Object container ) throws Backtrack
{
- consume( Token.t_namespace);
Object namespace = null;
- try{ namespace = callback.namespaceDefinitionBegin( container );} catch( Exception e ) {}
+ try{ namespace = callback.namespaceDefinitionBegin( container, consume( Token.t_namespace) );} catch( Exception e ) {}
// optional name
if( LT(1) == Token.tIDENTIFIER )
@@ -487,8 +486,8 @@
consumeToNextSemicolon();
}
// consume the }
- consume();
- try{ callback.namespaceDefinitionEnd( namespace );} catch( Exception e ) {}
+
+ try{ callback.namespaceDefinitionEnd( namespace, consume( Token.tRBRACE ));} catch( Exception e ) {}
}
else
{
@@ -511,7 +510,8 @@
*/
protected void simpleDeclaration( Object container ) throws Backtrack {
Object simpleDecl = null;
- try{ simpleDecl = callback.simpleDeclarationBegin( container);} catch( Exception e ) {}
+ Token lastToken = null;
+ try{ simpleDecl = callback.simpleDeclarationBegin( container, LA(1));} catch( Exception e ) {}
declSpecifierSeq(simpleDecl, false);
Object declarator = null;
@@ -534,7 +534,7 @@
switch (LT(1)) {
case Token.tSEMI:
- consume();
+ lastToken = consume(Token.tSEMI);
break;
case Token.tCOLON:
ctorInitializer(declarator);
@@ -545,10 +545,11 @@
if (quickParse) {
// speed up the parser by skiping the body
// simply look for matching brace and return
- consume(Token.tLBRACE);
+ lastToken = consume(Token.tLBRACE);
int depth = 1;
while (depth > 0) {
- switch (consume().getType()) {
+ lastToken = consume();
+ switch (lastToken.getType()) {
case Token.tRBRACE:
--depth;
break;
@@ -560,13 +561,13 @@
} else {
functionBody();
}
- try{ callback.functionBodyEnd(function);} catch( Exception e ) {}
+ try{ callback.functionBodyEnd(function );} catch( Exception e ) {}
break;
default:
break;
}
- try{ callback.simpleDeclarationEnd(simpleDecl);} catch( Exception e ) {}
+ try{ callback.simpleDeclarationEnd(simpleDecl, lastToken);} catch( Exception e ) {}
}
protected void ctorInitializer(Object declarator) throws Backtrack {
@@ -1269,9 +1270,9 @@
if( LT(1) == Token.tIDENTIFIER )
{
defn = null;
- try{ defn = callback.enumDefinitionBegin( enumSpecifier );} catch( Exception e ) {}
+ try{ defn = callback.enumeratorBegin( enumSpecifier );} catch( Exception e ) {}
identifier();
- try{ callback.enumDefinitionId( defn ); } catch( Exception e ) {}
+ try{ callback.enumeratorId( defn ); } catch( Exception e ) {}
}
else
{
@@ -1288,21 +1289,20 @@
try{ callback.expressionEnd( expression );} catch( Exception e ) {}
}
- try{ callback.enumDefinitionEnd( defn );} catch( Exception e ) {}
-
+
+ try{ callback.enumeratorEnd( defn, lastToken );} catch( Exception e ) {}
if( LT(1) == Token.tRBRACE )
break;
+
if( LT(1) != Token.tCOMMA )
{
try{ callback.enumSpecifierAbort( enumSpecifier );} catch( Exception e ) {}
throw backtrack;
}
- consume(Token.tCOMMA); // if we made it this far
+ consume(Token.tCOMMA);
}
- consume( Token.tRBRACE );
-
- try{ callback.enumSpecifierEnd( enumSpecifier );} catch( Exception e ) {}
+ try{ callback.enumSpecifierEnd( enumSpecifier, consume( Token.tRBRACE ) );} catch( Exception e ) {}
}
else
{
@@ -1357,9 +1357,8 @@
baseSpecifier( classSpec );
}
- // If we don't get a "{", assume elaborated type
if (LT(1) == Token.tLBRACE) {
- consume();
+ consume(Token.tLBRACE);
memberDeclarationLoop:
while (LT(1) != Token.tRBRACE) {
@@ -1382,10 +1381,10 @@
consumeToNextSemicolon();
}
// consume the }
- consume();
+ try{ callback.classSpecifierEnd(classSpec, consume( Token.tRBRACE )); } catch( Exception e ) {}
}
- try{ callback.classSpecifierEnd(classSpec); } catch( Exception e ) {}
+
}
protected void baseSpecifier( Object classSpecOwner ) throws Backtrack {
@@ -2063,7 +2062,7 @@
// Token management
private IScanner scanner;
- private Token currToken;
+ private Token currToken, lastToken;
private Token fetchToken() throws EndOfFile {
try {
@@ -2103,9 +2102,9 @@
if (currToken == null)
currToken = fetchToken();
- Token retToken = currToken;
+ lastToken = currToken;
currToken = currToken.getNext();
- return retToken;
+ return lastToken;
}
protected Token consume(int type) throws Backtrack {
@@ -2123,6 +2122,7 @@
protected void backup(Token mark) {
currToken = mark;
+ lastToken = null;
}
}
Index: parser/org/eclipse/cdt/internal/core/parser/Scanner.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java,v
retrieving revision 1.14
diff -u -r1.14 Scanner.java
--- parser/org/eclipse/cdt/internal/core/parser/Scanner.java 4 Apr 2003 14:05:18 -0000 1.14
+++ parser/org/eclipse/cdt/internal/core/parser/Scanner.java 4 Apr 2003 16:49:44 -0000
@@ -718,6 +718,7 @@
currentContext);
} else if (c == '#') {
+ int beginningOffset = currentContext.getOffset();
// lets prepare for a preprocessor statement
StringBuffer buff = new StringBuffer();
buff.append((char) c);
@@ -761,7 +762,7 @@
continue;
}
- poundDefine();
+ poundDefine(beginningOffset);
c = getChar();
continue;
@@ -773,7 +774,7 @@
continue;
}
- poundInclude();
+ poundInclude( beginningOffset );
c = getChar();
continue;
@@ -1465,7 +1466,7 @@
return encounteredNewline;
}
- protected void poundInclude() throws ScannerException {
+ protected void poundInclude( int beginningOffset ) throws ScannerException {
skipOverWhitespace();
int c = getChar();
int offset;
@@ -1498,7 +1499,7 @@
{
offset = currentContext.getOffset() - f.length() - 1; // -1 for the end quote
- callback.inclusionBegin( f, offset );
+ callback.inclusionBegin( f, offset, beginningOffset );
callback.inclusionEnd();
}
}
@@ -1506,7 +1507,7 @@
handleInclusion(f.trim(), useIncludePath );
}
- protected void poundDefine() throws ScannerException, Parser.EndOfFile {
+ protected void poundDefine(int beginning) throws ScannerException, Parser.EndOfFile {
skipOverWhitespace();
// definition
String key = getNextIdentifier();
@@ -1614,7 +1615,7 @@
// call the callback accordingly
if( callback != null )
- callback.macro( key, offset );
+ callback.macro( key, offset, beginning, currentContext.getOffset() );
}
protected void expandDefinition(String symbol, Object expansion)
Index: parser/org/eclipse/cdt/internal/core/parser/Token.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Token.java,v
retrieving revision 1.7
diff -u -r1.7 Token.java
--- parser/org/eclipse/cdt/internal/core/parser/Token.java 3 Apr 2003 02:59:58 -0000 1.7
+++ parser/org/eclipse/cdt/internal/core/parser/Token.java 4 Apr 2003 16:49:45 -0000
@@ -40,6 +40,11 @@
public int getOffset() { return offset; }
public int getLength() { return image.length(); }
+ public int getDelta( Token other )
+ {
+ return other.getOffset() + other.getLength() - getOffset();
+ }
+
private Token next;
public Token getNext() { return next; }
public void setNext(Token t) { next = t; }
Index: parser/org/eclipse/cdt/internal/core/parser/util/Name.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/Name.java,v
retrieving revision 1.4
diff -u -r1.4 Name.java
--- parser/org/eclipse/cdt/internal/core/parser/util/Name.java 3 Apr 2003 02:59:58 -0000 1.4
+++ parser/org/eclipse/cdt/internal/core/parser/util/Name.java 4 Apr 2003 16:49:45 -0000
@@ -53,4 +53,11 @@
{
return getEndOffset() - getStartOffset() + nameEnd.getImage().length();
}
+ /**
+ * @return
+ */
+ public Token getNameStart() {
+ return nameStart;
+ }
+
}