1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 01:35:39 +02:00

Bug 274490 - Return type stored in the ICElement- IFunctionDeclaration contains method qualifiers as well

This commit is contained in:
Anton Leherbauer 2009-05-04 10:44:24 +00:00
parent 3cec77c9d5
commit 4ca3c8a905
3 changed files with 40 additions and 30 deletions

View file

@ -15,6 +15,7 @@ import junit.framework.Test;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITranslationUnit;
@ -74,4 +75,12 @@ public class CModelBuilderBugsTest extends BaseTestCase {
assertNotNull(fTU.getElement("Unknown2::method"));
}
public void testModelBuilderBug274490() throws Exception {
IStructure clazz= (IStructure) fTU.getElement("Bug274490");
assertNotNull(clazz);
ICElement[] methods= clazz.getChildren();
assertEquals(2, methods.length);
assertEquals("int", ((IFunctionDeclaration) methods[0]).getReturnType());
assertEquals("const char*", ((IFunctionDeclaration) methods[1]).getReturnType());
}
}

View file

@ -13,3 +13,7 @@ namespace nsTest {
//http://bugs.eclipse.org/262785
void Unknown1::method() {} // no qualifier in outline
void Unknown2::method() {} // no qualifier in outline
class Bug274490 {
virtual int m();
inline const char* m2() const;
};

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
* Copyright (c) 2006, 2009 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -39,13 +39,11 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTTypeId;
import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.c.ICASTDesignatedInitializer;
import org.eclipse.cdt.core.dom.ast.c.ICASTPointer;
import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorInitializer;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration;
@ -59,7 +57,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplatedTypeTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTypenameExpression;
import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTPointer;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTSimpleDeclSpecifier;
import org.eclipse.cdt.core.parser.Keywords;
@ -472,35 +469,35 @@ public class ASTStringUtil {
if (declSpecifier.isConst()) {
buffer.append(Keywords.CONST).append(' ');
}
if (declSpecifier.isVolatile()) {
buffer.append(Keywords.VOLATILE).append(' ');
}
// if (declSpecifier.isVolatile()) {
// buffer.append(Keywords.VOLATILE).append(' ');
// }
// if (declSpecifier.isInline()) {
// buffer.append(Keywords.INLINE).append(' ');
// }
if (declSpecifier instanceof ICASTDeclSpecifier) {
final ICASTDeclSpecifier cDeclSpec= (ICASTDeclSpecifier)declSpecifier;
if (cDeclSpec.isRestrict()) {
buffer.append(Keywords.RESTRICT).append(' ');
}
} else if (declSpecifier instanceof ICPPASTDeclSpecifier) {
final ICPPASTDeclSpecifier cppDeclSpec= (ICPPASTDeclSpecifier)declSpecifier;
if (cppDeclSpec.isFriend()) {
buffer.append(Keywords.FRIEND).append(' ');
}
if (cppDeclSpec.isVirtual()) {
buffer.append(Keywords.VIRTUAL).append(' ');
}
if (cppDeclSpec.isExplicit()) {
buffer.append(Keywords.EXPLICIT).append(' ');
}
if (declSpecifier instanceof IGPPASTDeclSpecifier) {
final IGPPASTDeclSpecifier gppDeclSpec= (IGPPASTDeclSpecifier)declSpecifier;
if (gppDeclSpec.isRestrict()) {
buffer.append(Keywords.RESTRICT).append(' ');
}
}
}
// if (declSpecifier instanceof ICASTDeclSpecifier) {
// final ICASTDeclSpecifier cDeclSpec= (ICASTDeclSpecifier)declSpecifier;
// if (cDeclSpec.isRestrict()) {
// buffer.append(Keywords.RESTRICT).append(' ');
// }
// } else if (declSpecifier instanceof ICPPASTDeclSpecifier) {
// final ICPPASTDeclSpecifier cppDeclSpec= (ICPPASTDeclSpecifier)declSpecifier;
// if (cppDeclSpec.isFriend()) {
// buffer.append(Keywords.FRIEND).append(' ');
// }
// if (cppDeclSpec.isVirtual()) {
// buffer.append(Keywords.VIRTUAL).append(' ');
// }
// if (cppDeclSpec.isExplicit()) {
// buffer.append(Keywords.EXPLICIT).append(' ');
// }
// if (declSpecifier instanceof IGPPASTDeclSpecifier) {
// final IGPPASTDeclSpecifier gppDeclSpec= (IGPPASTDeclSpecifier)declSpecifier;
// if (gppDeclSpec.isRestrict()) {
// buffer.append(Keywords.RESTRICT).append(' ');
// }
// }
// }
// storage class
// final int storageClass= declSpecifier.getStorageClass();
// switch (storageClass) {