Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied [HEAD] Two CModelBuilder fixes + 1 New Class Wizard fix


Core:
        Fix for bug#40759: Offsets of macroexpansions are not correct
        Fix for bug#44633: Outline View : CModelBuilder quits on templated friends
Tests:
        Added offset checking in CModelElementsTest
UI:
        Fixed bug#45115: New Class Wizard: Error in base class doesn't clear when ...

Hoda Amer
Staff Software Engineer
Rational Software - IBM Software Group


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.211
diff -u -r1.211 ChangeLog
--- ChangeLog	20 Oct 2003 21:11:44 -0000	1.211
+++ ChangeLog	22 Oct 2003 17:34:06 -0000
@@ -1,3 +1,6 @@
+2003-10-22 Hoda Amer
+	Fixed bug#45115: New Class Wizard: Error in base class doesn't clear when ... 
+	
 2003-10-20 Hoda Amer
 	Fixed bug#44507 outline flickers with CDT1.2 RC0
 	In CReconcilingStrategy, the outliner is asked to redraw only 
Index: src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java,v
retrieving revision 1.9
diff -u -r1.9 NewClassWizardPage.java
--- src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java	22 Sep 2003 18:38:30 -0000	1.9
+++ src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java	22 Oct 2003 17:34:13 -0000
@@ -365,7 +365,7 @@
 		}
 		
 		if(field == fBaseClassDialogField){
-			if(fBaseClassDialogField.getText().length() > 0)
+			if(fBaseClassDialogField.getText().length() >= 0)
 			{
 				fAccessButtons.setEnabled(true);
 				fBaseClassStatus = baseClassNameChanged();
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.168
diff -u -r1.168 ChangeLog
--- ChangeLog	21 Oct 2003 19:44:52 -0000	1.168
+++ ChangeLog	22 Oct 2003 17:29:57 -0000
@@ -1,3 +1,7 @@
+2003-10-22 Hoda Amer
+	Fix for bug#40759: Offsets of macroexpansions are not correct 
+	Fix for bug#44633: Outline View : CModelBuilder quits on templated friends 
+	
 2003-10-21 Alain Magloire
 
 	Moving the implementation of the ICPathEntry in the Core Model
Index: model/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.20
diff -u -r1.20 CModelBuilder.java
--- model/org/eclipse/cdt/internal/core/model/CModelBuilder.java	25 Sep 2003 19:40:35 -0000	1.20
+++ model/org/eclipse/cdt/internal/core/model/CModelBuilder.java	22 Oct 2003 17:30:00 -0000
@@ -32,6 +32,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
 import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -189,13 +190,15 @@
 		IASTDeclaration declaration = (IASTDeclaration)templateDeclaration.getOwnedDeclaration();
 		if(declaration instanceof IASTAbstractTypeSpecifierDeclaration){
 			IASTAbstractTypeSpecifierDeclaration abstractDeclaration = (IASTAbstractTypeSpecifierDeclaration)declaration ;
-			CElement element = createAbstractElement(parent, abstractDeclaration , true);			
-			// set the element position		
-			element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());	
-			// set the template parameters				
-			String[] parameterTypes = ASTUtil.getTemplateParameters(templateDeclaration);
-			ITemplate classTemplate = (ITemplate) element;
-			classTemplate.setTemplateParameterTypes(parameterTypes);				
+			CElement element = createAbstractElement(parent, abstractDeclaration , true);
+			if(element != null){			
+				// set the element position		
+				element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());	
+				// set the template parameters				
+				String[] parameterTypes = ASTUtil.getTemplateParameters(templateDeclaration);
+				ITemplate classTemplate = (ITemplate) element;
+				classTemplate.setTemplateParameterTypes(parameterTypes);				
+			}
 		}
 		ITemplate template = null;
 		template = (ITemplate) createSimpleElement(parent, declaration, true);
@@ -239,6 +242,9 @@
 					IASTDeclaration subDeclaration = (IASTDeclaration)j.next();
 					generateModelElements((Parent)classElement, subDeclaration);					
 				} // end while j
