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

bug 49990 - ASTUtil.getExpressionString( IASTExpression )

- created ASTUnaryIdExpression classes
- improved handling of POSTFIX_TYPENAME_TEMPLATEID expressions
- modified handling of initializer clause for new expressions
- expression toString() functions use ASTUtil
This commit is contained in:
Andrew Niefer 2004-06-07 19:25:24 +00:00
parent af881d96fc
commit 5a66875392
28 changed files with 1037 additions and 126 deletions

View file

@ -58,7 +58,7 @@ public class StructuralCModelElementsTests extends TestCase {
public static Test suite() {
TestSuite suite= new TestSuite(StructuralCModelElementsTests.class.getName());
suite.addTest(new StructuralCModelElementsTests("testCModelElements"));
suite.addTest(new StructuralCModelElementsTests("testCModelElements")); //$NON-NLS-1$
return suite;
}
@ -68,16 +68,16 @@ public class StructuralCModelElementsTests extends TestCase {
protected void setUp() throws Exception {
monitor = new NullProgressMonitor();
fCProject= CProjectHelper.createCCProject("TestProject1", "bin");
headerFile = fCProject.getProject().getFile("CModelElementsTest.h");
includedFile = fCProject.getProject().getFile("included.h");
fCProject= CProjectHelper.createCCProject("TestProject1", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
headerFile = fCProject.getProject().getFile("CModelElementsTest.h"); //$NON-NLS-1$
includedFile = fCProject.getProject().getFile("included.h"); //$NON-NLS-1$
if (!headerFile.exists()) {
try{
FileInputStream fileIn = new FileInputStream(
CTestPlugin.getDefault().getFileInPlugin(new Path("resources/cfiles/CModelElementsTestStart.h")));
CTestPlugin.getDefault().getFileInPlugin(new Path("resources/cfiles/CModelElementsTestStart.h"))); //$NON-NLS-1$
headerFile.create(fileIn,false, monitor);
FileInputStream includedFileIn = new FileInputStream(
CTestPlugin.getDefault().getFileInPlugin(new Path("resources/cfiles/included.h")));
CTestPlugin.getDefault().getFileInPlugin(new Path("resources/cfiles/included.h"))); //$NON-NLS-1$
includedFile.create(includedFileIn,false, monitor);
} catch (CoreException e) {
e.printStackTrace();
@ -110,7 +110,7 @@ public class StructuralCModelElementsTests extends TestCase {
// tu ---> namespace: MyPackage
List tuPackages = tu.getChildrenOfType(ICElement.C_NAMESPACE);
INamespace namespace = (INamespace) tuPackages.get(0);
assertEquals(namespace.getElementName(), new String("MyPackage"));
assertEquals(namespace.getElementName(), new String("MyPackage")); //$NON-NLS-1$
checkElementOffset((CElement)namespace);
checkLineNumbers((CElement)namespace, 8, 130);
checkClass(namespace);
@ -137,7 +137,7 @@ public class StructuralCModelElementsTests extends TestCase {
private void checkInclude(IParent tu) throws CModelException{
List tuIncludes = tu.getChildrenOfType(ICElement.C_INCLUDE);
IInclude inc1 = (IInclude) tuIncludes.get(0);
assertEquals(inc1.getElementName(), new String("included.h"));
assertEquals(inc1.getElementName(), new String("included.h")); //$NON-NLS-1$
checkElementOffset((CElement)inc1);
checkLineNumbers((CElement)inc1, 2, 2);
}
@ -145,7 +145,7 @@ public class StructuralCModelElementsTests extends TestCase {
private void checkMacro(IParent tu) throws CModelException{
List tuMacros = tu.getChildrenOfType(ICElement.C_MACRO);
IMacro mac1 = (IMacro) tuMacros.get(0);
assertEquals(mac1.getElementName(), new String("PRINT"));
assertEquals(mac1.getElementName(), new String("PRINT")); //$NON-NLS-1$
checkElementOffset((CElement)mac1);
checkLineNumbers((CElement)mac1, 5, 5);
}
@ -154,35 +154,35 @@ public class StructuralCModelElementsTests extends TestCase {
// MyPackage ---> class: Hello
List nsClasses = namespace.getChildrenOfType(ICElement.C_CLASS);
IStructure classHello = (IStructure) nsClasses.get(0);
assertEquals(classHello.getElementName(), new String("Hello"));
assertEquals(classHello.getElementName(), new String("Hello")); //$NON-NLS-1$
checkElementOffset((CElement)classHello);
checkLineNumbers((CElement)classHello, 12, 53);
// Hello --> field: int x
List helloFields = classHello.getChildrenOfType(ICElement.C_FIELD);
IField intX = (IField) helloFields.get(0);
assertEquals(intX.getElementName(), new String("x"));
assertEquals(intX.getElementName(), new String("x")); //$NON-NLS-1$
checkElementOffset((CElement)intX);
assertEquals(intX.getTypeName(), new String("int"));
assertEquals(intX.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)intX, 17, 17);
ASTAccessVisibility xVisibility = intX.getVisibility();
if (xVisibility != ASTAccessVisibility.PROTECTED)
fail("visibility should be protected!");
fail("visibility should be protected!"); //$NON-NLS-1$
// Hello ---> method: void setX(int X)
List helloMethods = classHello.getChildrenOfType(ICElement.C_METHOD);
IMethod setX = (IMethod) helloMethods.get(0);
assertEquals(setX.getElementName(), new String("setX"));
assertEquals(setX.getElementName(), new String("setX")); //$NON-NLS-1$
checkElementOffset((CElement)setX);
assertEquals(setX.getReturnType(), new String("void"));
assertEquals(setX.getReturnType(), new String("void")); //$NON-NLS-1$
checkLineNumbers((CElement)setX, 19, 22);
int setXNumOfParam = setX.getNumberOfParameters();
if(setXNumOfParam != 1)
fail("setX should have one parameter!");
fail("setX should have one parameter!"); //$NON-NLS-1$
String[] setXParamTypes = setX.getParameterTypes();
String firstParamType = setXParamTypes[0];
assertEquals(firstParamType, new String("int"));
assertEquals(firstParamType, new String("int")); //$NON-NLS-1$
// TODO : check for the inline here
checkNestedNamespace(classHello);
@ -191,7 +191,7 @@ public class StructuralCModelElementsTests extends TestCase {
// Hello ---> namespace: MyNestedPackage
List helloNamespaces = classHello.getChildrenOfType(ICElement.C_NAMESPACE);
INamespace myNestedPackage = (INamespace) helloNamespaces.get(0);
assertEquals(myNestedPackage.getElementName(), new String("MyNestedPackage"));
assertEquals(myNestedPackage.getElementName(), new String("MyNestedPackage")); //$NON-NLS-1$
checkElementOffset((CElement)myNestedPackage);
checkLineNumbers((CElement)myNestedPackage, 25, 52);
@ -202,21 +202,21 @@ public class StructuralCModelElementsTests extends TestCase {
// MyNestedPackage ---> class: Y
List nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);
IStructure classY = (IStructure) nestedClasses.get(0);
assertEquals(classY.getElementName(), new String("Y"));
assertEquals(classY.getElementName(), new String("Y")); //$NON-NLS-1$
checkElementOffset((CElement)classY);
checkLineNumbers((CElement)classY, 28, 35);
// Y ---> constructor: Y
List yMethods = classY.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
IMethodDeclaration constructor = (IMethodDeclaration) yMethods.get(0);
assertEquals(constructor.getElementName(), new String("Y"));
assertEquals(constructor.getElementName(), new String("Y")); //$NON-NLS-1$
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"));
assertEquals(destructor.getElementName(), new String("~Y")); //$NON-NLS-1$
checkElementOffset((CElement)destructor);
assertTrue (destructor.isDestructor());
checkLineNumbers((CElement)destructor, 34, 34);
@ -228,7 +228,7 @@ public class StructuralCModelElementsTests extends TestCase {
// MyNestedPackage ---> class: X public Y
List nestedClasses = myNestedPackage.getChildrenOfType(ICElement.C_CLASS);
IStructure classX = (IStructure) nestedClasses.get(1);
assertEquals(classX.getElementName(), new String("X"));
assertEquals(classX.getElementName(), new String("X")); //$NON-NLS-1$
checkElementOffset((CElement)classX);
checkLineNumbers((CElement)classX, 38, 51);
// TODO : Check for base classes here
@ -236,18 +236,18 @@ public class StructuralCModelElementsTests extends TestCase {
// X --> field: B b
List xFieldChildren = classX.getChildrenOfType(ICElement.C_FIELD);
IField bB = (IField) xFieldChildren.get(0);
assertEquals(bB.getElementName(), new String("b"));
assertEquals(bB.getElementName(), new String("b")); //$NON-NLS-1$
checkElementOffset((CElement)bB);
assertEquals(bB.getTypeName(), new String("B"));
assertEquals(bB.getTypeName(), new String("B")); //$NON-NLS-1$
checkLineNumbers((CElement)bB, 42, 42);
ASTAccessVisibility bVisibility = bB.getVisibility();
if (bVisibility != ASTAccessVisibility.PRIVATE)
fail("visibility should be private!");
fail("visibility should be private!"); //$NON-NLS-1$
// X ---> constructor chain: X
List xMethodChildren = classX.getChildrenOfType(ICElement.C_METHOD);
IMethod xconstructor = (IMethod) xMethodChildren.get(0);
assertEquals(xconstructor.getElementName(), new String("X"));
assertEquals(xconstructor.getElementName(), new String("X")); //$NON-NLS-1$
checkElementOffset((CElement)xconstructor);
assertTrue (xconstructor.isConstructor());
checkLineNumbers((CElement)xconstructor, 46, 48);
@ -255,9 +255,9 @@ public class StructuralCModelElementsTests extends TestCase {
// X ---> method declaration: doNothing
List xMethodDeclarations = classX.getChildrenOfType(ICElement.C_METHOD_DECLARATION);
IMethodDeclaration xDoNothing = (IMethodDeclaration) xMethodDeclarations.get(0);
assertEquals(xDoNothing.getElementName(), new String("doNothing"));
assertEquals(xDoNothing.getElementName(), new String("doNothing")); //$NON-NLS-1$
checkElementOffset((CElement)xDoNothing);
assertEquals(xDoNothing.getReturnType(), new String("int"));
assertEquals(xDoNothing.getReturnType(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)xDoNothing, 50, 50);
}
@ -265,44 +265,44 @@ public class StructuralCModelElementsTests extends TestCase {
// MyPackage ---> enum: Noname
List nsEnums = namespace.getChildrenOfType(ICElement.C_ENUMERATION);
IEnumeration enum = (IEnumeration) nsEnums.get(0);
assertEquals(enum.getElementName(), new String(""));
assertEquals(enum.getElementName(), new String("")); //$NON-NLS-1$
checkElementOffset((CElement)enum);
checkLineNumbers((CElement)enum, 57, 61);
// enum ---> enumerator: first = 1
List enumEnumerators = enum.getChildrenOfType(ICElement.C_ENUMERATOR);
IEnumerator first = (IEnumerator) enumEnumerators.get(0);
assertEquals(first.getElementName(), new String("first"));
assertEquals("1", first.getConstantExpression());
assertEquals(first.getElementName(), new String("first")); //$NON-NLS-1$
assertEquals("1", first.getConstantExpression()); //$NON-NLS-1$
checkElementOffset((CElement)first);
// enum ---> enumerator: second
IEnumerator second = (IEnumerator) enumEnumerators.get(1);
assertEquals(second.getElementName(), new String("second"));
assertEquals(second.getElementName(), new String("second")); //$NON-NLS-1$
checkElementOffset((CElement)second);
// enum ---> enumerator: third
IEnumerator third = (IEnumerator) enumEnumerators.get(2);
checkElementOffset((CElement)third);
assertEquals(third.getElementName(), new String("third"));
assertEquals(third.getElementName(), new String("third")); //$NON-NLS-1$
checkElementOffset((CElement)third);
// MyPackage ---> enum: MyEnum
IEnumeration myEnum = (IEnumeration) nsEnums.get(1);
assertEquals(myEnum.getElementName(), new String("MyEnum"));
assertEquals(myEnum.getElementName(), new String("MyEnum")); //$NON-NLS-1$
checkElementOffset((CElement)myEnum);
checkLineNumbers((CElement)myEnum, 64, 67);
// enum ---> enumerator: first
List myEnumEnumerators = myEnum.getChildrenOfType(ICElement.C_ENUMERATOR);
IEnumerator f = (IEnumerator) myEnumEnumerators.get(0);
assertEquals(f.getElementName(), new String("f"));
assertEquals(f.getElementName(), new String("f")); //$NON-NLS-1$
checkElementOffset((CElement)f);
// enum ---> enumerator: second
IEnumerator s = (IEnumerator) myEnumEnumerators.get(1);
assertEquals(s.getElementName(), new String("s"));
assertEquals(s.getElementName(), new String("s")); //$NON-NLS-1$
checkElementOffset((CElement)s);
// enum ---> enumerator: third
IEnumerator t = (IEnumerator) myEnumEnumerators.get(2);
assertEquals(t.getElementName(), new String("t"));
assertEquals(t.getElementName(), new String("t")); //$NON-NLS-1$
checkElementOffset((CElement)t);
}
@ -310,30 +310,30 @@ public class StructuralCModelElementsTests extends TestCase {
// MyPackage ---> int v
List nsVars = namespace.getChildrenOfType(ICElement.C_VARIABLE);
IVariable var1 = (IVariable) nsVars.get(0);
assertEquals(var1.getElementName(), new String("v"));
assertEquals(var1.getElementName(), new String("v")); //$NON-NLS-1$
checkElementOffset((CElement)var1);
assertEquals(var1.getTypeName(), new String("int"));
assertEquals(var1.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)var1, 71, 71);
// MyPackage ---> unsigned long vuLong
IVariable var2 = (IVariable) nsVars.get(1);
assertEquals(var2.getElementName(), new String("vuLong"));
assertEquals(var2.getElementName(), new String("vuLong")); //$NON-NLS-1$
checkElementOffset((CElement)var2);
assertEquals(var2.getTypeName(), new String("unsigned long"));
assertEquals(var2.getTypeName(), new String("unsigned long")); //$NON-NLS-1$
checkLineNumbers((CElement)var2, 73, 73);
// MyPackage ---> unsigned short vuShort
IVariable var3 = (IVariable) nsVars.get(2);
assertEquals(var3.getElementName(), new String("vuShort"));
assertEquals(var3.getElementName(), new String("vuShort")); //$NON-NLS-1$
checkElementOffset((CElement)var3);
assertEquals(var3.getTypeName(), new String("unsigned short"));
assertEquals(var3.getTypeName(), new String("unsigned short")); //$NON-NLS-1$
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"));
assertEquals(vDecl2.getElementName(), new String("orig_malloc_hook")); //$NON-NLS-1$
checkElementOffset((CElement)vDecl2);
assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, int)"));
assertEquals(vDecl2.getTypeName(), new String ("void*(*)(const char*, int, int)")); //$NON-NLS-1$
checkLineNumbers((CElement)vDecl2, 81, 81);
}
@ -342,9 +342,9 @@ public class StructuralCModelElementsTests extends TestCase {
// MyPackage ---> extern int evar
List nsVarDecls = namespace.getChildrenOfType(ICElement.C_VARIABLE_DECLARATION);
IVariableDeclaration vDecl1 = (IVariableDeclaration) nsVarDecls.get(0);
assertEquals(vDecl1.getElementName(), new String("evar"));
assertEquals(vDecl1.getElementName(), new String("evar")); //$NON-NLS-1$
checkElementOffset((CElement)vDecl1);
assertEquals(vDecl1.getTypeName(), new String("int"));
assertEquals(vDecl1.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)vDecl1, 79, 79);
}
@ -353,30 +353,30 @@ public class StructuralCModelElementsTests extends TestCase {
// MyPackage ---> function: void foo()
IFunctionDeclaration f1 = (IFunctionDeclaration) nsFunctionDeclarations.get(0);
assertEquals(f1.getElementName(), new String("foo"));
assertEquals(f1.getElementName(), new String("foo")); //$NON-NLS-1$
checkElementOffset((CElement)f1);
assertEquals(f1.getReturnType(), new String("void"));
assertEquals(f1.getReturnType(), new String("void")); //$NON-NLS-1$
checkLineNumbers((CElement)f1, 85, 85);
// MyPackage ---> function: char* foo(int&, char**)
IFunctionDeclaration f2 = (IFunctionDeclaration) nsFunctionDeclarations.get(1);
assertEquals(f2.getElementName(), new String("foo"));
assertEquals(f2.getElementName(), new String("foo")); //$NON-NLS-1$
checkElementOffset((CElement)f2);
assertEquals(f2.getReturnType(), new String("char*"));
assertEquals(f2.getReturnType(), new String("char*")); //$NON-NLS-1$
checkLineNumbers((CElement)f2, 87, 88);
int fooNumOfParam = f2.getNumberOfParameters();
if(fooNumOfParam != 2)
fail("foo should have two parameter!");
fail("foo should have two parameter!"); //$NON-NLS-1$
String[] paramTypes = f2.getParameterTypes();
assertEquals(paramTypes[0], new String("int&"));
assertEquals(paramTypes[1], new String("char**"));
assertEquals(paramTypes[0], new String("int&")); //$NON-NLS-1$
assertEquals(paramTypes[1], new String("char**")); //$NON-NLS-1$
// MyPackage ---> function: void boo() {}
List nsFunctions = namespace.getChildrenOfType(ICElement.C_FUNCTION);
IFunction f3 = (IFunction) nsFunctions.get(0);
assertEquals(f3.getElementName(), new String("boo"));
assertEquals(f3.getElementName(), new String("boo")); //$NON-NLS-1$
checkElementOffset((CElement)f3);
assertEquals(f3.getReturnType(), new String("void"));
assertEquals(f3.getReturnType(), new String("void")); //$NON-NLS-1$
checkLineNumbers((CElement)f3, 90, 92);
}
@ -384,70 +384,70 @@ public class StructuralCModelElementsTests extends TestCase {
// struct with name
List nsStructs = namespace.getChildrenOfType(ICElement.C_STRUCT);
IStructure struct1 = (IStructure) nsStructs.get(0);
assertEquals(struct1.getElementName(), new String ("MyStruct"));
assertEquals(struct1.getElementName(), new String ("MyStruct")); //$NON-NLS-1$
checkElementOffset((CElement)struct1);
checkLineNumbers((CElement)struct1, 95, 97);
List struct1Fields = struct1.getChildrenOfType(ICElement.C_FIELD);
IField field1 = (IField) struct1Fields.get(0);
assertEquals(field1.getElementName(), new String("sint"));
assertEquals(field1.getElementName(), new String("sint")); //$NON-NLS-1$
checkElementOffset((CElement)field1);
assertEquals(field1.getTypeName(), new String("int"));
assertEquals(field1.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)field1, 96, 96);
if(field1.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!");
fail("field visibility should be public!"); //$NON-NLS-1$
// struct no name
IStructure struct2 = (IStructure) nsStructs.get(1);
assertEquals(struct2.getElementName(), new String (""));
assertEquals(struct2.getElementName(), new String ("")); //$NON-NLS-1$
checkElementOffset((CElement)struct2);
checkLineNumbers((CElement)struct2, 101, 103);
List struct2Fields = struct2.getChildrenOfType(ICElement.C_FIELD);
IField field2 = (IField) struct2Fields.get(0);
assertEquals(field2.getElementName(), new String("ss"));
assertEquals(field2.getElementName(), new String("ss")); //$NON-NLS-1$
checkElementOffset((CElement)field2);
assertEquals(field2.getTypeName(), new String("int"));
assertEquals(field2.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)field2, 102, 102);
if(field2.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!");
fail("field visibility should be public!"); //$NON-NLS-1$
// typedefs
List nsTypeDefs = namespace.getChildrenOfType(ICElement.C_TYPEDEF);
ITypeDef td1 = (ITypeDef) nsTypeDefs.get(0);
assertEquals(td1.getElementName(), new String ("myStruct"));
assertEquals(td1.getElementName(), new String ("myStruct")); //$NON-NLS-1$
checkElementOffset((CElement)td1);
assertEquals(td1.getTypeName(), new String ("struct MyStruct"));
assertEquals(td1.getTypeName(), new String ("struct MyStruct")); //$NON-NLS-1$
checkLineNumbers((CElement)td1, 99, 99);
ITypeDef td2 = (ITypeDef) nsTypeDefs.get(1);
assertEquals(td2.getElementName(), new String ("myTypedef"));
assertEquals(td2.getElementName(), new String ("myTypedef")); //$NON-NLS-1$
checkElementOffset((CElement)td2);
assertEquals(td2.getTypeName(), new String (""));
assertEquals(td2.getTypeName(), new String ("")); //$NON-NLS-1$
checkLineNumbers((CElement)td2, 101, 103);
// union
List nsUnions = namespace.getChildrenOfType(ICElement.C_UNION);
IStructure u0 = (IStructure) nsUnions.get(0);
assertEquals(u0.getElementName(), new String("U"));
assertEquals(u0.getElementName(), new String("U")); //$NON-NLS-1$
checkElementOffset((CElement)u0);
checkLineNumbers((CElement)u0, 105, 107);
List u0Fields = u0.getChildrenOfType(ICElement.C_FIELD);
IField field3 = (IField) u0Fields.get(0);
assertEquals(field3.getElementName(), new String("U1"));
assertEquals(field3.getElementName(), new String("U1")); //$NON-NLS-1$
checkElementOffset((CElement)field3);
assertEquals(field3.getTypeName(), new String("int"));
assertEquals(field3.getTypeName(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)field3, 106, 106);
if(field3.getVisibility() != ASTAccessVisibility.PUBLIC)
fail("field visibility should be public!");
fail("field visibility should be public!"); //$NON-NLS-1$
}
private void checkTemplates(IParent namespace) throws CModelException{
// template function
List functionTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_FUNCTION);
FunctionTemplate ft = (FunctionTemplate)functionTemplates.get(0);
assertEquals(ft.getElementName(), new String("aTemplatedFunction"));
assertEquals(ft.getElementName(), new String("aTemplatedFunction")); //$NON-NLS-1$
checkElementOffset(ft);
ft.getTemplateSignature();
assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A"));
assertEquals(ft.getTemplateSignature(), new String("aTemplatedFunction<A, B>(B) : A")); //$NON-NLS-1$
checkLineNumbers(ft, 112, 113);
// template method
@ -456,26 +456,26 @@ public class StructuralCModelElementsTests extends TestCase {
checkLineNumbers((CElement)enclosingClass, 115, 120);
List methodTemplates = enclosingClass.getChildrenOfType(ICElement.C_TEMPLATE_METHOD);
MethodTemplate mt = (MethodTemplate)methodTemplates.get(0);
assertEquals(mt.getElementName(), new String("aTemplatedMethod"));
assertEquals(mt.getElementName(), new String("aTemplatedMethod")); //$NON-NLS-1$
checkElementOffset(mt);
assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A"));
assertEquals(mt.getTemplateSignature(), new String("aTemplatedMethod<A, B>(B) : A")); //$NON-NLS-1$
checkLineNumbers(mt, 118, 119 );
assertEquals(mt.getVisibility(), ASTAccessVisibility.PUBLIC);
// template class
List classTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_CLASS);
StructureTemplate ct = (StructureTemplate)classTemplates.get(0);
assertEquals(ct.getElementName(), new String("myarray"));
assertEquals(ct.getElementName(), new String("myarray")); //$NON-NLS-1$
checkElementOffset(ct);
assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>"));
assertEquals(ct.getTemplateSignature(), new String("myarray<T, Tibor>")); //$NON-NLS-1$
checkLineNumbers(ct, 122, 123);
// template struct
List structTemplates = namespace.getChildrenOfType(ICElement.C_TEMPLATE_STRUCT);
StructureTemplate st = (StructureTemplate)structTemplates.get(0);
assertEquals(st.getElementName(), new String("mystruct"));
assertEquals(st.getElementName(), new String("mystruct")); //$NON-NLS-1$
checkElementOffset(st);
assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>"));
assertEquals(st.getTemplateSignature(), new String("mystruct<T, Tibor>")); //$NON-NLS-1$
checkLineNumbers(st, 125, 126);
// moved to failed tests
@ -493,24 +493,24 @@ public class StructuralCModelElementsTests extends TestCase {
// array variable
List variables = tu.getChildrenOfType(ICElement.C_VARIABLE);
IVariable arrayVar = (IVariable) variables.get(0);
assertEquals(arrayVar.getElementName(), new String("myArray"));
assertEquals(arrayVar.getElementName(), new String("myArray")); //$NON-NLS-1$
checkElementOffset((CElement)arrayVar);
assertEquals(arrayVar.getTypeName(), new String("int[][]"));
assertEquals(arrayVar.getTypeName(), new String("int[][]")); //$NON-NLS-1$
checkLineNumbers((CElement)arrayVar, 133, 133);
// array parameter in function main
List functions = tu.getChildrenOfType(ICElement.C_FUNCTION);
IFunction mainFunction = (IFunction) functions.get(0);
assertEquals(mainFunction.getElementName(), new String("main"));
assertEquals(mainFunction.getElementName(), new String("main")); //$NON-NLS-1$
checkElementOffset((CElement)mainFunction);
assertEquals(mainFunction.getReturnType(), new String("int"));
assertEquals(mainFunction.getReturnType(), new String("int")); //$NON-NLS-1$
checkLineNumbers((CElement)mainFunction, 134, 136);
int NumOfParam = mainFunction.getNumberOfParameters();
if(NumOfParam != 2)
fail("main should have two parameter!");
fail("main should have two parameter!"); //$NON-NLS-1$
String[] paramTypes = mainFunction.getParameterTypes();
assertEquals(paramTypes[0], new String("int"));
assertEquals(paramTypes[1], new String("char*[]"));
assertEquals(paramTypes[0], new String("int")); //$NON-NLS-1$
assertEquals(paramTypes[1], new String("char*[]")); //$NON-NLS-1$
}
private void checkLineNumbers(CElement element, int startLine, int endLine){

View file

@ -14,9 +14,12 @@ import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
/**
@ -39,6 +42,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences(1, createTaskList( new Task( f2 ) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f()" ); //$NON-NLS-1$
}
// Kind PRIMARY_INTEGER_LITERAL : int
public void testPrimaryIntegerLiteral() throws Exception
@ -48,6 +54,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f1 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(1, 2 + 3)" ); //$NON-NLS-1$
}
// Kind PRIMARY_CHAR_LITERAL : char
public void testPrimaryCharLiteral() throws Exception
@ -57,6 +66,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f('c')" ); //$NON-NLS-1$
}
// Kind PRIMARY_FLOAT_LITERAL : float
public void testPrimaryFloatLiteral() throws Exception
@ -66,6 +78,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(1.13)" ); //$NON-NLS-1$
}
// Kind PRIMARY_STRING_LITERAL : char*
public void testPrimaryStringLiteral() throws Exception
@ -75,6 +90,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(\"str\")" ); //$NON-NLS-1$
}
// Kind PRIMARY_BOOLEAN_LITERAL : bool
public void testPrimaryBooleanLiteral() throws Exception
@ -84,6 +102,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f1 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(true)" ); //$NON-NLS-1$
}
// Kind PRIMARY_THIS : type of inner most enclosing structure scope
public void testPrimaryThis() throws Exception
@ -98,6 +119,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTMethod m = (IASTMethod) i.next();
Iterator r = callback.getReferences().iterator();
assertAllReferences( 4, createTaskList( new Task( cl, 3 ), new Task( f2 )));
Iterator body = getDeclarations( m );
IASTVariable x = (IASTVariable) body.next();
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(this)" ); //$NON-NLS-1$
}
// Kind PRIMARY_BRACKETED_EXPRESSION : LHS
public void testPrimaryBracketedExpression() throws Exception
@ -107,6 +133,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f1 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(1, (2 + 3))" ); //$NON-NLS-1$
}
// Kind ID_EXPRESSION : type of the ID
public void testIdExpression() throws Exception
@ -120,6 +149,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 3, createTaskList( new Task( cl ), new Task( f1 ),new Task( a ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(a)" ); //$NON-NLS-1$
}
// Kind ID_EXPRESSION ( refers to a pointer ) : pointer to type of ID
public void testIdExpressionToPointer() throws Exception
@ -132,6 +164,8 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task( cl, 2 ), new Task( f1 ), new Task( a ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(pa)" ); //$NON-NLS-1$
}
// Kind POSTFIX_SUBSCRIPT
public void testPostfixSubscript() throws Exception
@ -142,6 +176,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(pa[1])" ); //$NON-NLS-1$
}
public void testPostfixSubscriptA() throws Exception
@ -152,6 +189,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(pa[1][2])" ); //$NON-NLS-1$
}
public void testPostfixSubscriptB() throws Exception
@ -162,6 +202,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 2, createTaskList( new Task( f1 ), new Task( pa ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(pa[1][2])" ); //$NON-NLS-1$
}
public void testPostfixSubscriptWithReferences() throws Exception
@ -181,9 +224,14 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
Iterator i = parse( "int foo( float b ); int bar( int a, int b ); int test( void ) { int x = bar( foo( 3.0 ), foo( 5.0 ) ) ; }").getDeclarations(); //$NON-NLS-1$
IASTFunction foo = (IASTFunction)i.next();
IASTFunction bar = (IASTFunction)i.next();
i.next();
IASTFunction test = (IASTFunction) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( bar ), new Task( foo, 2 )));
i = getDeclarations( test );
IASTVariable x = (IASTVariable) i.next();
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "bar(foo(3.0), foo(5.0))" ); //$NON-NLS-1$
}
// Kind POSTFIX_SIMPLETYPE_* : simple type
public void testPostfixSimpletypesBug42823() throws Exception
@ -196,6 +244,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction test = (IASTFunction)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 1, createTaskList( new Task( foo )));
i = getDeclarations( test );
IASTVariable someInt = (IASTVariable) i.next();
IASTExpression exp = someInt.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(int(3), short(4), double(3.0), float(4.0), char('a'), wchar_t('a'), signed(2), unsigned(3), bool(false), long(3))" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPENAME_IDENTIFIER
@ -206,9 +259,39 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 3, createTaskList( new Task( cl, 2 ), new Task( f2) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typename A())" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPENAME_TEMPLATEID
public void testPostfixTypeNameTemplateId() throws Exception{
Iterator i = parse( " template<class T> class A {}; int foo( A<int> a ); \n int x = foo( typename template A< int >() );").getDeclarations(); //$NON-NLS-1$
IASTTemplateDeclaration template = (IASTTemplateDeclaration) i.next();
IASTClassSpecifier A = (IASTClassSpecifier) template.getOwnedDeclaration();
IASTFunction f = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 3, createTaskList( new Task( A, 2 ), new Task( f ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typename template A<int>())" ); //$NON-NLS-1$
}
public void testPostfixTypeNameTemplateId_2() throws Exception{
Iterator i = parse( "namespace NS{ template<class T> class A {}; } int foo( NS::A<int> a ); \n int x = foo( typename NS::template A< int >() );").getDeclarations(); //$NON-NLS-1$
IASTNamespaceDefinition NS = (IASTNamespaceDefinition) i.next();
IASTFunction f = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
i = getDeclarations( NS );
IASTTemplateDeclaration template = (IASTTemplateDeclaration) i.next();
IASTClassSpecifier A = (IASTClassSpecifier) template.getOwnedDeclaration();
assertAllReferences( 5, createTaskList( new Task( NS, 2 ), new Task( A, 2 ), new Task( f ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typename NS::template A<int>())" ); //$NON-NLS-1$
}
// Kind POSTFIX_DOT_IDEXPRESSION : type of member in the scope of the container
public void testPostfixDotExpression() throws Exception{
@ -221,6 +304,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
Iterator members = getDeclarations(cl);
IASTField m = (IASTField)members.next();
assertAllReferences( 4, createTaskList( new Task(cl), new Task(a), new Task(m), new Task(f2) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a.m)" ); //$NON-NLS-1$
}
// Kind POSTFIX_ARROW_IDEXPRESSION : type of member in the scope of the container
public void testPostfixArrowExpression() throws Exception{
@ -233,6 +319,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
Iterator members = getDeclarations(cl);
IASTField m = (IASTField)members.next();
assertAllReferences( 4, createTaskList( new Task(cl), new Task(a), new Task(m), new Task(f2) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a->m)" ); //$NON-NLS-1$
}
// Kind POSTFIX_DOT_TEMPL_IDEXPRESS
// Kind POSTFIX_ARROW_TEMPL_IDEXP
@ -253,6 +342,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( subDecls.hasNext() );
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(x++)" ); //$NON-NLS-1$
}
// Kind POSTFIX_DECREMENT : LHS
public void testPostfixDecrement() throws Exception
@ -267,6 +361,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( subDecls.hasNext() );
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(x--)" ); //$NON-NLS-1$
}
// Kind POSTFIX_DYNAMIC_CAST
public void testPostfixDynamicCast() throws Exception{
@ -279,6 +378,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 6, createTaskList( new Task( cla, 2 ), new Task( clb, 2), new Task(a), new Task(f2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(dynamic_cast<B*>(a))" ); //$NON-NLS-1$
}
// Kind POSTFIX_REINTERPRET_CAST
public void testPostfixReinterpretCast() throws Exception{
@ -289,6 +391,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(a), new Task(f2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(reinterpret_cast<double*>(a))" ); //$NON-NLS-1$
}
// Kind POSTFIX_STATIC_CAST
public void testPostfixStaticCast() throws Exception{
@ -299,6 +404,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(a), new Task(f2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(static_cast<char>(a))" ); //$NON-NLS-1$
}
// Kind POSTFIX_CONST_CAST
public void testPostfixConstCast() throws Exception{
@ -309,6 +417,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(a), new Task(f2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(const_cast<int*>(&a))" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPEID_EXPRESSION : LHS
public void testPostfixTypeIdExpression() throws Exception{
@ -317,6 +428,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 1, createTaskList( new Task( f2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typeid(5))" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPEID_EXPRESSION : type of the ID
public void testPostfixTypeIdExpression2() throws Exception{
@ -327,6 +441,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task(cl, 2),new Task(a),new Task(f1)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typeid(a))" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPEID_TYPEID : type of the ID
public void testPostfixTypeIdTypeId() throws Exception{
@ -337,6 +454,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task(cl, 3), new Task(f1)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typeid(A))" ); //$NON-NLS-1$
}
// Kind POSTFIX_TYPEID_TYPEID : type of the ID
public void testPostfixTypeIdTypeId2() throws Exception{
@ -347,6 +467,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task(cl, 3), new Task(f1)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(typeid(const A))" ); //$NON-NLS-1$
}
// Kind UNARY_INCREMENT : LHS
public void testUnaryIncrement() throws Exception
@ -361,6 +484,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( subDecls.hasNext() );
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(foo2), new Task(x) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(++x)" ); //$NON-NLS-1$
}
// Kind UNARY_DECREMENT : LHS
public void testUnaryDecrement() throws Exception
@ -375,6 +503,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( subDecls.hasNext() );
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(foo2), new Task(x) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(--x)" ); //$NON-NLS-1$
}
// Kind UNARY_STAR_CASTEXPRESSION : LHS + t_pointer
public void testUnaryStarCastExpression() throws Exception
@ -386,6 +519,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task(cl, 2 ), new Task( a ), new Task(f1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(*pa)" ); //$NON-NLS-1$
}
// Kind UNARY_AMPSND_CASTEXPRESSION : LHS + t_reference
public void testUnaryAmpersandCastExpression() throws Exception
@ -397,6 +533,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTFunction f2 = (IASTFunction) i.next();
IASTVariable x = (IASTVariable) i.next();
assertAllReferences( 4, createTaskList( new Task(cl, 2 ), new Task( a ), new Task(f1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "f(&pa)" ); //$NON-NLS-1$
}
// Kind UNARY_PLUS_CASTEXPRESSION : LHS
public void testUnaryPlusCastExpression() throws Exception {
@ -406,6 +545,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 1, createTaskList( new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(+5)" ); //$NON-NLS-1$
}
// Kind UNARY_MINUS_CASTEXPRESSION : LHS
public void testUnaryMinusCastExpression() throws Exception {
@ -415,6 +557,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 1, createTaskList( new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(-5)" ); //$NON-NLS-1$
}
// Kind UNARY_NOT_CASTEXPRESSION : LHS
public void testUnaryNotCastExpression() throws Exception {
@ -425,6 +570,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task( b ), new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(!b)" ); //$NON-NLS-1$
}
// Kind UNARY_TILDE_CASTEXPRESSION : LHS
public void testTildeNotCastExpression() throws Exception {
@ -435,6 +583,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable y = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(~x)" ); //$NON-NLS-1$
}
// Kind UNARY_SIZEOF_UNARYEXPRESSION : unsigned int
public void testUnarySizeofUnaryExpression() throws Exception {
@ -445,6 +598,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable y = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 1, createTaskList( new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(sizeof (5))" ); //$NON-NLS-1$
}
// Kind UNARY_SIZEOF_TYPEID : unsigned int
public void testUnarySizeofTypeId() throws Exception {
@ -455,6 +613,11 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable y = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task( x ), new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "5" ); //$NON-NLS-1$
exp = y.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(sizeof (x))" ); //$NON-NLS-1$
}
// Kind NEW_NEWTYPEID
// Kind NEW_TYPEID
@ -466,6 +629,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( cl, 2), new Task( foo2 )));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(new A())" ); //$NON-NLS-1$
}
// Kind DELETE_CASTEXPRESSION
@ -482,6 +648,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable) i.next();
assertFalse( i.hasNext() );
assertAllReferences( 6, createTaskList( new Task( cla, 3 ), new Task( clb, 1), new Task(b), new Task(f2)));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo((A*)b)" ); //$NON-NLS-1$
}
// Kind PM_DOTSTAR
@ -501,6 +670,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( i.hasNext() );
assertEquals( callback.getReferences().size(), 3 );
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a * b)" ); //$NON-NLS-1$
}
// Kind MULTIPLICATIVE_DIVIDE : usual arithmetic conversions
public void testMultiplicativeDivide() throws Exception {
@ -512,6 +684,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b / a)" ); //$NON-NLS-1$
}
// Kind MULTIPLICATIVE_MODULUS : usual arithmetic conversions
public void testMultiplicativeModulus() throws Exception {
@ -523,6 +698,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b % a)" ); //$NON-NLS-1$
}
// Kind ADDITIVE_PLUS : usual arithmetic conversions
public void testAdditivePlus() throws Exception {
@ -534,6 +712,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b + a)" ); //$NON-NLS-1$
}
// Kind ADDITIVE_MINUS : usual arithmetic conversions
public void testAdditiveMinus() throws Exception {
@ -545,6 +726,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task(a), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b - a)" ); //$NON-NLS-1$
}
// Kind SHIFT_LEFT : LHS
public void testShiftLeft() throws Exception {
@ -555,6 +739,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(a), new Task( foo1 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a << 5)" ); //$NON-NLS-1$
}
// Kind SHIFT_RIGHT : LHS
public void testShiftRight() throws Exception {
@ -565,6 +752,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(a), new Task( foo1 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a >> 5)" ); //$NON-NLS-1$
}
// Kind RELATIONAL_LESSTHAN : bool
public void testRelationalLessThan() throws Exception {
@ -575,6 +765,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b < 3)" ); //$NON-NLS-1$
}
// Kind RELATIONAL_GREATERTHAN : bool
public void testRelationalGreaterThan() throws Exception {
@ -585,6 +778,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b > 3)" ); //$NON-NLS-1$
}
// Kind RELATIONAL_LESSTHANEQUALTO : bool
public void testRelationalLessThanOrEqual() throws Exception {
@ -595,6 +791,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b <= 3)" ); //$NON-NLS-1$
}
// Kind RELATIONAL_GREATERTHANEQUALTO : bool
public void testRelationalGreaterThanOrEqual() throws Exception {
@ -605,6 +804,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b >= 3)" ); //$NON-NLS-1$
}
// Kind EQUALITY_EQUALS : bool
public void testEqualityEquals() throws Exception {
@ -615,6 +817,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b == 3)" ); //$NON-NLS-1$
}
// Kind EQUALITY_NOTEQUALS : bool
public void testEqualityNotEquals() throws Exception {
@ -625,6 +830,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 2, createTaskList( new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(b != 3)" ); //$NON-NLS-1$
}
// Kind ANDEXPRESSION : usual arithmetic conversions
public void testAndExpression() throws Exception {
@ -636,6 +844,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a & b)" ); //$NON-NLS-1$
}
// Kind EXCLUSIVEOREXPRESSION : usual arithmetic conversions
public void testExclusiveOrExpression() throws Exception {
@ -647,6 +858,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a ^ b)" ); //$NON-NLS-1$
}
// Kind INCLUSIVEOREXPRESSION : : usual arithmetic conversions
public void testInclusiveOrExpression() throws Exception {
@ -658,6 +872,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a | b)" ); //$NON-NLS-1$
}
// Kind LOGICALANDEXPRESSION : bool
public void testLogicalAndExpression() throws Exception {
@ -669,6 +886,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a && b)" ); //$NON-NLS-1$
}
// Kind LOGICALOREXPRESSION : bool
public void testLogicalOrExpression() throws Exception {
@ -680,6 +900,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 3, createTaskList( new Task( a ), new Task(b), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a || b)" ); //$NON-NLS-1$
}
// Kind CONDITIONALEXPRESSION : conditional Expression Conversions
public void testConditionalExpression() throws Exception {
@ -692,6 +915,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences( 4, createTaskList( new Task( a ), new Task(b), new Task( c ), new Task( foo2 ) ) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a > 5 ? b : c)" ); //$NON-NLS-1$
}
// Kind CONDITIONALEXPRESSION with references : conditional Expression Conversions
public void testConditionalExpressionWithReferencesA() throws Exception {
@ -706,6 +932,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(8, createTaskList( new Task( cla, 3 ), new Task( clb ), new Task( c ), new Task( b ), new Task( a ), new Task( foo2 )) );
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(c > 5 ? b : a)" ); //$NON-NLS-1$
}
public void testConditionalExpressionWithReferencesB_Bug43106() throws Exception {
Iterator i = parse( "class A{}; class B : public A{}; int foo(); int foo(A&); A a ; B b; int c = 0; int x = foo( c > 5 ? b : a );").getDeclarations(); //$NON-NLS-1$
@ -720,6 +949,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
assertFalse( i.hasNext() );
assertAllReferences( 8,
createTaskList( new Task( cla, 3 ), new Task( clb ), new Task( c), new Task( b ), new Task( a ), new Task( foo2) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(c > 5 ? b : a)" ); //$NON-NLS-1$
}
// Kind THROWEXPRESSION
@ -732,6 +964,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a = 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_PLUS : LHS
public void testAssignmentExpressionPlus() throws Exception {
@ -742,6 +977,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a += 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_MINUS : LHS
public void testAssignmentExpressionMinus() throws Exception {
@ -752,6 +990,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a -= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_MULT : LHS
public void testAssignmentExpressionMulti() throws Exception {
@ -762,6 +1003,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a *= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_DIV : LHS
public void testAssignmentExpressionDiv() throws Exception {
@ -772,6 +1016,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a /= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_MOD : LHS
public void testAssignmentExpressionMod() throws Exception {
@ -782,6 +1029,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a %= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_LSHIFT : LHS
public void testAssignmentExpressionLShift() throws Exception {
@ -792,6 +1042,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a >>= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_RSHIFT : LHS
public void testAssignmentExpressionRShift() throws Exception {
@ -802,6 +1055,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a <<= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_AND : LHS
public void testAssignmentExpressionAnd() throws Exception {
@ -812,6 +1068,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a &= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_OR : LHS
public void testAssignmentExpressionOr() throws Exception {
@ -822,6 +1081,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a |= 5)" ); //$NON-NLS-1$
}
// Kind ASSIGNMENTEXPRESSION_XOR : LHS
public void testAssignmentExpressionXOr() throws Exception {
@ -832,6 +1094,9 @@ public class CompleteParseASTExpressionTest extends CompleteParseBaseTest{
IASTVariable x = (IASTVariable)i.next();
assertFalse( i.hasNext() );
assertAllReferences(2, createTaskList( new Task(a), new Task(foo1) ));
IASTExpression exp = x.getInitializerClause().getAssigmentExpression();
assertEquals( exp.toString(), "foo(a ^= 5)" ); //$NON-NLS-1$
}
// Kind EXPRESSIONLIST : list of LHS, RHS
// Already tested with each test trying to find a reference to function.

View file

@ -302,7 +302,7 @@ public class CModelBuilder {
private void generateModelElements (Parent parent, IASTTemplateDeclaration templateDeclaration) throws CModelException, ASTNotImplementedException
{
// Template Declaration
IASTDeclaration declaration = (IASTDeclaration)templateDeclaration.getOwnedDeclaration();
IASTDeclaration declaration = templateDeclaration.getOwnedDeclaration();
if(declaration instanceof IASTAbstractTypeSpecifierDeclaration){
IASTAbstractTypeSpecifierDeclaration abstractDeclaration = (IASTAbstractTypeSpecifierDeclaration)declaration ;
CElement element = createAbstractElement(parent, abstractDeclaration , true);
@ -478,10 +478,7 @@ public class CModelBuilder {
Enumerator element = new Enumerator (enum, enumDef.getName().toString());
IASTExpression initialValue = enumDef.getInitialValue();
if(initialValue != null){
if(initialValue.getLiteralString().length() > 0)
element.setConstantExpression(initialValue.getLiteralString());
else
element.setConstantExpression(initialValue.getIdExpression());
element.setConstantExpression( ASTUtil.getExpressionString( initialValue ) );
}
// add to parent
enum.addChild(element);

View file

@ -11,8 +11,14 @@
package org.eclipse.cdt.core.parser.ast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.cdt.core.parser.Keywords;
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
/**
@ -94,12 +100,10 @@ public class ASTUtil {
if(clause != null){
IASTExpression expression = clause.getAssigmentExpression();
if(expression != null){
String literal = (expression.getLiteralString().length() > 0
? expression.getLiteralString()
: expression.getIdExpression() );
if(literal.length() > 0){
String init = getExpressionString( expression );
if(init.length() > 0){
initializer.append("="); //$NON-NLS-1$
initializer.append(literal);
initializer.append(init);
}
}
}
@ -235,4 +239,431 @@ public class ASTUtil {
return parameters.toString();
}
public static String getTypeId( IASTTypeId id ){
StringBuffer type = new StringBuffer();
if( id.isTypename() ){
type.append( Keywords.TYPENAME );
type.append( ' ' );
}
type.append( id.getFullSignature() );
Iterator i = id.getPointerOperators();
while(i.hasNext()){
ASTPointerOperator po = (ASTPointerOperator) i.next();
type.append(getPointerOperator(po));
}
i = id.getArrayModifiers();
while (i.hasNext()){
i.next();
type.append("[]"); //$NON-NLS-1$
}
return type.toString();
}
public static final String EMPTY_STRING = ""; //$NON-NLS-1$
public static String getExpressionString( IASTExpression expression ){
String literal = expression.getLiteralString();
String idExpression = expression.getIdExpression();
IASTExpression lhs = expression.getLHSExpression();
IASTExpression rhs = expression.getRHSExpression();
IASTExpression third = expression.getThirdExpression();
IASTNewExpressionDescriptor descriptor = expression.getNewExpressionDescriptor();
IASTTypeId typeId = expression.getTypeId();
if( literal != null && !literal.equals( EMPTY_STRING ) && ( idExpression == null || idExpression.equals( EMPTY_STRING ) ) )
return getLiteralExpression( expression );
if( idExpression != null && !idExpression.equals( EMPTY_STRING ) && lhs == null )
return getIdExpression( expression );
if( third != null )
return getConditionalExpression( expression );
if( descriptor != null )
return getNewExpression( expression );
if( lhs != null && rhs != null )
return getBinaryExpression( expression );
if( lhs != null && typeId != null )
return getUnaryTypeIdExpression( expression );
if( lhs != null && ( idExpression != null && !idExpression.equals( EMPTY_STRING ) ) )
return getUnaryIdExpression( expression );
if( lhs != null )
return getUnaryExpression( expression );
if( typeId != null )
return getTypeIdExpression( expression );
return getEmptyExpression( expression );
}
private static String getEmptyExpression( IASTExpression expression ){
if( expression.getExpressionKind() == Kind.PRIMARY_THIS )
return Keywords.THIS;
return EMPTY_STRING;
}
private static String getLiteralExpression( IASTExpression expression ){
Kind kind = expression.getExpressionKind();
if( kind != Kind.PRIMARY_CHAR_LITERAL && kind != Kind.PRIMARY_STRING_LITERAL )
return expression.getLiteralString();
StringBuffer buffer = new StringBuffer();
if( kind == Kind.PRIMARY_CHAR_LITERAL ){
buffer.append( '\'' );
buffer.append( expression.getLiteralString() );
buffer.append( '\'' );
} else if( kind == Kind.PRIMARY_STRING_LITERAL ) {
buffer.append( '"' );
buffer.append( expression.getLiteralString() );
buffer.append( '"' );
}
return buffer.toString();
}
private static String getIdExpression( IASTExpression expression ){
return expression.getIdExpression();
}
private static String getConditionalExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
buffer.append( getExpressionString( expression.getLHSExpression() ) );
buffer.append( " ? " ); //$NON-NLS-1$
buffer.append( getExpressionString( expression.getRHSExpression() ) );
buffer.append( " : " ); //$NON-NLS-1$
buffer.append( getExpressionString( expression.getThirdExpression() ) );
return buffer.toString();
}
private static String getNewExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
buffer.append( Keywords.NEW );
buffer.append( ' ' );
IASTNewExpressionDescriptor descriptor = expression.getNewExpressionDescriptor();
Iterator iter = descriptor.getNewPlacementExpressions();
if( iter.hasNext() ){
buffer.append( '(' );
buffer.append( getExpressionString( (IASTExpression) iter.next() ) );
buffer.append( ") " ); //$NON-NLS-1$
}
iter = descriptor.getNewTypeIdExpressions();
if( iter.hasNext() ){
buffer.append( getExpressionString( (IASTExpression) iter.next() ) );
buffer.append( ' ' );
}
if( expression.getTypeId() != null ){
buffer.append( getTypeId( expression.getTypeId() ) );
}
iter = descriptor.getNewInitializerExpressions();
if( iter.hasNext() ){
buffer.append( '(' );
buffer.append( getExpressionString( (IASTExpression) iter.next() ) );
buffer.append( ')' );
}
return buffer.toString();
}
private static String getBinaryExpression( IASTExpression expression ){
Kind kind = expression.getExpressionKind();
StringBuffer buffer = new StringBuffer();
buffer.append( getExpressionString( expression.getLHSExpression() ) );
boolean appendSpace = false;
if( kind != Kind.EXPRESSIONLIST &&
kind != Kind.PM_DOTSTAR &&
kind != Kind.PM_ARROWSTAR &&
kind != Kind.POSTFIX_SUBSCRIPT &&
kind != Kind.POSTFIX_FUNCTIONCALL &&
kind != Kind.POSTFIX_DOT_TEMPL_IDEXPRESS &&
kind != Kind.POSTFIX_DOT_IDEXPRESSION &&
kind != Kind.POSTFIX_DOT_DESTRUCTOR &&
kind != Kind.POSTFIX_ARROW_TEMPL_IDEXP &&
kind != Kind.POSTFIX_ARROW_IDEXPRESSION &&
kind != Kind.POSTFIX_ARROW_DESTRUCTOR)
{
appendSpace = true;
buffer.append( ' ' );
}
if( kind == Kind.ANDEXPRESSION ||
kind == Kind.EXPRESSIONLIST ||
kind == Kind.EXCLUSIVEOREXPRESSION ||
kind == Kind.PM_DOTSTAR ||
kind == Kind.PM_ARROWSTAR ||
kind == Kind.LOGICALANDEXPRESSION ||
kind == Kind.LOGICALOREXPRESSION ||
kind == Kind.RELATIONAL_GREATERTHAN ||
kind == Kind.RELATIONAL_LESSTHAN ||
kind == Kind.RELATIONAL_LESSTHANEQUALTO ||
kind == Kind.RELATIONAL_GREATERTHANEQUALTO ||
kind == Kind.EQUALITY_EQUALS ||
kind == Kind.EQUALITY_NOTEQUALS ||
kind == Kind.ADDITIVE_PLUS ||
kind == Kind.ADDITIVE_MINUS ||
kind == Kind.INCLUSIVEOREXPRESSION ||
kind == Kind.MULTIPLICATIVE_MULTIPLY ||
kind == Kind.MULTIPLICATIVE_DIVIDE ||
kind == Kind.MULTIPLICATIVE_MODULUS ||
kind == Kind.POSTFIX_DOT_TEMPL_IDEXPRESS ||
kind == Kind.POSTFIX_DOT_IDEXPRESSION ||
kind == Kind.POSTFIX_DOT_DESTRUCTOR ||
kind == Kind.POSTFIX_ARROW_TEMPL_IDEXP ||
kind == Kind.POSTFIX_ARROW_IDEXPRESSION ||
kind == Kind.POSTFIX_ARROW_DESTRUCTOR ||
kind == Kind.ASSIGNMENTEXPRESSION_NORMAL ||
kind == Kind.ASSIGNMENTEXPRESSION_MULT ||
kind == Kind.ASSIGNMENTEXPRESSION_DIV ||
kind == Kind.ASSIGNMENTEXPRESSION_MOD ||
kind == Kind.ASSIGNMENTEXPRESSION_PLUS ||
kind == Kind.ASSIGNMENTEXPRESSION_MINUS ||
kind == Kind.ASSIGNMENTEXPRESSION_RSHIFT ||
kind == Kind.ASSIGNMENTEXPRESSION_LSHIFT ||
kind == Kind.ASSIGNMENTEXPRESSION_AND ||
kind == Kind.ASSIGNMENTEXPRESSION_XOR ||
kind == Kind.ASSIGNMENTEXPRESSION_OR ||
kind == Kind.SHIFT_LEFT ||
kind == Kind.SHIFT_RIGHT)
{
buffer.append( ASTUtil.getStringForKind( kind ) );
} else if( kind == Kind.POSTFIX_SUBSCRIPT )
buffer.append( '[' );
else if( kind == Kind.POSTFIX_FUNCTIONCALL )
buffer.append( '(' );
if( kind == Kind.POSTFIX_DOT_TEMPL_IDEXPRESS ||
kind == IASTExpression.Kind.POSTFIX_ARROW_TEMPL_IDEXP)
{
buffer.append( ' ' );
buffer.append( Keywords.TEMPLATE );
buffer.append( ' ' );
}
if( appendSpace || kind == Kind.EXPRESSIONLIST )
buffer.append( ' ' );
buffer.append( getExpressionString( expression.getRHSExpression() ) );
if( kind == Kind.POSTFIX_SUBSCRIPT )
buffer.append( ']' );
else if( kind == Kind.POSTFIX_FUNCTIONCALL )
buffer.append( ')' );
return buffer.toString();
}
private static String getUnaryTypeIdExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
Kind kind = expression.getExpressionKind();
if( kind == Kind.CASTEXPRESSION ){
buffer.append( '(' );
buffer.append( getTypeId( expression.getTypeId() ) );
buffer.append( ')' );
buffer.append( getExpressionString( expression.getLHSExpression() ) );
} else if ( kind == Kind.POSTFIX_DYNAMIC_CAST ||
kind == Kind.POSTFIX_STATIC_CAST ||
kind == Kind.POSTFIX_REINTERPRET_CAST ||
kind == Kind.POSTFIX_CONST_CAST )
{
buffer.append( ASTUtil.getStringForKind( kind ) );
buffer.append( '<' );
buffer.append( getTypeId( expression.getTypeId() ) );
buffer.append( ">(" ); //$NON-NLS-1$
buffer.append( getExpressionString( expression.getLHSExpression() ) );
buffer.append( ')' );
}
return buffer.toString();
}
private static String getUnaryIdExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
buffer.append( Keywords.TYPENAME );
buffer.append( ' ' );
if( expression.getExpressionKind() == Kind.POSTFIX_TYPENAME_TEMPLATEID ){
buffer.append( Keywords.TEMPLATE );
buffer.append( ' ' );
}
buffer.append( expression.getIdExpression() );
buffer.append( '(' );
buffer.append( getExpressionString( expression.getLHSExpression() ) );
buffer.append( ')' );
return buffer.toString();
}
private static String getUnaryExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
Kind kind = expression.getExpressionKind();
boolean bracketsAroundExpression = ( kind == Kind.PRIMARY_BRACKETED_EXPRESSION );
if ( kind == Kind.UNARY_SIZEOF_UNARYEXPRESSION ){
buffer.append( Keywords.SIZEOF );
buffer.append( ' ' );
}
else if ( kind == Kind.UNARY_STAR_CASTEXPRESSION ||
kind == Kind.UNARY_AMPSND_CASTEXPRESSION ||
kind == Kind.UNARY_PLUS_CASTEXPRESSION ||
kind == Kind.UNARY_MINUS_CASTEXPRESSION ||
kind == Kind.UNARY_NOT_CASTEXPRESSION ||
kind == Kind.UNARY_TILDE_CASTEXPRESSION ||
kind == Kind.UNARY_DECREMENT ||
kind == Kind.THROWEXPRESSION
)
{
buffer.append( ASTUtil.getStringForKind( kind ) );
}
else if ( kind == Kind.UNARY_INCREMENT )
buffer.append( "++" ); //$NON-NLS-1$
else if( kind == Kind.DELETE_VECTORCASTEXPRESSION || kind == Kind.DELETE_CASTEXPRESSION ){
buffer.append( Keywords.DELETE );
buffer.append(' ');
if( kind == Kind.DELETE_VECTORCASTEXPRESSION )
buffer.append( "[ ] " ); //$NON-NLS-1$
} else if( kind == Kind.POSTFIX_SIMPLETYPE_CHAR ||
kind == Kind.POSTFIX_SIMPLETYPE_WCHART ||
kind == Kind.POSTFIX_SIMPLETYPE_BOOL ||
kind == Kind.POSTFIX_SIMPLETYPE_SHORT ||
kind == Kind.POSTFIX_SIMPLETYPE_INT ||
kind == Kind.POSTFIX_SIMPLETYPE_LONG ||
kind == Kind.POSTFIX_SIMPLETYPE_SIGNED ||
kind == Kind.POSTFIX_SIMPLETYPE_UNSIGNED ||
kind == Kind.POSTFIX_SIMPLETYPE_FLOAT ||
kind == Kind.POSTFIX_SIMPLETYPE_DOUBLE
)
{
buffer.append( ASTUtil.getStringForKind( kind ) );
bracketsAroundExpression = true;
} else if( kind == Kind.POSTFIX_TYPEID_EXPRESSION )
{
buffer.append( Keywords.TYPEID );
bracketsAroundExpression = true;
}
if( bracketsAroundExpression )
buffer.append( '(' );
buffer.append( getExpressionString( expression.getLHSExpression() ) );
if( bracketsAroundExpression )
buffer.append( ')' );
if( kind == Kind.POSTFIX_INCREMENT ||
kind == Kind.POSTFIX_DECREMENT )
{
buffer.append( ASTUtil.getStringForKind( kind ) );
}
return buffer.toString();
}
private static String getTypeIdExpression( IASTExpression expression ){
StringBuffer buffer = new StringBuffer();
Kind kind = expression.getExpressionKind();
boolean addBrackets = false;
if( kind == Kind.UNARY_SIZEOF_TYPEID ){
buffer.append( Keywords.SIZEOF );
buffer.append( ' ' );
addBrackets = true;
} else if( kind == Kind.POSTFIX_TYPEID_TYPEID ){
buffer.append( Keywords.TYPEID );
addBrackets = true;
}
if( addBrackets )
buffer.append( '(' );
buffer.append( ASTUtil.getTypeId( expression.getTypeId() ) );
if( addBrackets )
buffer.append( ')' );
return buffer.toString();
}
private static final Map expressionKindStringMap = new HashMap();
static {
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_DYNAMIC_CAST, Keywords.DYNAMIC_CAST );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_STATIC_CAST, Keywords.STATIC_CAST );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_REINTERPRET_CAST, Keywords.REINTERPRET_CAST );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_CONST_CAST, Keywords.CONST_CAST );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_CHAR, Keywords.CHAR );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_WCHART, Keywords.WCHAR_T );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_BOOL, Keywords.BOOL );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_SHORT, Keywords.SHORT );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_INT, Keywords.INT );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_LONG, Keywords.LONG );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_SIGNED, Keywords.SIGNED );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_UNSIGNED, Keywords.UNSIGNED );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_FLOAT, Keywords.FLOAT );
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_SIMPLETYPE_DOUBLE, Keywords.DOUBLE );
expressionKindStringMap.put( IASTExpression.Kind.THROWEXPRESSION, Keywords.THROW );
expressionKindStringMap.put( IASTExpression.Kind.ANDEXPRESSION, "&" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_AMPSND_CASTEXPRESSION, "&" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.EXPRESSIONLIST, "," ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.EXCLUSIVEOREXPRESSION, "^" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.PM_DOTSTAR, ".*" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.PM_ARROWSTAR, "->*" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.LOGICALANDEXPRESSION, "&&" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.LOGICALOREXPRESSION, "||" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.RELATIONAL_GREATERTHAN, ">" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.RELATIONAL_LESSTHAN, "<" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.RELATIONAL_LESSTHANEQUALTO, "<=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.RELATIONAL_GREATERTHANEQUALTO, ">=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.EQUALITY_EQUALS, "==" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.EQUALITY_NOTEQUALS, "!=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_STAR_CASTEXPRESSION, "*" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.MULTIPLICATIVE_MULTIPLY, "*" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_PLUS_CASTEXPRESSION, "+" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ADDITIVE_PLUS, "+" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_MINUS_CASTEXPRESSION, "-" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ADDITIVE_MINUS, "-" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_NOT_CASTEXPRESSION, "!" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_TILDE_CASTEXPRESSION, "~" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_DECREMENT, "--" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_DECREMENT, "--" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.UNARY_INCREMENT, "++" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_INCREMENT, "++" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.INCLUSIVEOREXPRESSION, "|" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.MULTIPLICATIVE_DIVIDE, "/" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.MULTIPLICATIVE_MODULUS, "%" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_DOT_TEMPL_IDEXPRESS, "." ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_DOT_IDEXPRESSION, "." ); //$NON-NLS-1$ |
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_DOT_DESTRUCTOR, "." ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_ARROW_TEMPL_IDEXP, "->" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_ARROW_DESTRUCTOR, "->" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.POSTFIX_ARROW_IDEXPRESSION, "->" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_NORMAL, "=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_MULT, "*=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_DIV, "/=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_MOD, "%=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_PLUS, "+=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_MINUS, "-=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_RSHIFT, ">>=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_LSHIFT, "<<=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_AND, "&=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_XOR, "^=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.ASSIGNMENTEXPRESSION_OR, "|=" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.SHIFT_LEFT, "<<" ); //$NON-NLS-1$
expressionKindStringMap.put( IASTExpression.Kind.SHIFT_RIGHT, ">>" ); //$NON-NLS-1$
}
private static String getStringForKind( IASTExpression.Kind kind ){
return (String) expressionKindStringMap.get( kind );
}
}

View file

@ -1966,8 +1966,9 @@ public class ExpressionParser implements IExpressionParser, IParserData {
setCompletionValues( scope, CompletionKind.CONSTRUCTOR_REFERENCE );
if( templateIdScopes != null ){ templateIdScopes.push( new Integer( IToken.tLPAREN ) ); }
if ( queryLookaheadCapability() && (LT(1) != IToken.tRPAREN))
newInitializerExpressions.add(expression(scope, CompletionKind.CONSTRUCTOR_REFERENCE, key));
//we want to know the difference between no newInitializer and an empty new Initializer
//if the next token is the RPAREN, then we have an Empty expression in our list.
newInitializerExpressions.add(expression(scope, CompletionKind.CONSTRUCTOR_REFERENCE, key));
setCurrentFunctionName( EMPTY_STRING );
consume(IToken.tRPAREN);
@ -2139,26 +2140,15 @@ public class ExpressionParser implements IExpressionParser, IParserData {
{
case IToken.t_typename :
consume(IToken.t_typename);
ITokenDuple nestedName = name(scope, CompletionKind.TYPE_REFERENCE, KeywordSetKey.EMPTY);
boolean templateTokenConsumed = false;
if( LT(1) == IToken.t_template )
{
consume( IToken.t_template );
templateTokenConsumed = true;
}
IToken current = mark();
ITokenDuple templateId = null;
try
{
templateId = TokenFactory.createTokenDuple( current, templateId(scope, CompletionKind.SINGLE_NAME_REFERENCE ) );
}
catch( BacktrackException bt )
{
if( templateTokenConsumed )
throw bt;
backup( current );
}
current = null;
ITokenDuple nestedName = name(scope, CompletionKind.TYPE_REFERENCE, KeywordSetKey.EMPTY);
consume( IToken.tLPAREN );
if( templateIdScopes != null ){ templateIdScopes.push( new Integer( IToken.tLPAREN ) ); }
IASTExpression expressionList = expression( scope, CompletionKind.TYPE_REFERENCE, key );
@ -2167,7 +2157,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
try {
firstExpression =
astFactory.createExpression( scope,
(( templateId != null )? IASTExpression.Kind.POSTFIX_TYPENAME_TEMPLATEID : IASTExpression.Kind.POSTFIX_TYPENAME_IDENTIFIER ),
( templateTokenConsumed ? IASTExpression.Kind.POSTFIX_TYPENAME_TEMPLATEID : IASTExpression.Kind.POSTFIX_TYPENAME_IDENTIFIER ),
expressionList,
null,
null,

View file

@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -88,4 +89,8 @@ public class ASTBinaryExpression extends ASTUnaryExpression {
super.freeReferences(manager);
rhs.freeReferences(manager);
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -92,4 +93,7 @@ public class ASTConditionalExpression extends ASTBinaryExpression {
super.freeReferences(manager);
thirdExpression.freeReferences(manager);
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
@ -32,4 +33,8 @@ public class ASTEmptyExpression extends ASTExpression {
*/
public void freeReferences(IReferenceManager manager) {
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
/**
* @author jcamelon
@ -44,6 +45,7 @@ public class ASTIdExpression extends ASTExpression {
return idExpression;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -12,6 +12,8 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
/**
* @author jcamelon
*
@ -35,4 +37,8 @@ public class ASTLiteralExpression extends ASTExpression {
public String getLiteralString() {
return literal;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -14,6 +14,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -80,4 +81,8 @@ public class ASTNewExpression extends ASTExpression {
super.freeReferences(manager);
typeId.freeReferences( manager );
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -51,4 +52,8 @@ public class ASTTypeIdExpression extends ASTExpression {
super.freeReferences(manager);
typeId.freeReferences(manager);
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -84,4 +85,8 @@ public class ASTUnaryExpression extends ASTExpression {
super.freeReferences(manager);
lhs.freeReferences(manager);
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -0,0 +1,93 @@
/**********************************************************************
* Copyright (c) 2004 IBM - Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
/*
* Created on Jun 7, 2004
*/
package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author aniefer
*/
public class ASTUnaryIdExpression extends ASTIdExpression {
private final IASTExpression lhs;
/**
* @param kind
* @param references
* @param idExpression
*/
public ASTUnaryIdExpression(Kind kind, List references, IASTExpression lhs, ITokenDuple idExpression) {
super(kind, references, idExpression);
this.lhs = lhs;
}
public IASTExpression getLHSExpression(){
return lhs;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#findOwnerExpressionForIDExpression(org.eclipse.cdt.core.parser.ITokenDuple)
*/
public ASTExpression findOwnerExpressionForIDExpression(ITokenDuple duple) {
if( isIDExpressionForDuple( lhs, duple ) )
return this;
ASTExpression result = recursiveFindExpressionForDuple(lhs, duple);
return result;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#reconcileReferences()
*/
public void reconcileReferences(IReferenceManager manager) throws ASTNotImplementedException {
lhs.reconcileReferences(manager);
reconcileSubExpression((ASTExpression) lhs, manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#purgeReferences()
*/
public void purgeReferences() throws ASTNotImplementedException {
lhs.purgeReferences();
purgeSubExpression( (ASTExpression) lhs );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks()
*/
protected void processCallbacks( ISourceElementRequestor requestor, IReferenceManager manager ) {
super.processCallbacks(requestor, manager);
lhs.acceptElement( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
*/
public void freeReferences(IReferenceManager manager) {
super.freeReferences(manager);
lhs.freeReferences(manager);
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@ -57,4 +58,7 @@ public class ASTUnaryTypeIdExpression extends ASTUnaryExpression {
typeId.acceptElement( requestor, manager );
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -373,7 +373,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( t.getType() == IToken.tCOLONCOLON ){
idx++;
continue;
}
} else if( t.getType() == IToken.t_template ){
continue;
}
if( t.isPointer() ) break;
image = t.getImage();

View file

@ -29,7 +29,7 @@ public class ExpressionFactory {
if( !literal.equals( "") && idExpression == null ) //$NON-NLS-1$
return new ASTLiteralExpression( kind, references, literal );
if( idExpression != null )
if( idExpression != null && lhs == null )
return new ASTIdExpression( kind, references, idExpression );
if( thirdExpression != null )
@ -44,6 +44,9 @@ public class ExpressionFactory {
if( lhs != null && typeId != null )
return new ASTUnaryTypeIdExpression( kind, references, lhs, typeId );
if( lhs != null && idExpression != null )
return new ASTUnaryIdExpression( kind, references, lhs, idExpression );
if( lhs != null )
return new ASTUnaryExpression( kind, references, lhs );

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
@ -37,4 +38,8 @@ public class ASTBinaryExpression extends ASTUnaryExpression
public IASTExpression getRHSExpression() {
return rhs;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
@ -38,4 +39,8 @@ public class ASTConditionalExpression extends ASTBinaryExpression
public IASTExpression getThirdExpression() {
return thirdExpression;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
@ -25,4 +26,8 @@ public class ASTEmptyExpression extends ASTExpression implements IASTExpression
super(kind);
// TODO Auto-generated constructor stub
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
@ -37,4 +38,8 @@ public class ASTIdExpression extends ASTExpression implements IASTExpression {
public String getIdExpression() {
return idExpression;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,8 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
/**
* @author jcamelon
@ -33,4 +35,8 @@ public class ASTLiteralExpression extends ASTExpression {
public String getLiteralString() {
return literal;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -44,4 +45,8 @@ public class ASTNewExpression extends ASTExpression implements IASTExpression {
public IASTTypeId getTypeId() {
return typeId;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -39,4 +40,8 @@ public class ASTTypeIdExpression extends ASTExpression
public IASTTypeId getTypeId() {
return typeId;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
@ -34,4 +35,8 @@ public class ASTUnaryExpression extends ASTExpression implements IASTExpression
public IASTExpression getLHSExpression() {
return lhs;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -0,0 +1,40 @@
/**********************************************************************
* Copyright (c) 2004 IBM - Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
/*
* Created on Jun 7, 2004
*/
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
/**
* @author aniefer
*/
public class ASTUnaryIdExpression extends ASTIdExpression {
private final IASTExpression lhs;
/**
* @param kind
* @param idExpression
*/
public ASTUnaryIdExpression(Kind kind, IASTExpression lhs, String idExpression) {
super(kind, idExpression);
this.lhs = lhs;
}
public IASTExpression getLHSExpression(){
return lhs;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -10,6 +10,7 @@
package org.eclipse.cdt.internal.core.parser.ast.expression;
import org.eclipse.cdt.core.parser.ast.ASTUtil;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -40,4 +41,8 @@ public class ASTUnaryTypeIdExpression extends ASTUnaryExpression
public IASTTypeId getTypeId() {
return typeId;
}
public String toString(){
return ASTUtil.getExpressionString( this );
}
}

View file

@ -43,7 +43,7 @@ public class ExpressionFactory {
if( !literal.equals( EMPTY_STRING ) && idExpression.equals( EMPTY_STRING )) //$NON-NLS-1$
return new ASTLiteralExpression( kind, literal );
if( !idExpression.equals( EMPTY_STRING ) )
if( !idExpression.equals( EMPTY_STRING ) && lhs == null )
return new ASTIdExpression( kind, idExpression );
if( thirdExpression != null )
@ -58,6 +58,9 @@ public class ExpressionFactory {
if( lhs != null && typeId != null )
return new ASTUnaryTypeIdExpression( kind, lhs, typeId );
if( lhs != null && !idExpression.equals( EMPTY_STRING ) )
return new ASTUnaryIdExpression( kind, lhs, idExpression );
if( lhs != null )
return new ASTUnaryExpression( kind, lhs );