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

Bug fixes in CModelBuilder

This commit is contained in:
Hoda Amer 2003-10-22 17:46:50 +00:00
parent 34751c2e72
commit 1f8b4f48a6
4 changed files with 95 additions and 18 deletions

View file

@ -1,3 +1,6 @@
2003-10-22 Hoda Amer
Added offset checking in CModelElementsTest
2003-10-21 John Camelon 2003-10-21 John Camelon
Moved testBug40007() from ASTFailedTests to QuickParseASTTests. Moved testBug40007() from ASTFailedTests to QuickParseASTTests.
Added QuickParseASTTests::testBug40759(). Added QuickParseASTTests::testBug40759().

View file

@ -119,6 +119,7 @@ public class CModelElementsTests extends TestCase {
ArrayList tuPackages = tu.getChildrenOfType(ICElement.C_NAMESPACE); ArrayList tuPackages = tu.getChildrenOfType(ICElement.C_NAMESPACE);
INamespace namespace = (INamespace) tuPackages.get(0); INamespace namespace = (INamespace) tuPackages.get(0);
assertEquals(namespace.getElementName(), new String("MyPackage")); assertEquals(namespace.getElementName(), new String("MyPackage"));
checkElementOffset((CElement)namespace);
checkLineNumbers((CElement)namespace, 8, 130); checkLineNumbers((CElement)namespace, 8, 130);
checkClass(namespace); checkClass(namespace);
@ -141,6 +142,7 @@ public class CModelElementsTests extends TestCase {
ArrayList tuIncludes = tu.getChildrenOfType(ICElement.C_INCLUDE); ArrayList tuIncludes = tu.getChildrenOfType(ICElement.C_INCLUDE);
IInclude inc1 = (IInclude) tuIncludes.get(0); IInclude inc1 = (IInclude) tuIncludes.get(0);
assertEquals(inc1.getElementName(), new String("stdio.h")); assertEquals(inc1.getElementName(), new String("stdio.h"));
checkElementOffset((CElement)inc1);
checkLineNumbers((CElement)inc1, 2, 2); checkLineNumbers((CElement)inc1, 2, 2);
} }
@ -148,6 +150,7 @@ public class CModelElementsTests extends TestCase {
ArrayList tuMacros = tu.getChildrenOfType(ICElement.C_MACRO); ArrayList tuMacros = tu.getChildrenOfType(ICElement.C_MACRO);
IMacro mac1 = (IMacro) tuMacros.get(0); IMacro mac1 = (IMacro) tuMacros.get(0);
assertEquals(mac1.getElementName(), new String("PRINT")); assertEquals(mac1.getElementName(), new String("PRINT"));
checkElementOffset((CElement)mac1);
checkLineNumbers((CElement)mac1, 5, 5); checkLineNumbers((CElement)mac1, 5, 5);
} }
@ -156,12 +159,14 @@ public class CModelElementsTests extends TestCase {
ArrayList nsClasses = namespace.getChildrenOfType(ICElement.C_CLASS); ArrayList nsClasses = namespace.getChildrenOfType(ICElement.C_CLASS);
IStructure classHello = (IStructure) nsClasses.get(0); IStructure classHello = (IStructure) nsClasses.get(0);
assertEquals(classHello.getElementName(), new String("Hello")); assertEquals(classHello.getElementName(), new String("Hello"));
checkElementOffset((CElement)classHello);
checkLineNumbers((CElement)classHello, 12, 53); checkLineNumbers((CElement)classHello, 12, 53);
// Hello --> field: int x // Hello --> field: int x
ArrayList helloFields = classHello.getChildrenOfType(ICElement.C_FIELD); ArrayList helloFields = classHello.getChildrenOfType(ICElement.C_FIELD);
IField intX = (IField) helloFields.get(0); IField intX = (IField) helloFields.get(0);
assertEquals(intX.getElementName(), new String("x")); assertEquals(intX.getElementName(), new String("x"));
checkElementOffset((CElement)intX);
assertEquals(intX.getTypeName(), new String("int")); assertEquals(intX.getTypeName(), new String("int"));
checkLineNumbers((CElement)intX, 17, 17); checkLineNumbers((CElement)intX, 17, 17);
@ -173,6 +178,7 @@ public class CModelElementsTests extends TestCase {
ArrayList helloMethods = classHello.getChildrenOfType(ICElement.C_METHOD); ArrayList helloMethods = classHello.getChildrenOfType(ICElement.C_METHOD);
IMethod setX = (IMethod) helloMethods.get(0); IMethod setX = (IMethod) helloMethods.get(0);
assertEquals(setX.getElementName(), new String("setX")); assertEquals(setX.getElementName(), new String("setX"));
checkElementOffset((CElement)setX);
assertEquals(setX.getReturnType(), new String("void")); assertEquals(setX.getReturnType(), new String("void"));
checkLineNumbers((CElement)setX, 19, 22); checkLineNumbers((CElement)setX, 19, 22);
int setXNumOfParam = setX.getNumberOfParameters(); int setXNumOfParam = setX.getNumberOfParameters();
@ -190,6 +196,7 @@ public class CModelElementsTests extends TestCase {
ArrayList helloNamespaces = classHello.getChildrenOfType(ICElement.C_NAMESPACE); ArrayList helloNamespaces = classHello.getChildrenOfType(ICElement.C_NAMESPACE);
INamespace myNestedPackage = (INamespace) helloNamespaces.get(0); INamespace myNestedPackage = (INamespace) helloNamespaces.get(0);
assertEquals(myNestedPackage.getElementName(), new String("MyNestedPackage")); assertEquals(myNestedPackage.getElementName(), new String("MyNestedPackage"));
checkElementOffset((CElement)myNestedPackage);
checkLineNumbers((CElement)myNestedPackage, 25, 52); checkLineNumbers((CElement)myNestedPackage, 25, 52);
checkParentNestedClass(myNestedPackage); checkParentNestedClass(myNestedPackage);
@ -200,18 +207,21 @@ public class CModelElementsTests extends TestCase {
ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS); ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);
IStructure classY = (IStructure) nestedClasses.get(0); IStructure classY = (IStructure) nestedClasses.get(0);
assertEquals(classY.getElementName(), new String("Y")); assertEquals(classY.getElementName(), new String("Y"));
checkElementOffset((CElement)classY);
checkLineNumbers((CElement)classY, 28, 35); checkLineNumbers((CElement)classY, 28, 35);
// Y ---> constructor: Y // Y ---> constructor: Y
ArrayList yMethods = classY.getChildrenOfType(ICElement.C_METHOD_DECLARATION); ArrayList yMethods = classY.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
IMethodDeclaration constructor = (IMethodDeclaration) yMethods.get(0); IMethodDeclaration constructor = (IMethodDeclaration) yMethods.get(0);
assertEquals(constructor.getElementName(), new String("Y")); assertEquals(constructor.getElementName(), new String("Y"));
checkElementOffset((CElement)constructor);
assertTrue (constructor.isConstructor()); assertTrue (constructor.isConstructor());
checkLineNumbers((CElement)constructor, 32, 32); checkLineNumbers((CElement)constructor, 32, 32);
// Y ---> destructor: ~Y // Y ---> destructor: ~Y
IMethodDeclaration destructor = (IMethodDeclaration) yMethods.get(1); IMethodDeclaration destructor = (IMethodDeclaration) yMethods.get(1);
assertEquals(destructor.getElementName(), new String("~Y")); assertEquals(destructor.getElementName(), new String("~Y"));
checkElementOffset((CElement)destructor);
assertTrue (destructor.isDestructor()); assertTrue (destructor.isDestructor());
checkLineNumbers((CElement)destructor, 34, 34); checkLineNumbers((CElement)destructor, 34, 34);
// TODO: check for virtual on destructors // TODO: check for virtual on destructors
@ -223,6 +233,7 @@ public class CModelElementsTests extends TestCase {
ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS); ArrayList nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);
IStructure classX = (IStructure) nestedClasses.get(1); IStructure classX = (IStructure) nestedClasses.get(1);
assertEquals(classX.getElementName(), new String("X")); assertEquals(classX.getElementName(), new String("X"));
checkElementOffset((CElement)classX);
checkLineNumbers((CElement)classX, 38, 51); checkLineNumbers((CElement)classX, 38, 51);
// TODO : Check for base classes here // TODO : Check for base classes here
@ -230,6 +241,7 @@ public class CModelElementsTests extends TestCase {
ArrayList xFieldChildren = classX.getChildrenOfType(ICElement.C_FIELD); ArrayList xFieldChildren = classX.getChildrenOfType(ICElement.C_FIELD);
IField bB = (IField) xFieldChildren.get(0); IField bB = (IField) xFieldChildren.get(0);
assertEquals(bB.getElementName(), new String("b")); assertEquals(bB.getElementName(), new String("b"));
checkElementOffset((CElement)bB);
assertEquals(bB.getTypeName(), new String("B")); assertEquals(bB.getTypeName(), new String("B"));
checkLineNumbers((CElement)bB, 42, 42); checkLineNumbers((CElement)bB, 42, 42);
ASTAccessVisibility bVisibility = bB.getVisibility(); ASTAccessVisibility bVisibility = bB.getVisibility();
@ -240,6 +252,7 @@ public class CModelElementsTests extends TestCase {
ArrayList xMethodChildren = classX.getChildrenOfType(ICElement.C_METHOD); ArrayList xMethodChildren = classX.getChildrenOfType(ICElement.C_METHOD);
IMethod xconstructor = (IMethod) xMethodChildren.get(0); IMethod xconstructor = (IMethod) xMethodChildren.get(0);
assertEquals(xconstructor.getElementName(), new String("X")); assertEquals(xconstructor.getElementName(), new String("X"));
checkElementOffset((CElement)xconstructor);
assertTrue (xconstructor.isConstructor()); assertTrue (xconstructor.isConstructor());
checkLineNumbers((CElement)xconstructor, 46, 48); checkLineNumbers((CElement)xconstructor, 46, 48);
@ -247,6 +260,7 @@ public class CModelElementsTests extends TestCase {
ArrayList xMethodDeclarations = classX.getChildrenOfType(ICElement.C_METHOD_DECLARATION); ArrayList xMethodDeclarations = classX.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
IMethodDeclaration xDoNothing = (IMethodDeclaration) xMethodDeclarations.get(0); IMethodDeclaration xDoNothing = (IMethodDeclaration) xMethodDeclarations.get(0);
assertEquals(xDoNothing.getElementName(), new String("doNothing")); assertEquals(xDoNothing.getElementName(), new String("doNothing"));
checkElementOffset((CElement)xDoNothing);
assertEquals(xDoNothing.getReturnType(), new String("int")); assertEquals(xDoNothing.getReturnType(), new String("int"));
checkLineNumbers((CElement)xDoNothing, 50, 50); checkLineNumbers((CElement)xDoNothing, 50, 50);
} }
@ -256,34 +270,43 @@ public class CModelElementsTests extends TestCase {
ArrayList nsEnums = namespace.getChildrenOfType(ICElement.C_ENUMERATION); ArrayList nsEnums = namespace.getChildrenOfType(ICElement.C_ENUMERATION);
IEnumeration enum = (IEnumeration) nsEnums.get(0); IEnumeration enum = (IEnumeration) nsEnums.get(0);
assertEquals(enum.getElementName(), new String("")); assertEquals(enum.getElementName(), new String(""));
checkElementOffset((CElement)enum);
checkLineNumbers((CElement)enum, 57, 61); checkLineNumbers((CElement)enum, 57, 61);
// enum ---> enumerator: first // enum ---> enumerator: first
ArrayList enumEnumerators = enum.getChildrenOfType(ICElement.C_ENUMERATOR); ArrayList enumEnumerators = enum.getChildrenOfType(ICElement.C_ENUMERATOR);
IEnumerator first = (IEnumerator) enumEnumerators.get(0); IEnumerator first = (IEnumerator) enumEnumerators.get(0);
assertEquals(first.getElementName(), new String("first")); assertEquals(first.getElementName(), new String("first"));
checkElementOffset((CElement)first);
// enum ---> enumerator: second // enum ---> enumerator: second
IEnumerator second = (IEnumerator) enumEnumerators.get(1); IEnumerator second = (IEnumerator) enumEnumerators.get(1);
assertEquals(second.getElementName(), new String("second")); assertEquals(second.getElementName(), new String("second"));
checkElementOffset((CElement)second);
// enum ---> enumerator: third // enum ---> enumerator: third
IEnumerator third = (IEnumerator) enumEnumerators.get(2); IEnumerator third = (IEnumerator) enumEnumerators.get(2);
checkElementOffset((CElement)third);
assertEquals(third.getElementName(), new String("third")); assertEquals(third.getElementName(), new String("third"));
checkElementOffset((CElement)third);
// MyPackage ---> enum: MyEnum // MyPackage ---> enum: MyEnum
IEnumeration myEnum = (IEnumeration) nsEnums.get(1); IEnumeration myEnum = (IEnumeration) nsEnums.get(1);
assertEquals(myEnum.getElementName(), new String("MyEnum")); assertEquals(myEnum.getElementName(), new String("MyEnum"));
checkElementOffset((CElement)myEnum);
checkLineNumbers((CElement)myEnum, 64, 67); checkLineNumbers((CElement)myEnum, 64, 67);
// enum ---> enumerator: first // enum ---> enumerator: first
ArrayList myEnumEnumerators = myEnum.getChildrenOfType(ICElement.C_ENUMERATOR); ArrayList myEnumEnumerators = myEnum.getChildrenOfType(ICElement.C_ENUMERATOR);
IEnumerator f = (IEnumerator) myEnumEnumerators.get(0); IEnumerator f = (IEnumerator) myEnumEnumerators.get(0);
assertEquals(f.getElementName(), new String("f")); assertEquals(f.getElementName(), new String("f"));
checkElementOffset((CElement)f);
// enum ---> enumerator: second // enum ---> enumerator: second
IEnumerator s = (IEnumerator) myEnumEnumerators.get(1); IEnumerator s = (IEnumerator) myEnumEnumerators.get(1);
assertEquals(s.getElementName(), new String("s")); assertEquals(s.getElementName(), new String("s"));
checkElementOffset((CElement)s);
// enum ---> enumerator: third // enum ---> enumerator: third
IEnumerator t = (IEnumerator) myEnumEnumerators.get(2); IEnumerator t = (IEnumerator) myEnumEnumerators.get(2);
assertEquals(t.getElementName(), new String("t")); assertEquals(t.getElementName(), new String("t"));
checkElementOffset((CElement)t);
} }
private void checkVariables(IParent namespace){ private void checkVariables(IParent namespace){
@ -291,24 +314,28 @@ public class CModelElementsTests extends TestCase {
ArrayList nsVars = namespace.getChildrenOfType(ICElement.C_VARIABLE); ArrayList nsVars = namespace.getChildrenOfType(ICElement.C_VARIABLE);
IVariable var1 = (IVariable) nsVars.get(0); IVariable var1 = (IVariable) nsVars.get(0);
assertEquals(var1.getElementName(), new String("v")); assertEquals(var1.getElementName(), new String("v"));
checkElementOffset((CElement)var1);
assertEquals(var1.getTypeName(), new String("int")); assertEquals(var1.getTypeName(), new String("int"));
checkLineNumbers((CElement)var1, 71, 71); checkLineNumbers((CElement)var1, 71, 71);
// MyPackage ---> unsigned long vuLong // MyPackage ---> unsigned long vuLong
IVariable var2 = (IVariable) nsVars.get(1); IVariable var2 = (IVariable) nsVars.get(1);
assertEquals(var2.getElementName(), new String("vuLong")); assertEquals(var2.getElementName(), new String("vuLong"));
checkElementOffset((CElement)var2);
assertEquals(var2.getTypeName(), new String("unsigned long int")); assertEquals(var2.getTypeName(), new String("unsigned long int"));
checkLineNumbers((CElement)var2, 73, 73); checkLineNumbers((CElement)var2, 73, 73);
// MyPackage ---> unsigned short vuShort // MyPackage ---> unsigned short vuShort
IVariable var3 = (IVariable) nsVars.get(2); IVariable var3 = (IVariable) nsVars.get(2);
assertEquals(var3.getElementName(), new String("vuShort")); assertEquals(var3.getElementName(), new String("vuShort"));
checkElementOffset((CElement)var3);
assertEquals(var3.getTypeName(), new String("unsigned short int")); assertEquals(var3.getTypeName(), new String("unsigned short int"));
checkLineNumbers((CElement)var3, 75, 75); checkLineNumbers((CElement)var3, 75, 75);
// MyPackage ---> function pointer: orig_malloc_hook // MyPackage ---> function pointer: orig_malloc_hook
IVariable vDecl2 = (IVariable) nsVars.get(3); IVariable vDecl2 = (IVariable) nsVars.get(3);
assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook")); assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook"));
checkElementOffset((CElement)vDecl2);
assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)")); assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, size_t)"));
checkLineNumbers((CElement)vDecl2, 81, 81); checkLineNumbers((CElement)vDecl2, 81, 81);
} }
@ -318,6 +345,7 @@ public class CModelElementsTests extends TestCase {
ArrayList nsVarDecls = namespace.getChildrenOfType(ICElement.C_VARIABLE_DECLARATION); ArrayList nsVarDecls = namespace.getChildrenOfType(ICElement.C_VARIABLE_DECLARATION);
IVariableDeclaration vDecl1 = (IVariableDeclaration) nsVarDecls.get(0); IVariableDeclaration vDecl1 = (IVariableDeclaration) nsVarDecls.get(0);
assertEquals(vDecl1.getElementName(), new String("evar")); assertEquals(vDecl1.getElementName(), new String("evar"));
checkElementOffset((CElement)vDecl1);
assertEquals(vDecl1.getTypeName(), new String("int")); assertEquals(vDecl1.getTypeName(), new String("int"));
checkLineNumbers((CElement)vDecl1, 79, 79); checkLineNumbers((CElement)vDecl1, 79, 79);
} }
@ -328,12 +356,14 @@ public class CModelElementsTests extends TestCase {
// MyPackage ---> function: void foo() // MyPackage ---> function: void foo()
IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(0); IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(0);
assertEquals(f1.getElementName(), new String("foo")); assertEquals(f1.getElementName(), new String("foo"));
checkElementOffset((CElement)f1);
assertEquals(f1.getReturnType(), new String("void")); assertEquals(f1.getReturnType(), new String("void"));
checkLineNumbers((CElement)f1, 85, 85); checkLineNumbers((CElement)f1, 85, 85);
// MyPackage ---> function: char* foo(int&, char**) // MyPackage ---> function: char* foo(int&, char**)
IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(1); IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(1);
assertEquals(f2.getElementName(), new String("foo")); assertEquals(f2.getElementName(), new String("foo"));
checkElementOffset((CElement)f2);
assertEquals(f2.getReturnType(), new String("char*")); assertEquals(f2.getReturnType(), new String("char*"));
checkLineNumbers((CElement)f2, 87, 88); checkLineNumbers((CElement)f2, 87, 88);
int fooNumOfParam = f2.getNumberOfParameters(); int fooNumOfParam = f2.getNumberOfParameters();
@ -347,6 +377,7 @@ public class CModelElementsTests extends TestCase {
ArrayList nsFunctions = namespace.getChildrenOfType(ICElement.C_FUNCTION); ArrayList nsFunctions = namespace.getChildrenOfType(ICElement.C_FUNCTION);
IFunction f3 = (IFunction) nsFunctions.get(0); IFunction f3 = (IFunction) nsFunctions.get(0);
assertEquals(f3.getElementName(), new String("boo")); assertEquals(f3.getElementName(), new String("boo"));
checkElementOffset((CElement)f3);
assertEquals(f3.getReturnType(), new String("void")); assertEquals(f3.getReturnType(), new String("void"));
checkLineNumbers((CElement)f3, 90, 92); checkLineNumbers((CElement)f3, 90, 92);
} }
@ -356,10 +387,12 @@ public class CModelElementsTests extends TestCase {
ArrayList nsStructs = namespace.getChildrenOfType(ICElement.C_STRUCT); ArrayList nsStructs = namespace.getChildrenOfType(ICElement.C_STRUCT);
IStructure struct1 = (IStructure) nsStructs.get(0); IStructure struct1 = (IStructure) nsStructs.get(0);
assertEquals(struct1.getElementName(), new String ("MyStruct")); assertEquals(struct1.getElementName(), new String ("MyStruct"));
checkElementOffset((CElement)struct1);
checkLineNumbers((CElement)struct1, 95, 97); checkLineNumbers((CElement)struct1, 95, 97);
ArrayList struct1Fields = struct1.getChildrenOfType(ICElement.C_FIELD); ArrayList struct1Fields = struct1.getChildrenOfType(ICElement.C_FIELD);
IField field1 = (IField) struct1Fields.get(0); IField field1 = (IField) struct1Fields.get(0);
assertEquals(field1.getElementName(), new String("sint")); assertEquals(field1.getElementName(), new String("sint"));
checkElementOffset((CElement)field1);
assertEquals(field1.getTypeName(), new String("int")); assertEquals(field1.getTypeName(), new String("int"));
checkLineNumbers((CElement)field1, 96, 96); checkLineNumbers((CElement)field1, 96, 96);
@ -369,10 +402,12 @@ public class CModelElementsTests extends TestCase {
// struct no name // struct no name
IStructure struct2 = (IStructure) nsStructs.get(1); IStructure struct2 = (IStructure) nsStructs.get(1);
assertEquals(struct2.getElementName(), new String ("")); assertEquals(struct2.getElementName(), new String (""));
checkElementOffset((CElement)struct2);
checkLineNumbers((CElement)struct2, 101, 103); checkLineNumbers((CElement)struct2, 101, 103);
ArrayList struct2Fields = struct2.getChildrenOfType(ICElement.C_FIELD); ArrayList struct2Fields = struct2.getChildrenOfType(ICElement.C_FIELD);
IField field2 = (IField) struct2Fields.get(0); IField field2 = (IField) struct2Fields.get(0);
assertEquals(field2.getElementName(), new String("ss")); assertEquals(field2.getElementName(), new String("ss"));
checkElementOffset((CElement)field2);
assertEquals(field2.getTypeName(), new String("int")); assertEquals(field2.getTypeName(), new String("int"));
checkLineNumbers((CElement)field2, 102, 102); checkLineNumbers((CElement)field2, 102, 102);
if(field2.getVisibility() != ASTAccessVisibility.PUBLIC) if(field2.getVisibility() != ASTAccessVisibility.PUBLIC)
@ -382,10 +417,12 @@ public class CModelElementsTests extends TestCase {
ArrayList nsTypeDefs = namespace.getChildrenOfType(ICElement.C_TYPEDEF); ArrayList nsTypeDefs = namespace.getChildrenOfType(ICElement.C_TYPEDEF);
ITypeDef td1 = (ITypeDef) nsTypeDefs.get(0); ITypeDef td1 = (ITypeDef) nsTypeDefs.get(0);
assertEquals(td1.getElementName(), new String ("myStruct")); assertEquals(td1.getElementName(), new String ("myStruct"));
checkElementOffset((CElement)td1);
assertEquals(td1.getTypeName(), new String ("struct MyStruct")); assertEquals(td1.getTypeName(), new String ("struct MyStruct"));
checkLineNumbers((CElement)td1, 99, 99); checkLineNumbers((CElement)td1, 99, 99);
ITypeDef td2 = (ITypeDef) nsTypeDefs.get(1); ITypeDef td2 = (ITypeDef) nsTypeDefs.get(1);
assertEquals(td2.getElementName(), new String ("myTypedef")); assertEquals(td2.getElementName(), new String ("myTypedef"));
checkElementOffset((CElement)td2);
assertEquals(td2.getTypeName(), new String ("")); assertEquals(td2.getTypeName(), new String (""));
checkLineNumbers((CElement)td2, 101, 103); checkLineNumbers((CElement)td2, 101, 103);
@ -393,10 +430,12 @@ public class CModelElementsTests extends TestCase {
ArrayList nsUnions = namespace.getChildrenOfType(ICElement.C_UNION); ArrayList nsUnions = namespace.getChildrenOfType(ICElement.C_UNION);
IStructure u0 = (IStructure) nsUnions.get(0); IStructure u0 = (IStructure) nsUnions.get(0);
assertEquals(u0.getElementName(), new String("U")); assertEquals(u0.getElementName(), new String("U"));
checkElementOffset((CElement)u0);
checkLineNumbers((CElement)u0, 105, 107); checkLineNumbers((CElement)u0, 105, 107);
ArrayList u0Fields = u0.getChildrenOfType(ICElement.C_FIELD); ArrayList u0Fields = u0.getChildrenOfType(ICElement.C_FIELD);
IField field3 = (IField) u0Fields.get(0); IField field3 = (IField) u0Fields.get(0);
assertEquals(field3.getElementName(), new String("U1")); assertEquals(field3.getElementName(), new String("U1"));
checkElementOffset((CElement)field3);
assertEquals(field3.getTypeName(), new String("int")); assertEquals(field3.getTypeName(), new String("int"));
checkLineNumbers((CElement)field3, 106, 106); checkLineNumbers((CElement)field3, 106, 106);
if(field3.getVisibility() != ASTAccessVisibility.PUBLIC) if(field3.getVisibility() != ASTAccessVisibility.PUBLIC)
@ -408,6 +447,7 @@ public class CModelElementsTests extends TestCase {
ArrayList functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION); ArrayList functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0); FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0);
assertEquals(ft.getElementName(), new String("aTemplatedFunction")); assertEquals(ft.getElementName(), new String("aTemplatedFunction"));
checkElementOffset((CElement)ft);
String sig = ft.getTemplateSignature(); String sig = ft.getTemplateSignature();
assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A")); assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A"));
checkLineNumbers((CElement)ft, 112, 113); checkLineNumbers((CElement)ft, 112, 113);
@ -419,6 +459,7 @@ public class CModelElementsTests extends TestCase {
ArrayList methodTemplates = enclosingClass.getChildrenOfType(ICElement.C_TEMPLATE_METHOD); ArrayList methodTemplates = enclosingClass.getChildrenOfType(ICElement.C_TEMPLATE_METHOD);
MethodTemplate mt = (MethodTemplate)methodTemplates.get(0); MethodTemplate mt = (MethodTemplate)methodTemplates.get(0);
assertEquals(mt.getElementName(), new String("aTemplatedMethod")); assertEquals(mt.getElementName(), new String("aTemplatedMethod"));
checkElementOffset((CElement)mt);
assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A")); assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A"));
checkLineNumbers((CElement)mt, 118, 119); checkLineNumbers((CElement)mt, 118, 119);
assertEquals(mt.getVisibility(), ASTAccessVisibility.PUBLIC); assertEquals(mt.getVisibility(), ASTAccessVisibility.PUBLIC);
@ -427,6 +468,7 @@ public class CModelElementsTests extends TestCase {
ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS); ArrayList classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);
StructureTemplate ct = (StructureTemplate)classTemplates.get(0); StructureTemplate ct = (StructureTemplate)classTemplates.get(0);
assertEquals(ct.getElementName(), new String("myarray")); assertEquals(ct.getElementName(), new String("myarray"));
checkElementOffset((CElement)ct);
assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>")); assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>"));
checkLineNumbers((CElement)ct, 122, 123); checkLineNumbers((CElement)ct, 122, 123);
@ -434,6 +476,7 @@ public class CModelElementsTests extends TestCase {
ArrayList structTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT); ArrayList structTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT);
StructureTemplate st = (StructureTemplate)structTemplates.get(0); StructureTemplate st = (StructureTemplate)structTemplates.get(0);
assertEquals(st.getElementName(), new String("mystruct")); assertEquals(st.getElementName(), new String("mystruct"));
checkElementOffset((CElement)st);
assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>")); assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>"));
checkLineNumbers((CElement)st, 125, 126); checkLineNumbers((CElement)st, 125, 126);
@ -443,6 +486,7 @@ public class CModelElementsTests extends TestCase {
// ArrayList variableTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE); // ArrayList variableTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_VARIABLE);
// VariableTemplate vt = (VariableTemplate)variableTemplates.get(0); // VariableTemplate vt = (VariableTemplate)variableTemplates.get(0);
// assertEquals(vt.getElementName(), new String("default_alloc_template<__threads,__inst>::_S_start_free")); // 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*")); // assertEquals(vt.getTemplateSignature(), new String("default_alloc_template<__threads,__inst>::_S_start_free<bool, int> : char*"));
// checkLineNumbers((CElement)vt, 128, 129); // checkLineNumbers((CElement)vt, 128, 129);
} }
@ -452,6 +496,7 @@ public class CModelElementsTests extends TestCase {
ArrayList variables = tu.getChildrenOfType(ICElement.C_VARIABLE); ArrayList variables = tu.getChildrenOfType(ICElement.C_VARIABLE);
IVariable arrayVar = (IVariable) variables.get(0); IVariable arrayVar = (IVariable) variables.get(0);
assertEquals(arrayVar.getElementName(), new String("myArray")); assertEquals(arrayVar.getElementName(), new String("myArray"));
checkElementOffset((CElement)arrayVar);
assertEquals(arrayVar.getTypeName(), new String("int[][]")); assertEquals(arrayVar.getTypeName(), new String("int[][]"));
checkLineNumbers((CElement)arrayVar, 133, 133); checkLineNumbers((CElement)arrayVar, 133, 133);
@ -459,6 +504,7 @@ public class CModelElementsTests extends TestCase {
ArrayList functions = tu.getChildrenOfType(ICElement.C_FUNCTION); ArrayList functions = tu.getChildrenOfType(ICElement.C_FUNCTION);
IFunction mainFunction = (IFunction) functions.get(0); IFunction mainFunction = (IFunction) functions.get(0);
assertEquals(mainFunction.getElementName(), new String("main")); assertEquals(mainFunction.getElementName(), new String("main"));
checkElementOffset((CElement)mainFunction);
assertEquals(mainFunction.getReturnType(), new String("int")); assertEquals(mainFunction.getReturnType(), new String("int"));
checkLineNumbers((CElement)mainFunction, 134, 136); checkLineNumbers((CElement)mainFunction, 134, 136);
int NumOfParam = mainFunction.getNumberOfParameters(); int NumOfParam = mainFunction.getNumberOfParameters();
@ -474,5 +520,20 @@ public class CModelElementsTests extends TestCase {
// assertEquals(startLine, element.getStartLine()); // assertEquals(startLine, element.getStartLine());
// assertEquals(endLine, element.getEndLine()); // 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());
}
} }
}