+			} else if (typeSpec instanceof IASTElaboratedTypeSpecifier){
+				// This is not a model element, so we don't create anything here.
+				// However, do we need to do anything else?
 			}
 		}				
 		return element;		
@@ -266,7 +272,7 @@
 		// add to parent
 		parent.addChild((CElement) element);
 		// set position
-		element.setIdPos(inclusion.getNameOffset(), inclusion.getName().length());
+		element.setIdPos(inclusion.getNameOffset(), inclusion.getNameEndOffset() - inclusion.getNameOffset());
 		element.setPos(inclusion.getStartingOffset(), inclusion.getEndingOffset() - inclusion.getStartingOffset());
 
 		this.newElements.put(element, element.getElementInfo());
@@ -279,7 +285,7 @@
 		// add to parent
 		parent.addChild((CElement) element);		
 		// set position
-		element.setIdPos(macro.getNameOffset(), macro.getName().length());
+		element.setIdPos(macro.getNameOffset(), macro.getNameEndOffset() - macro.getNameOffset());
 		element.setPos(macro.getStartingOffset(), macro.getEndingOffset() - macro.getStartingOffset());
 
 		this.newElements.put(element, element.getElementInfo());
@@ -295,7 +301,8 @@
 		Namespace element = new Namespace ((ICElement)parent, nsName );
 		// add to parent
 		parent.addChild((ICElement)element);
-		element.setIdPos(nsDef.getNameOffset(), (nsName.length() == 0) ? type.length() : nsName.length());
+		element.setIdPos(nsDef.getNameOffset(), 
+		(nsName.length() == 0) ? type.length() : (nsDef.getNameEndOffset() - nsDef.getNameOffset()));
 		element.setPos(nsDef.getStartingOffset(), nsDef.getEndingOffset() - nsDef.getStartingOffset());
 		element.setTypeName(type);
 		
@@ -319,7 +326,8 @@
 			createEnumerator(element, enumDef);
 		}
 		// set enumeration position
-		element.setIdPos(enumSpecifier.getNameOffset(), (enumName.length() == 0) ? type.length() : enumName.length());
+		element.setIdPos(enumSpecifier.getNameOffset(), 
+		(enumName.length() == 0) ? type.length() : (enumSpecifier.getNameEndOffset() - enumSpecifier.getNameOffset() ));
 		element.setPos(enumSpecifier.getStartingOffset(), enumSpecifier.getEndingOffset() - enumSpecifier.getStartingOffset());
 		element.setTypeName(type);
 		 
@@ -332,7 +340,7 @@
 		// add to parent
 		enum.addChild(element);
 		// set enumerator position
-		element.setIdPos(enumDef.getStartingOffset(), enumDef.getName().length());
+		element.setIdPos(enumDef.getStartingOffset(), (enumDef.getNameEndOffset() - enumDef.getNameOffset()));
 		element.setPos(enumDef.getStartingOffset(), enumDef.getEndingOffset() - enumDef.getStartingOffset());
 
 		this.newElements.put(element, element.getElementInfo());
@@ -395,7 +403,8 @@
 		// add to parent
 		parent.addChild((ICElement) element);
 		// set element position 
