Skip to main content

[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;
+	}
+
 }

Back to the top