Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2008-06-19 10:54:19 -0400
committerMarkus Schorn2008-06-19 10:54:19 -0400
commita8817857ac08fff90e7f852e736f07e79b49d5c6 (patch)
tree1d13e30e222ba3c077faf6a418b2f5e871f40d4a
parentddca2b93d110a0e2a2f9bd2f985d90b0f924ce85 (diff)
downloadorg.eclipse.cdt-a8817857ac08fff90e7f852e736f07e79b49d5c6.tar.gz
org.eclipse.cdt-a8817857ac08fff90e7f852e736f07e79b49d5c6.tar.xz
org.eclipse.cdt-a8817857ac08fff90e7f852e736f07e79b49d5c6.zip
Fixes type-string computation for model builder, bug 235808.
-rw-r--r--core/org.eclipse.cdt.core.tests/.classpath1
-rw-r--r--core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF1
-rw-r--r--core/org.eclipse.cdt.core.tests/build.properties3
-rw-r--r--core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/CModelElementsFailedTests.java71
-rw-r--r--core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedDeclaratorsTest.java111
-rw-r--r--core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedMacroTests.java60
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java2
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java51
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ASTStringUtil.java136
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java20
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionInputPage.java2
11 files changed, 128 insertions, 330 deletions
diff --git a/core/org.eclipse.cdt.core.tests/.classpath b/core/org.eclipse.cdt.core.tests/.classpath
index 8be460c94f..a32029e231 100644
--- a/core/org.eclipse.cdt.core.tests/.classpath
+++ b/core/org.eclipse.cdt.core.tests/.classpath
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="misc"/>
- <classpathentry kind="src" path="failures"/>
<classpathentry kind="src" path="model"/>
<classpathentry kind="src" path="parser"/>
<classpathentry kind="src" path="suite"/>
diff --git a/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF
index d3feaeaef9..5209bd0269 100644
--- a/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.core.tests/META-INF/MANIFEST.MF
@@ -10,7 +10,6 @@ Export-Package: org.eclipse.cdt.core.cdescriptor.tests,
org.eclipse.cdt.core.internal.index.provider.test;x-internal:=true,
org.eclipse.cdt.core.internal.tests;x-internal:=true,
org.eclipse.cdt.core.language,
- org.eclipse.cdt.core.model.failedTests,
org.eclipse.cdt.core.model.tests,
org.eclipse.cdt.core.parser.tests,
org.eclipse.cdt.core.parser.tests.ast2,
diff --git a/core/org.eclipse.cdt.core.tests/build.properties b/core/org.eclipse.cdt.core.tests/build.properties
index e262fa6eca..8144b2c064 100644
--- a/core/org.eclipse.cdt.core.tests/build.properties
+++ b/core/org.eclipse.cdt.core.tests/build.properties
@@ -20,8 +20,7 @@ bin.includes = plugin.xml,\
parser/org/eclipse/cdt/core/parser/tests/scanner/
output.cdtcoretests.jar = bin/
-source.cdtcoretests.jar = failures/,\
- model/,\
+source.cdtcoretests.jar = model/,\
parser/,\
suite/,\
misc/,\
diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/CModelElementsFailedTests.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/CModelElementsFailedTests.java
deleted file mode 100644
index 939843abff..0000000000
--- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/CModelElementsFailedTests.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2006 IBM Corporation 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Rational Software - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.core.model.failedTests;
-
-
-import java.io.FileInputStream;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.cdt.core.dom.IPDOMManager;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.core.testplugin.CProjectHelper;
-import org.eclipse.cdt.core.testplugin.CTestPlugin;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-
-
-/**
- * @author vhirsl
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class CModelElementsFailedTests extends TestCase {
-
- private ICProject fCProject;
- private IFile headerFile;
- private NullProgressMonitor monitor;
-
- public static Test suite() {
- TestSuite suite= new TestSuite(CModelElementsFailedTests.class.getName());
- suite.addTest(new CModelElementsFailedTests("testBug36379"));
- return suite;
- }
-
- public CModelElementsFailedTests(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- monitor = new NullProgressMonitor();
- String pluginRoot = CTestPlugin.getDefault().find(new Path("/")).getFile();
-
- fCProject= CProjectHelper.createCCProject("TestProject1", "bin", IPDOMManager.ID_NO_INDEXER);
- headerFile = fCProject.getProject().getFile("CModelElementsTest.h");
- if (!headerFile.exists()) {
- try{
- FileInputStream fileIn = new FileInputStream(pluginRoot+ "resources/cfiles/CModelElementsTestStart.h");
- headerFile.create(fileIn,false, monitor);
- } catch (CoreException e) {
- e.printStackTrace();
- }
- }
- }
-
- protected void tearDown() {
- CProjectHelper.delete(fCProject);
- }
-}
diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedDeclaratorsTest.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedDeclaratorsTest.java
deleted file mode 100644
index d77b41a63c..0000000000
--- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedDeclaratorsTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2007 IBM Corporation 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Rational Software - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.core.model.failedTests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.cdt.core.model.CModelException;
-import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.cdt.core.model.IFunction;
-import org.eclipse.cdt.core.model.ITranslationUnit;
-import org.eclipse.cdt.core.model.ITypeDef;
-import org.eclipse.cdt.core.model.tests.IntegratedCModelTest;
-import org.eclipse.cdt.core.tests.FailingTest;
-
-
-
-/**
- * @author jcamelon
- *
- */
-public class FailedDeclaratorsTest extends IntegratedCModelTest
-{
- // the defect to track these failures is Bug 40768
-
- private FailedDeclaratorsTest(String name) {
- super(name);
- }
-
- /**
- * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
- */
- public String getSourcefileSubdir() {
- return "resources/cmodel/";
- }
-
- /**
- * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
- */
- public String getSourcefileResource() {
- return "DeclaratorsTests.cpp";
- }
-
- /**
- * @returns a test suite named after this class
- * containing all its public members named "test*"
- */
- public static Test suite() {
- TestSuite suite= new TestSuite("FailedDeclaratorsTest");
- suite.addTest(new FailingTest(new FailedDeclaratorsTest("testDeclarators_0011"), 40768));
- suite.addTest(new FailingTest(new FailedDeclaratorsTest("testDeclarators_0013"), 40768));
- suite.addTest(new FailingTest(new FailedDeclaratorsTest("testDeclarators_0014"), 40768));
- suite.addTest(new FailingTest(new FailedDeclaratorsTest("testDeclarators_0023"), 40768));
- return suite;
- }
-
-
- public void testDeclarators_0011() throws CModelException {
- ITranslationUnit tu = getTU();
- ICElement element = tu.getElement("decl_0011");
- assertNotNull(element);
- assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
- ITypeDef decl = (ITypeDef)element;
- assertEquals(decl.getTypeName(), "void()(char)");
- }
-
- public void testDeclarators_0012() throws CModelException {
- ITranslationUnit tu = getTU();
- ICElement element = tu.getElement("decl_0012");
- assertNotNull(element);
- assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
- ITypeDef decl = (ITypeDef)element;
- assertEquals(decl.getTypeName(), "void()(char)");
- }
-
- public void testDeclarators_0013() throws CModelException {
- ITranslationUnit tu = getTU();
- ICElement element = tu.getElement("decl_0013");
- assertNotNull(element);
- assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
- ITypeDef decl = (ITypeDef)element;
- assertEquals(decl.getTypeName(), "void()(char)");
- }
-
- public void testDeclarators_0014() throws CModelException {
- ITranslationUnit tu = getTU();
- ICElement element = tu.getElement("decl_0014");
- assertNotNull(element);
- assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
- ITypeDef decl = (ITypeDef)element;
- assertEquals(decl.getTypeName(), "void*()(char)");
- }
-
- public void testDeclarators_0023() throws CModelException {
- ITranslationUnit tu = getTU();
- ICElement element = tu.getElement("decl_0023");
- assertNotNull(element);
- assertEquals(element.getElementType(), ICElement.C_FUNCTION);
- IFunction decl = (IFunction)element;
- assertEquals(decl.getSignature(), "decl_0023(int)");
- assertEquals(decl.getReturnType(), "void(*(*))(char)");
- }
-}
diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedMacroTests.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedMacroTests.java
deleted file mode 100644
index 704bca45fd..0000000000
--- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/model/failedTests/FailedMacroTests.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2008 IBM Corporation 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Rational Software - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.core.model.failedTests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.cdt.core.model.tests.IntegratedCModelTest;
-
-/**
- * @author jcamelon
- *
- */
-public class FailedMacroTests extends IntegratedCModelTest
-{
- public static Test suite() {
- TestSuite suite= new TestSuite("FailedMacroTests");
- return suite;
- }
-
- /**
- *
- */
- public FailedMacroTests()
- {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @param name
- */
- public FailedMacroTests(String name)
- {
- super(name);
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
- */
- public String getSourcefileSubdir() {
- return "resources/cmodel/";
- }
-
- /**
- * @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
- */
- public String getSourcefileResource() {
- return "MacroTests.cpp";
- }
-
-}
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
index a882db00d7..7d1d2e5bb2 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/AllCoreTests.java
@@ -13,7 +13,6 @@ package org.eclipse.cdt.core.model.tests;
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.eclipse.cdt.core.model.failedTests.FailedDeclaratorsTest;
import org.eclipse.cdt.core.settings.model.AllCProjectDescriptionTests;
import org.eclipse.cdt.core.settings.model.PathSettingsContainerTests;
@@ -47,7 +46,6 @@ public class AllCoreTests {
suite.addTest(ArchiveTests.suite());
suite.addTest(TranslationUnitTests.suite());
suite.addTest(DeclaratorsTests.suite());
- suite.addTest(FailedDeclaratorsTest.suite());
suite.addTest(MacroTests.suite());
// suite.addTest(FailedMacroTests.suite());
suite.addTest(CPathEntryTest.suite());
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
index fc915b764c..ad5f62fe07 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/DeclaratorsTests.java
@@ -19,6 +19,7 @@ import junit.framework.TestSuite;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.IFunction;
import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.ITypeDef;
@@ -40,6 +41,7 @@ public class DeclaratorsTests extends IntegratedCModelTest {
/**
* @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
*/
+ @Override
public String getSourcefileSubdir() {
return "resources/cmodel/";
}
@@ -47,6 +49,7 @@ public class DeclaratorsTests extends IntegratedCModelTest {
/**
* @see org.eclipse.cdt.internal.core.model.IntegratedCModelTest
*/
+ @Override
public String getSourcefileResource() {
return "DeclaratorsTests.cpp";
}
@@ -129,6 +132,42 @@ public class DeclaratorsTests extends IntegratedCModelTest {
}
+ public void testDeclarators_0011() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0011");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(char)");
+ }
+
+ public void testDeclarators_0012() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0012");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(char)");
+ }
+
+ public void testDeclarators_0013() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0013");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void(char)");
+ }
+
+ public void testDeclarators_0014() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0014");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_TYPEDEF);
+ ITypeDef decl = (ITypeDef)element;
+ assertEquals(decl.getTypeName(), "void*(char)");
+ }
+
public void testDeclarators_0015() throws CModelException {
ITranslationUnit tu = getTU();
ICElement element = tu.getElement("decl_0015");
@@ -155,7 +194,17 @@ public class DeclaratorsTests extends IntegratedCModelTest {
ITypeDef decl = (ITypeDef)element;
assertEquals(decl.getTypeName(), "void(*)(char)");
}
-
+
+ public void testDeclarators_0023() throws CModelException {
+ ITranslationUnit tu = getTU();
+ ICElement element = tu.getElement("decl_0023");
+ assertNotNull(element);
+ assertEquals(element.getElementType(), ICElement.C_FUNCTION);
+ IFunction decl = (IFunction)element;
+ assertEquals(decl.getSignature(), "decl_0023(int)");
+ assertEquals(decl.getReturnType(), "void(**)(char)");
+ }
+
public void testDeclarators_0024() throws CModelException {
ITranslationUnit tu = getTU();
ICElement element = tu.getElement("decl_0024");
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 571acb7eb3..da3f258085 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
@@ -64,6 +64,7 @@ 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;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor;
/**
@@ -119,20 +120,21 @@ public class ASTStringUtil {
*/
public static String getSignatureString(IASTDeclSpecifier declSpecifier, IASTDeclarator declarator) {
final StringBuilder buffer= new StringBuilder();
- appendDeclarationString(buffer, declSpecifier, declarator, true);
+ appendDeclarationString(buffer, declSpecifier, declarator, null);
return trimRight(buffer).toString();
}
/**
- * Compute a (return-)type string without parameters and initializers.
+ * Compute the return-type string for a function declarator.
*
* @param declSpecifier
- * @param declarator
- * @return the type string
+ * @param fdecl
+ * @return the return type string
*/
- public static String getTypeString(IASTDeclSpecifier declSpecifier, IASTDeclarator declarator) {
+ public static String getReturnTypeString(IASTDeclSpecifier declSpecifier, IASTFunctionDeclarator fdecl) {
final StringBuilder buffer= new StringBuilder();
- appendDeclarationString(buffer, declSpecifier, declarator, false);
+ final IASTDeclarator declarator= CPPVisitor.findOutermostDeclarator(fdecl);
+ appendDeclarationString(buffer, declSpecifier, declarator, fdecl);
return trimRight(buffer).toString();
}
@@ -240,83 +242,87 @@ public class ASTStringUtil {
else
declSpec= null;
- return appendDeclarationString(buffer, declSpec, declarator, true);
+ return appendDeclarationString(buffer, declSpec, declarator, null);
}
- private static StringBuilder appendDeclarationString(StringBuilder buffer, IASTDeclSpecifier declSpecifier, IASTDeclarator declarator, boolean addParams) {
+ private static StringBuilder appendDeclarationString(StringBuilder buffer, IASTDeclSpecifier declSpecifier,
+ IASTDeclarator declarator, IASTFunctionDeclarator returnTypeOf) {
if (declSpecifier != null) {
appendDeclSpecifierString(buffer, declSpecifier);
trimRight(buffer);
}
- appendDeclaratorString(buffer, declarator, addParams);
+ appendDeclaratorString(buffer, declarator, false, returnTypeOf);
return buffer;
}
private static StringBuilder appendDeclaratorString(StringBuilder buffer, IASTDeclarator declarator,
- boolean addParams) {
+ boolean protectPointers, IASTFunctionDeclarator returnTypeOf) {
if (declarator == null) {
return buffer;
}
- appendPointerOperatorsString(buffer, declarator.getPointerOperators());
- if (declarator instanceof IASTArrayDeclarator) {
- appendArrayQualifiersString(buffer, (IASTArrayDeclarator)declarator);
+ final IASTPointerOperator[] ptrs = declarator.getPointerOperators();
+ final boolean useParenthesis= protectPointers && ptrs.length > 0;
+ if (useParenthesis) {
+ buffer.append(Keywords.cpLPAREN);
+ protectPointers= false;
}
- final IASTDeclarator nestedDeclarator= declarator.getNestedDeclarator();
- if (nestedDeclarator != null) {
- StringBuilder tmp= new StringBuilder();
- appendDeclaratorString(tmp, nestedDeclarator, addParams);
- trimRight(tmp);
- final int tmpLength= tmp.length();
- if (tmpLength > 0) {
- if (tmp.charAt(0) != Keywords.cpLPAREN[0] || tmp.charAt(tmpLength-1) != Keywords.cpRPAREN[0]) {
- buffer.append(Keywords.cpLPAREN);
- buffer.append(tmp);
- buffer.append(Keywords.cpRPAREN);
- } else {
- buffer.append(tmp);
- }
+
+ appendPointerOperatorsString(buffer, ptrs);
+
+ if (declarator != returnTypeOf) {
+ final IASTDeclarator nestedDeclarator= declarator.getNestedDeclarator();
+ if (nestedDeclarator != null) {
+ protectPointers=
+ protectPointers || declarator instanceof IASTArrayDeclarator
+ || declarator instanceof IASTFunctionDeclarator
+ || declarator instanceof IASTFieldDeclarator;
+ appendDeclaratorString(buffer, nestedDeclarator, protectPointers, returnTypeOf);
}
- }
- if (!addParams) {
- return buffer;
- }
- if (declarator instanceof IASTFunctionDeclarator) {
- final IASTFunctionDeclarator functionDecl= (IASTFunctionDeclarator)declarator;
- appendParameterSignatureString(buffer, functionDecl);
- if (declarator instanceof ICPPASTFunctionDeclarator) {
- final ICPPASTFunctionDeclarator cppFunctionDecl= (ICPPASTFunctionDeclarator)declarator;
- if (cppFunctionDecl.isConst()) {
- buffer.append(Keywords.CONST).append(' ');
- }
- if (cppFunctionDecl.isVolatile()) {
- buffer.append(Keywords.VOLATILE).append(' ');
- }
- if (cppFunctionDecl.isPureVirtual()) {
- buffer.append("=0 "); //$NON-NLS-1$
- }
- final IASTTypeId[] exceptionTypeIds= cppFunctionDecl.getExceptionSpecification();
- if (exceptionTypeIds.length > 0) {
- buffer.append(Keywords.THROW).append(' ');
- for (int i= 0; i < exceptionTypeIds.length; i++) {
- if (i > 0) {
- buffer.append(COMMA_SPACE);
+
+ if (declarator instanceof IASTArrayDeclarator) {
+ appendArrayQualifiersString(buffer, (IASTArrayDeclarator)declarator);
+ } else if (declarator instanceof IASTFunctionDeclarator) {
+ final IASTFunctionDeclarator functionDecl= (IASTFunctionDeclarator)declarator;
+ appendParameterSignatureString(buffer, functionDecl);
+ if (declarator instanceof ICPPASTFunctionDeclarator) {
+ final ICPPASTFunctionDeclarator cppFunctionDecl= (ICPPASTFunctionDeclarator)declarator;
+ if (cppFunctionDecl.isConst()) {
+ buffer.append(Keywords.CONST).append(' ');
+ }
+ if (cppFunctionDecl.isVolatile()) {
+ buffer.append(Keywords.VOLATILE).append(' ');
+ }
+ if (cppFunctionDecl.isPureVirtual()) {
+ buffer.append("=0 "); //$NON-NLS-1$
+ }
+ final IASTTypeId[] exceptionTypeIds= cppFunctionDecl.getExceptionSpecification();
+ if (exceptionTypeIds.length > 0) {
+ buffer.append(Keywords.THROW).append(' ');
+ for (int i= 0; i < exceptionTypeIds.length; i++) {
+ if (i > 0) {
+ buffer.append(COMMA_SPACE);
+ }
+ appendTypeIdString(buffer, exceptionTypeIds[i]);
}
- appendTypeIdString(buffer, exceptionTypeIds[i]);
+ }
+ if (declarator instanceof ICPPASTFunctionTryBlockDeclarator) {
+ assert false : "TODO: handle "+ declarator.getClass().getName(); //$NON-NLS-1$
}
}
- if (declarator instanceof ICPPASTFunctionTryBlockDeclarator) {
- assert false : "TODO: handle "+ declarator.getClass().getName(); //$NON-NLS-1$
+ } else if (declarator instanceof IASTFieldDeclarator) {
+ final IASTFieldDeclarator fieldDeclarator= (IASTFieldDeclarator)declarator;
+ final IASTExpression bitFieldSize= fieldDeclarator.getBitFieldSize();
+ if (bitFieldSize != null) {
+ buffer.append(Keywords.cpCOLON);
+ appendExpressionString(buffer, bitFieldSize);
}
+ } else {
+ // just a nested name
}
- } else if (declarator instanceof IASTFieldDeclarator) {
- final IASTFieldDeclarator fieldDeclarator= (IASTFieldDeclarator)declarator;
- final IASTExpression bitFieldSize= fieldDeclarator.getBitFieldSize();
- if (bitFieldSize != null) {
- buffer.append(Keywords.cpCOLON);
- appendExpressionString(buffer, bitFieldSize);
- }
- } else {
-// assert false : "TODO: handle "+ declarator.getClass().getName(); //$NON-NLS-1$
+ }
+ if (useParenthesis) {
+ trimRight(buffer);
+ buffer.append(Keywords.cpRPAREN);
}
return buffer;
}
@@ -358,7 +364,7 @@ public class ASTStringUtil {
private static StringBuilder appendTypeIdString(StringBuilder buffer, IASTTypeId typeId) {
appendDeclSpecifierString(buffer, typeId.getDeclSpecifier());
- appendDeclaratorString(buffer, typeId.getAbstractDeclarator(), true);
+ appendDeclaratorString(buffer, typeId.getAbstractDeclarator(), false, null);
return buffer;
}
@@ -459,7 +465,7 @@ public class ASTStringUtil {
}
final IASTDeclarator declarator= parameter.getDeclarator();
if (declarator != null) {
- appendDeclaratorString(buffer, declarator, true);
+ appendDeclaratorString(buffer, declarator, false, null);
appendInitializerString(buffer, declarator.getInitializer());
}
return buffer;
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java
index 3a92e8f55a..11ac6ee77b 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java
@@ -467,23 +467,13 @@ public class CModelBuilder2 implements IContributedModelBuilder {
if (declSpecifier.getStorageClass() == IASTDeclSpecifier.sc_typedef) {
return createTypeDef(parent, declSpecifier, declarator);
}
- if (declarator instanceof IASTFunctionDeclarator && !hasNestedPointerOperators(declarator)) {
- return createFunctionDeclaration(parent, declSpecifier, (IASTFunctionDeclarator)declarator, isTemplate);
+ IASTDeclarator typeRelevant= CPPVisitor.findTypeRelevantDeclarator(declarator);
+ if (typeRelevant instanceof IASTFunctionDeclarator) {
+ return createFunctionDeclaration(parent, declSpecifier, (IASTFunctionDeclarator)typeRelevant, isTemplate);
}
return createVariable(parent, declSpecifier, declarator, isTemplate);
}
- private boolean hasNestedPointerOperators(IASTDeclarator declarator) {
- declarator= declarator.getNestedDeclarator();
- while (declarator != null) {
- if (declarator.getPointerOperators().length > 0) {
- return true;
- }
- declarator= declarator.getNestedDeclarator();
- }
- return false;
- }
-
private void createNamespace(Parent parent, ICPPASTNamespaceDefinition declaration) throws CModelException, DOMException{
// create element
final String type= Keywords.NAMESPACE;
@@ -826,7 +816,7 @@ public class CModelBuilder2 implements IContributedModelBuilder {
final String functionName= ASTStringUtil.getSimpleName(name);
final String[] parameterTypes= ASTStringUtil.getParameterSignatureArray(declarator);
- final String returnType= ASTStringUtil.getTypeString(declSpecifier, declarator);
+ final String returnType= ASTStringUtil.getReturnTypeString(declSpecifier, declarator);
final FunctionDeclaration element;
final FunctionInfo info;
@@ -963,7 +953,7 @@ public class CModelBuilder2 implements IContributedModelBuilder {
final String functionName= ASTStringUtil.getSimpleName(name);
final String[] parameterTypes= ASTStringUtil.getParameterSignatureArray(declarator);
- final String returnType= ASTStringUtil.getTypeString(declSpecifier, declarator);
+ final String returnType= ASTStringUtil.getReturnTypeString(declSpecifier, declarator);
final FunctionDeclaration element;
final FunctionInfo info;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionInputPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionInputPage.java
index d2ef59baa9..e098a1093b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionInputPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractfunction/ExtractFunctionInputPage.java
@@ -102,7 +102,7 @@ public class ExtractFunctionInputPage extends UserInputWizardPage {
setPageComplete(true);
}
else{
- setErrorMessage(Messages.ExtractFunctionInputPage_CheckFunctionName + " " + result.getMessage());
+ setErrorMessage(Messages.ExtractFunctionInputPage_CheckFunctionName + " " + result.getMessage()); //$NON-NLS-1$
setPageComplete(false);
}
}

Back to the top