-		element.setIdPos( classSpecifier.getNameOffset(), (className.length() == 0) ? type.length() : className.length() );
+		element.setIdPos( classSpecifier.getNameOffset(), 
+		(className.length() == 0) ? type.length() : (classSpecifier.getNameEndOffset() - classSpecifier.getNameOffset() ));
 		element.setTypeName( type );
 		if(!isTemplate){
 			// set the element position
@@ -419,7 +428,7 @@
 		parent.addChild((CElement)element);
 
 		// set positions
-		element.setIdPos(typeDefDeclaration.getNameOffset(),name.length());	
+		element.setIdPos(typeDefDeclaration.getNameOffset(), (typeDefDeclaration.getNameEndOffset() - typeDefDeclaration.getNameOffset()));	
 		element.setPos(typeDefDeclaration.getStartingOffset(), typeDefDeclaration.getEndingOffset() - typeDefDeclaration.getStartingOffset());
 
 		this.newElements.put(element, element.getElementInfo());
@@ -472,7 +481,7 @@
 		parent.addChild( element ); 	
 
 		// set position
-		element.setIdPos( varDeclaration.getNameOffset(), variableName.length() );
+		element.setIdPos( varDeclaration.getNameOffset(), (varDeclaration.getNameEndOffset() - varDeclaration.getNameOffset()) );
 		if(!isTemplate){
 			// set element position
 			element.setPos(varDeclaration.getStartingOffset(), varDeclaration.getEndingOffset() - varDeclaration.getStartingOffset());
@@ -572,7 +581,7 @@
 		parent.addChild( element ); 	
 
 		// hook up the offsets
-		element.setIdPos( functionDeclaration.getNameOffset(), functionDeclaration.getNameEndOffset() - functionDeclaration.getNameOffset() );
+		element.setIdPos( functionDeclaration.getNameOffset(), (functionDeclaration.getNameEndOffset() - functionDeclaration.getNameOffset()) );
 		if(!isTemplate){
 			// set the element position		
 			element.setPos(functionDeclaration.getStartingOffset(), functionDeclaration.getEndingOffset() - functionDeclaration.getStartingOffset());	
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.133
diff -u -r1.133 ChangeLog
--- ChangeLog	21 Oct 2003 23:22:31 -0000	1.133
+++ ChangeLog	22 Oct 2003 17:30:38 -0000
@@ -1,3 +1,6 @@
+2003-10-22 Hoda Amer
+	Added offset checking in CModelElementsTest
+	
 2003-10-21 John Camelon
 	Moved testBug40007() from ASTFailedTests to QuickParseASTTests.  
 	Added QuickParseASTTests::testBug40759().  
Index: model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java,v
retrieving revision 1.9
diff -u -r1.9 CModelElementsTests.java
--- model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	10 Sep 2003 14:26:04 -0000	1.9
+++ model/org/eclipse/cdt/core/model/tests/CModelElementsTests.java	22 Oct 2003 17:30:39 -0000
@@ -119,6 +119,7 @@
 		ArrayList tuPackages = tu.getChildrenOfType(ICElement.C_NAMESPACE);
 		INamespace namespace = (INamespace) tuPackages.get(0);
 		assertEquals(namespace.getElementName(), new String("MyPackage"));
+		checkElementOffset((CElement)namespace);
 		checkLineNumbers((CElement)namespace, 8, 130);
 		checkClass(namespace);
 				
@@ -141,6 +142,7 @@
 		ArrayList tuIncludes = tu.getChildrenOfType(ICElement.C_INCLUDE);
 		IInclude inc1 = (IInclude) tuIncludes.get(0);
 		assertEquals(inc1.getElementName(), new String("stdio.h"));
+		checkElementOffset((CElement)inc1);
 		checkLineNumbers((CElement)inc1, 2, 2);
 	}
 	
@@ -148,6 +150,7 @@
 		ArrayList tuMacros = tu.getChildrenOfType(ICElement.C_MACRO);
 		IMacro mac1 = (IMacro) tuMacros.get(0);
 		assertEquals(mac1.getElementName(), new String("PRINT"));
+		checkElementOffset((CElement)mac1);
 		checkLineNumbers((CElement)mac1, 5, 5);
 	}
 	
@@ -156,12 +159,14 @@
 		ArrayList nsClasses = namespace.getChildrenOfType(ICElement.C_CLASS);		
 		IStructure classHello = (IStructure) nsClasses.get(0);
 		assertEquals(classHello.getElementName(), new String("Hello"));
+		checkElementOffset((CElement)classHello);
 		checkLineNumbers((CElement)classHello, 12, 53);
 		
 		// Hello --> field: int x
 		ArrayList helloFields = classHello.getChildrenOfType(ICElement.C_FIELD);
 		IField intX = (IField) helloFields.get(0);
 		assertEquals(intX.getElementName(), new String("x"));
+		checkElementOffset((CElement)intX);
 		assertEquals(intX.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)intX, 17, 17);
 		
@@ -173,6 +178,7 @@
 		ArrayList helloMethods = classHello.getChildrenOfType(ICElement.C_METHOD);
 		IMethod setX = (IMethod) helloMethods.get(0);
 		assertEquals(setX.getElementName(), new String("setX"));
