From 4ca3c8a9053183fd139b433829810d77aa0632c9 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Mon, 4 May 2009 10:44:24 +0000 Subject: [PATCH] Bug 274490 - Return type stored in the ICElement- IFunctionDeclaration contains method qualifiers as well --- .../model/tests/CModelBuilderBugsTest.java | 9 +++ .../resources/cmodel/CModelBuilderTest.cpp | 4 ++ .../internal/core/model/ASTStringUtil.java | 57 +++++++++---------- 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelBuilderBugsTest.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelBuilderBugsTest.java index d2f8524ea15..fc9bb65697d 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelBuilderBugsTest.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/CModelBuilderBugsTest.java @@ -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()); + } } diff --git a/core/org.eclipse.cdt.core.tests/resources/cmodel/CModelBuilderTest.cpp b/core/org.eclipse.cdt.core.tests/resources/cmodel/CModelBuilderTest.cpp index 2ed0521c160..de588d4abb1 100644 --- a/core/org.eclipse.cdt.core.tests/resources/cmodel/CModelBuilderTest.cpp +++ b/core/org.eclipse.cdt.core.tests/resources/cmodel/CModelBuilderTest.cpp @@ -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; +}; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java index cb51d5654c9..f8a49e6d14f 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java @@ -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) {