View file

@ -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 2003-10-21 Alain Magloire
Moving the implementation of the ICPathEntry in the Core Model Moving the implementation of the ICPathEntry in the Core Model

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration; 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.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator; import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTField; import org.eclipse.cdt.core.parser.ast.IASTField;
@ -190,6 +191,7 @@ public class CModelBuilder {
if(declaration instanceof IASTAbstractTypeSpecifierDeclaration){ if(declaration instanceof IASTAbstractTypeSpecifierDeclaration){
IASTAbstractTypeSpecifierDeclaration abstractDeclaration = (IASTAbstractTypeSpecifierDeclaration)declaration ; IASTAbstractTypeSpecifierDeclaration abstractDeclaration = (IASTAbstractTypeSpecifierDeclaration)declaration ;
CElement element = createAbstractElement(parent, abstractDeclaration , true); CElement element = createAbstractElement(parent, abstractDeclaration , true);
if(element != null){
// set the element position // set the element position
element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset()); element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());
// set the template parameters // set the template parameters
@ -197,6 +199,7 @@ public class CModelBuilder {
ITemplate classTemplate = (ITemplate) element; ITemplate classTemplate = (ITemplate) element;
classTemplate.setTemplateParameterTypes(parameterTypes); classTemplate.setTemplateParameterTypes(parameterTypes);
} }
}
ITemplate template = null; ITemplate template = null;
template = (ITemplate) createSimpleElement(parent, declaration, true); template = (ITemplate) createSimpleElement(parent, declaration, true);
@ -239,6 +242,9 @@ public class CModelBuilder {
IASTDeclaration subDeclaration = (IASTDeclaration)j.next(); IASTDeclaration subDeclaration = (IASTDeclaration)j.next();
generateModelElements((Parent)classElement, subDeclaration); generateModelElements((Parent)classElement, subDeclaration);
} // end while j } // 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; return element;
@ -266,7 +272,7 @@ public class CModelBuilder {
// add to parent // add to parent
parent.addChild((CElement) element); parent.addChild((CElement) element);
// set position // 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()); element.setPos(inclusion.getStartingOffset(), inclusion.getEndingOffset() - inclusion.getStartingOffset());
this.newElements.put(element, element.getElementInfo()); this.newElements.put(element, element.getElementInfo());
@ -279,7 +285,7 @@ public class CModelBuilder {
// add to parent // add to parent
parent.addChild((CElement) element); parent.addChild((CElement) element);
// set position // 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()); element.setPos(macro.getStartingOffset(), macro.getEndingOffset() - macro.getStartingOffset());
this.newElements.put(element, element.getElementInfo()); this.newElements.put(element, element.getElementInfo());
@ -295,7 +301,8 @@ public class CModelBuilder {
Namespace element = new Namespace ((ICElement)parent, nsName ); Namespace element = new Namespace ((ICElement)parent, nsName );
// add to parent // add to parent
parent.addChild((ICElement)element); 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.setPos(nsDef.getStartingOffset(), nsDef.getEndingOffset() - nsDef.getStartingOffset());
element.setTypeName(type); element.setTypeName(type);
@ -319,7 +326,8 @@ public class CModelBuilder {
createEnumerator(element, enumDef); createEnumerator(element, enumDef);
} }
// set enumeration position // 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.setPos(enumSpecifier.getStartingOffset(), enumSpecifier.getEndingOffset() - enumSpecifier.getStartingOffset());
element.setTypeName(type); element.setTypeName(type);
@ -332,7 +340,7 @@ public class CModelBuilder {
// add to parent // add to parent
enum.addChild(element); enum.addChild(element);
// set enumerator position // 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()); element.setPos(enumDef.getStartingOffset(), enumDef.getEndingOffset() - enumDef.getStartingOffset());
this.newElements.put(element, element.getElementInfo()); this.newElements.put(element, element.getElementInfo());
@ -395,7 +403,8 @@ public class CModelBuilder {
// add to parent // add to parent
parent.addChild((ICElement) element); parent.addChild((ICElement) element);
// set element position // 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 ); element.setTypeName( type );
if(!isTemplate){ if(!isTemplate){
// set the element position // set the element position
@ -419,7 +428,7 @@ public class CModelBuilder {
parent.addChild((CElement)element); parent.addChild((CElement)element);
// set positions // set positions
element.setIdPos(typeDefDeclaration.getNameOffset(),name.length()); element.setIdPos(typeDefDeclaration.getNameOffset(), (typeDefDeclaration.getNameEndOffset() - typeDefDeclaration.getNameOffset()));
element.setPos(typeDefDeclaration.getStartingOffset(), typeDefDeclaration.getEndingOffset() - typeDefDeclaration.getStartingOffset()); element.setPos(typeDefDeclaration.getStartingOffset(), typeDefDeclaration.getEndingOffset() - typeDefDeclaration.getStartingOffset());
this.newElements.put(element, element.getElementInfo()); this.newElements.put(element, element.getElementInfo());
@ -472,7 +481,7 @@ public class CModelBuilder {
parent.addChild( element ); parent.addChild( element );
// set position // set position
element.setIdPos( varDeclaration.getNameOffset(), variableName.length() ); element.setIdPos( varDeclaration.getNameOffset(), (varDeclaration.getNameEndOffset() - varDeclaration.getNameOffset()) );
if(!isTemplate){ if(!isTemplate){
// set element position // set element position
element.setPos(varDeclaration.getStartingOffset(), varDeclaration.getEndingOffset() - varDeclaration.getStartingOffset()); element.setPos(varDeclaration.getStartingOffset(), varDeclaration.getEndingOffset() - varDeclaration.getStartingOffset());
@ -572,7 +581,7 @@ public class CModelBuilder {
parent.addChild( element ); parent.addChild( element );
// hook up the offsets // hook up the offsets
element.setIdPos( functionDeclaration.getNameOffset(), functionDeclaration.getNameEndOffset() - functionDeclaration.getNameOffset() ); element.setIdPos( functionDeclaration.getNameOffset(), (functionDeclaration.getNameEndOffset() - functionDeclaration.getNameOffset()) );
if(!isTemplate){ if(!isTemplate){
// set the element position // set the element position
element.setPos(functionDeclaration.getStartingOffset(), functionDeclaration.getEndingOffset() - functionDeclaration.getStartingOffset()); element.setPos(functionDeclaration.getStartingOffset(), functionDeclaration.getEndingOffset() - functionDeclaration.getStartingOffset());