+		checkElementOffset((CElement)setX);
 		assertEquals(setX.getReturnType(), new String("void"));
 		checkLineNumbers((CElement)setX, 19, 22);
 		int setXNumOfParam = setX.getNumberOfParameters();
@@ -190,6 +196,7 @@
 		ArrayList helloNamespaces = classHello.getChildrenOfType(ICElement.C_NAMESPACE);
 		INamespace myNestedPackage = (INamespace) helloNamespaces.get(0);
 		assertEquals(myNestedPackage.getElementName(), new String("MyNestedPackage"));
+		checkElementOffset((CElement)myNestedPackage);
 		checkLineNumbers((CElement)myNestedPackage, 25, 52);
 
 		checkParentNestedClass(myNestedPackage);	
@@ -200,18 +207,21 @@
 		ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);		
 		IStructure classY = (IStructure) nestedClasses.get(0);
 		assertEquals(classY.getElementName(), new String("Y"));
+		checkElementOffset((CElement)classY);
 		checkLineNumbers((CElement)classY, 28, 35);
 		
 		// Y ---> constructor: Y
 		ArrayList yMethods = classY.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
 		IMethodDeclaration constructor  = (IMethodDeclaration) yMethods.get(0);
 		assertEquals(constructor.getElementName(), new String("Y"));
+		checkElementOffset((CElement)constructor);
 		assertTrue (constructor.isConstructor());
 		checkLineNumbers((CElement)constructor, 32, 32);
 		
 		// Y ---> destructor: ~Y
 		IMethodDeclaration destructor  = (IMethodDeclaration) yMethods.get(1);
 		assertEquals(destructor.getElementName(), new String("~Y"));
+		checkElementOffset((CElement)destructor);
 		assertTrue (destructor.isDestructor());
 		checkLineNumbers((CElement)destructor, 34, 34);
 		// TODO: check for virtual on destructors
@@ -223,6 +233,7 @@
 		ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);		
 		IStructure classX = (IStructure) nestedClasses.get(1);
 		assertEquals(classX.getElementName(), new String("X"));
+		checkElementOffset((CElement)classX);
 		checkLineNumbers((CElement)classX, 38, 51);
 		// TODO : Check for base classes here
 		
@@ -230,6 +241,7 @@
 		ArrayList xFieldChildren = classX.getChildrenOfType(ICElement.C_FIELD);
 		IField bB = (IField) xFieldChildren.get(0);
 		assertEquals(bB.getElementName(), new String("b"));
+		checkElementOffset((CElement)bB);
 		assertEquals(bB.getTypeName(), new String("B"));
 		checkLineNumbers((CElement)bB, 42, 42);
 		ASTAccessVisibility bVisibility = bB.getVisibility(); 
@@ -240,6 +252,7 @@
 		ArrayList xMethodChildren = classX.getChildrenOfType(ICElement.C_METHOD);
 		IMethod xconstructor  = (IMethod) xMethodChildren.get(0);
 		assertEquals(xconstructor.getElementName(), new String("X"));
+		checkElementOffset((CElement)xconstructor);
 		assertTrue (xconstructor.isConstructor());
 		checkLineNumbers((CElement)xconstructor, 46, 48);
 
@@ -247,6 +260,7 @@
 		ArrayList xMethodDeclarations = classX.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
 		IMethodDeclaration xDoNothing = (IMethodDeclaration) xMethodDeclarations.get(0);
 		assertEquals(xDoNothing.getElementName(), new String("doNothing"));
+		checkElementOffset((CElement)xDoNothing);
 		assertEquals(xDoNothing.getReturnType(), new String("int"));						
 		checkLineNumbers((CElement)xDoNothing, 50, 50);
 	}
@@ -256,34 +270,43 @@
 		ArrayList nsEnums = namespace.getChildrenOfType(ICElement.C_ENUMERATION);		
 		IEnumeration enum = (IEnumeration) nsEnums.get(0);
 		assertEquals(enum.getElementName(), new String(""));
+		checkElementOffset((CElement)enum);
 		checkLineNumbers((CElement)enum, 57, 61);
 	
 		// 	enum ---> enumerator: first
 		ArrayList enumEnumerators = enum.getChildrenOfType(ICElement.C_ENUMERATOR);
 		IEnumerator first = (IEnumerator) enumEnumerators.get(0);
 		assertEquals(first.getElementName(), new String("first"));
+		checkElementOffset((CElement)first);
 		// 	enum ---> enumerator: second
 		IEnumerator second = (IEnumerator) enumEnumerators.get(1);
 		assertEquals(second.getElementName(), new String("second"));
+		checkElementOffset((CElement)second);
 		// 	enum ---> enumerator: third
 		IEnumerator third = (IEnumerator) enumEnumerators.get(2);
+		checkElementOffset((CElement)third);
 		assertEquals(third.getElementName(), new String("third"));		
-
+		checkElementOffset((CElement)third);
+		
 		// MyPackage ---> enum: MyEnum
 		IEnumeration myEnum = (IEnumeration) nsEnums.get(1);
 		assertEquals(myEnum.getElementName(), new String("MyEnum"));
+		checkElementOffset((CElement)myEnum);
 		checkLineNumbers((CElement)myEnum, 64, 67);
 	
 		// 	enum ---> enumerator: first
 		ArrayList myEnumEnumerators = myEnum.getChildrenOfType(ICElement.C_ENUMERATOR);
 		IEnumerator f = (IEnumerator) myEnumEnumerators.get(0);
 		assertEquals(f.getElementName(), new String("f"));
+		checkElementOffset((CElement)f);
 		// 	enum ---> enumerator: second
 		IEnumerator s = (IEnumerator) myEnumEnumerators.get(1);
 		assertEquals(s.getElementName(), new String("s"));
+		checkElementOffset((CElement)s);
 		// 	enum ---> enumerator: third
 		IEnumerator t = (IEnumerator) myEnumEnumerators.get(2);
 		assertEquals(t.getElementName(), new String("t"));
+		checkElementOffset((CElement)t);
 	}
 
 	private void checkVariables(IParent namespace){
@@ -291,24 +314,28 @@
 		ArrayList nsVars = namespace.getChildrenOfType(ICElement.C_VARIABLE);
 		IVariable var1 = (IVariable) nsVars.get(0);
 		assertEquals(var1.getElementName(), new String("v"));
+		checkElementOffset((CElement)var1);
 		assertEquals(var1.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)var1, 71, 71);
 		
 		// MyPackage ---> unsigned long vuLong
 		IVariable var2 = (IVariable) nsVars.get(1);
 		assertEquals(var2.getElementName(), new String("vuLong"));
+		checkElementOffset((CElement)var2);
 		assertEquals(var2.getTypeName(), new String("unsigned long int"));
 		checkLineNumbers((CElement)var2, 73, 73);
 
 		// MyPackage ---> unsigned short vuShort
 		IVariable var3 = (IVariable) nsVars.get(2);
 		assertEquals(var3.getElementName(), new String("vuShort"));
+		checkElementOffset((CElement)var3);
 		assertEquals(var3.getTypeName(), new String("unsigned short int"));
 		checkLineNumbers((CElement)var3, 75, 75);
 		
 		// MyPackage ---> function pointer: orig_malloc_hook
 		IVariable vDecl2 = (IVariable) nsVars.get(3);
 		assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook"));
+		checkElementOffset((CElement)vDecl2);
 		assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)"));
 		checkLineNumbers((CElement)vDecl2, 81, 81);
 	}
@@ -318,6 +345,7 @@
 		ArrayList nsVarDecls = namespace.getChildrenOfType(ICElement.C_VARIABLE_DECLARATION);
 		IVariableDeclaration vDecl1 = (IVariableDeclaration) nsVarDecls.get(0);
 		assertEquals(vDecl1.getElementName(), new String("evar"));
+		checkElementOffset((CElement)vDecl1);
 		assertEquals(vDecl1.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)vDecl1, 79, 79);
 	}
@@ -328,12 +356,14 @@
 		//	MyPackage ---> function: void foo()
 		IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(0);
 		assertEquals(f1.getElementName(), new String("foo"));
+		checkElementOffset((CElement)f1);
 		assertEquals(f1.getReturnType(), new String("void"));
 		checkLineNumbers((CElement)f1, 85, 85);
 		
 		//	MyPackage ---> function: char* foo(int&, char**)
 		IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(1);
 		assertEquals(f2.getElementName(), new String("foo"));
+		checkElementOffset((CElement)f2);
 		assertEquals(f2.getReturnType(), new String("char*"));
 		checkLineNumbers((CElement)f2, 87, 88);
 		int fooNumOfParam = f2.getNumberOfParameters();
@@ -347,6 +377,7 @@
 		ArrayList nsFunctions = namespace.getChildrenOfType(ICElement.C_FUNCTION);
 		IFunction f3 = (IFunction) nsFunctions.get(0);		
 		assertEquals(f3.getElementName(), new String("boo"));
+		checkElementOffset((CElement)f3);
 		assertEquals(f3.getReturnType(), new String("void"));
 		checkLineNumbers((CElement)f3, 90, 92);
 	}
@@ -356,10 +387,12 @@
 		ArrayList nsStructs = namespace.getChildrenOfType(ICElement.C_STRUCT);
 		IStructure struct1 = (IStructure) nsStructs.get(0);
 		assertEquals(struct1.getElementName(), new String ("MyStruct"));
+		checkElementOffset((CElement)struct1);
 		checkLineNumbers((CElement)struct1, 95, 97);
 		ArrayList struct1Fields = struct1.getChildrenOfType(ICElement.C_FIELD);
 		IField field1 = (IField) struct1Fields.get(0);
 		assertEquals(field1.getElementName(), new String("sint"));
+		checkElementOffset((CElement)field1);
 		assertEquals(field1.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)field1, 96, 96);
 		
@@ -369,10 +402,12 @@
 		// struct no name
 		IStructure struct2 = (IStructure) nsStructs.get(1);
 		assertEquals(struct2.getElementName(), new String (""));
+		checkElementOffset((CElement)struct2);
 		checkLineNumbers((CElement)struct2, 101, 103);
 		ArrayList struct2Fields = struct2.getChildrenOfType(ICElement.C_FIELD);
 		IField field2 = (IField) struct2Fields.get(0);
 		assertEquals(field2.getElementName(), new String("ss"));
+		checkElementOffset((CElement)field2);
 		assertEquals(field2.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)field2, 102, 102);
 		if(field2.getVisibility() != ASTAccessVisibility.PUBLIC)
@@ -382,10 +417,12 @@
 		ArrayList nsTypeDefs = namespace.getChildrenOfType(ICElement.C_TYPEDEF);
 		ITypeDef td1 = (ITypeDef) nsTypeDefs.get(0);
 		assertEquals(td1.getElementName(), new String ("myStruct"));
+		checkElementOffset((CElement)td1);
 		assertEquals(td1.getTypeName(), new String ("struct MyStruct"));
 		checkLineNumbers((CElement)td1, 99, 99);
 		ITypeDef td2 = (ITypeDef) nsTypeDefs.get(1);
 		assertEquals(td2.getElementName(), new String ("myTypedef"));
+		checkElementOffset((CElement)td2);
 		assertEquals(td2.getTypeName(), new String (""));
 		checkLineNumbers((CElement)td2, 101, 103);
 
@@ -393,10 +430,12 @@
 		ArrayList nsUnions = namespace.getChildrenOfType(ICElement.C_UNION);
 		IStructure u0 = (IStructure) nsUnions.get(0);
 		assertEquals(u0.getElementName(), new String("U"));		
+		checkElementOffset((CElement)u0);
 		checkLineNumbers((CElement)u0, 105, 107);
 		ArrayList u0Fields = u0.getChildrenOfType(ICElement.C_FIELD);
 		IField field3 = (IField) u0Fields.get(0);
 		assertEquals(field3.getElementName(), new String("U1"));
+		checkElementOffset((CElement)field3);
 		assertEquals(field3.getTypeName(), new String("int"));
 		checkLineNumbers((CElement)field3, 106, 106);
 		if(field3.getVisibility() != ASTAccessVisibility.PUBLIC)
@@ -408,6 +447,7 @@
 		ArrayList functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
 		FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0);
 		assertEquals(ft.getElementName(), new String("aTemplatedFunction"));
+		checkElementOffset((CElement)ft);
 		String sig = ft.getTemplateSignature();
 		assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A"));
 		checkLineNumbers((CElement)ft, 112, 113);
@@ -419,6 +459,7 @@
 		ArrayList methodTemplates = enclosingClass.getChildrenOfType(ICElement.C_TEMPLATE_METHOD);
 		MethodTemplate mt = (MethodTemplate)methodTemplates.get(0);
 		assertEquals(mt.getElementName(), new String("aTemplatedMethod"));
+		checkElementOffset((CElement)mt);
 		assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A"));
 		checkLineNumbers((CElement)mt, 118, 119);
 		assertEquals(mt.getVisibility(), ASTAccessVisibility.PUBLIC);
@@ -427,6 +468,7 @@
 		ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);
 		StructureTemplate ct = (StructureTemplate)classTemplates.get(0);
 		assertEquals(ct.getElementName(), new String("myarray"));
+		checkElementOffset((CElement)ct);
 		assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>"));
 		checkLineNumbers((CElement)ct, 122, 123);
 
@@ -434,6 +476,7 @@
 		ArrayList structTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT);
 		StructureTemplate st = (StructureTemplate)structTemplates.get(0);
 		assertEquals(st.getElementName(), new String("mystruct"));
+		checkElementOffset((CElement)st);
 		assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>"));
 		checkLineNumbers((CElement)st, 125, 126);
 
@@ -443,6 +486,7 @@
 //		ArrayList variableTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE);
 //		VariableTemplate vt = (VariableTemplate)variableTemplates.get(0);
 //		assertEquals(vt.getElementName(), new String("default_alloc_template<__threads,__inst>::_S_start_free"));
+//		checkElementOffset((CElement)mac1);
 //		assertEquals(vt.getTemplateSignature(), new String("default_alloc_template<__threads,__inst>::_S_start_free<bool, int> : char*"));
 //		checkLineNumbers((CElement)vt, 128, 129);
 	}
@@ -452,6 +496,7 @@
 		ArrayList variables = tu.getChildrenOfType(ICElement.C_VARIABLE);
 		IVariable arrayVar = (IVariable) variables.get(0);
 		assertEquals(arrayVar.getElementName(), new String("myArray"));
+		checkElementOffset((CElement)arrayVar);
 		assertEquals(arrayVar.getTypeName(), new String("int[][]"));
 		checkLineNumbers((CElement)arrayVar, 133, 133);
 		
@@ -459,6 +504,7 @@
 		ArrayList functions = tu.getChildrenOfType(ICElement.C_FUNCTION);
 		IFunction mainFunction  = (IFunction) functions.get(0);
 		assertEquals(mainFunction.getElementName(), new String("main"));
+		checkElementOffset((CElement)mainFunction);
 		assertEquals(mainFunction.getReturnType(), new String("int"));
 		checkLineNumbers((CElement)mainFunction, 134, 136);
 		int NumOfParam = mainFunction.getNumberOfParameters();
@@ -474,5 +520,20 @@
 //		assertEquals(startLine, element.getStartLine());
 //		assertEquals(endLine, element.getEndLine());		 		
 	}
-
+	private void checkElementOffset(CElement element){
+		if(element.getElementName().length() > 0 ){
+			assertTrue (element.getStartPos() <= element.getIdStartPos());
+			assertEquals (element.getIdLength(), element.getElementName().length());
+		}
+		else{
+			assertEquals (element.getStartPos(), element.getIdStartPos());
+			if(element instanceof ITypeDef)
+				assertEquals ( element.getIdLength(), ((ITypeDef)element).getTypeName().length());
+			else if(element instanceof IEnumeration)
+				assertEquals ( element.getIdLength(), ((IEnumeration)element).getTypeName().length());
+			else if(element instanceof IStructure)
+				assertEquals ( element.getIdLength(), ((IStructure)element).getTypeName().length());
+		}
+			
+	}
 }

Back to the top